From 6207c0444be7c383838beb0ddc3d684ffee0262b Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Sun, 1 Jan 2012 17:57:26 +0100 Subject: Added class OC_Image --- lib/image.php | 297 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 297 insertions(+) create mode 100644 lib/image.php (limited to 'lib') diff --git a/lib/image.php b/lib/image.php new file mode 100644 index 00000000000..4b63ea5ff36 --- /dev/null +++ b/lib/image.php @@ -0,0 +1,297 @@ + +* +* 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 . +* +*/ + +/** + * Class for image manipulation + * Ideas: imagerotate, chunk_split(base64_encode()) + * + */ +class OC_Image { + static private $resource = false; // tmp resource. + static private $destroy = false; // if the resource is created withing the object. + /** + * @brief Constructor. + * @param $imageref The path to a local file, a base64 encoded string or a resource created by an imagecreate* function. + * If a resource is passed it is the job of the caller to destroy it using imagedestroy($var) + * @returns bool False on error + */ + 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 + OC_Log::write('core','OC_Image::__construct, GD module not installed', OC_Log::ERROR); + return false; + } + if(!is_null($imageref)) { + self::load($imageref); + } + } + + /** + * @brief Destructor. + */ + function __destruct() { + if(self::$resource && self::$destroy) { + imagedestroy(self::$resource); // Why does this issue a warning. + } + } + + /** + * @brief Prints the image. + */ + public function show() { + header('Content-Type: image/png'); + imagepng(self::$resource); + } + + /** + * @brief Prints the image when called as $image(). + */ + public function __invoke() { + self::show(); + } + + /** + * @returns Returns the image resource in any. + */ + public function imageResource() { + return self::$resource; + } + + /** + * @returns Returns a base64 encoded string suitable for embedding in a VCard. + */ + function __toString() { + ob_start(); + $res = imagepng(self::$resource); + if (!$res) { + OC_Log::write('core','OC_Image::_string. Error writing image',OC_Log::ERROR); + } + return chunk_split(base64_encode(ob_get_clean())); + } + + /** + * @brief Loads an image from a local file, a base64 encoded string or a resource created by an imagecreate* function. + * @param $imageref The path to a local file, a base64 encoded string or a resource created by an imagecreate* function. + * If a resource is passed it is the job of the caller to destroy it using imagedestroy($var) + * @returns An image resource or false on error + */ + static public function load($imageref) { + if(self::loadFromFile($imageref) !== false) { + return self::$resource; + } elseif(self::loadFromBase64($imageref) !== false) { + return self::$resource; + } elseif(self::loadFromData($imageref) !== false) { + return self::$resource; + } elseif(self::loadFromResource($imageref) !== false) { + return self::$resource; + } else { + OC_Log::write('core','OC_Image::load, couldn\'t load anything. Giving up!', OC_Log::DEBUG); + return false; + } + } + + /** + * @brief Loads an image from a local file. + * @param $imageref The path to a local file. + * @returns An image resource or false on error + */ + static public function loadFromFile($imagepath=false) { + if(!is_string($imagepath)) { + return false; + } + if(!is_file($imagepath) || !file_exists($imagepath) || !is_readable($imagepath)) { + OC_Log::write('core','OC_Image::loadFromFile, couldn\'t load'.$imagepath, OC_Log::DEBUG); + return false; + } + self::$resource = imagecreatefromstring(file_get_contents($imagepath)); + self::$destroy = true; + return self::$resource; + } + + /** + * @brief Loads an image from a string of data. + * @param $str A string of image data as read from a file. + * @returns An image resource or false on error + */ + static public function loadFromData($str) { + if(is_resource($str)) { + return false; + } + self::$resource = imagecreatefromstring($str); + if(!self::$resource) { + OC_Log::write('core','OC_Image::loadFromData, couldn\'t load', OC_Log::DEBUG); + return false; + } + self::$destroy = true; + return self::$resource; + } + + /** + * @brief Loads an image from a base64 encoded string. + * @param $str A string base64 encoded string of image data. + * @returns An image resource or false on error + */ + static public function loadFromBase64($str) { + if(!is_string($str)) { + return false; + } + $data = base64_decode($str); + if($data) { // try to load from string data + self::$resource = imagecreatefromstring($data); + if(!self::$resource) { + OC_Log::write('core','OC_Image::loadFromBase64, couldn\'t load', OC_Log::DEBUG); + return false; + } + self::$destroy = true; + return self::$resource; + } else { + return false; + } + } + + /** + * @brief Checks if image resource is valid and assigns it to self::$resource. + * @param $res An image resource. + * @returns An image resource or false on error + */ + static public function loadFromResource($res) { + if(!is_resource($res)) { + return false; + } + self::$resource = $res; + } + + /** + * @brief Resizes the image preserving ratio. + * @param $maxsize The maximum size of either the width or height. + * @returns bool + */ + public function resize($maxsize) { + if(!self::$resource) { + OC_Log::write('core','OC_Image::resize, No image loaded', OC_Log::ERROR); + throw new Exception('OC_Image::resize, No image loaded!', self::ERR_NO_IMAGE); + } + $width_orig=imageSX(self::$resource); + $height_orig=imageSY(self::$resource); + $ratio_orig = $width_orig/$height_orig; + + if ($ratio_orig > 1) { + $new_height = round($maxsize/$ratio_orig); + $new_width = $maxsize; + } else { + $new_width = round($maxsize*$ratio_orig); + $new_height = $maxsize; + } + + $process = imagecreatetruecolor(round($new_width), round($new_height)); + if ($process == false) { + OC_Log::write('core','OC_Image::resize. Error creating true color image',OC_Log::ERROR); + imagedestroy($process); + return false; + } + + imagecopyresampled($process, self::$resource, 0, 0, 0, 0, $new_width, $new_height, $width_orig, $height_orig); + if ($process == false) { + OC_Log::write('core','OC_Image::resize. Error resampling process image '.$new_width.'x'.$new_height,OC_Log::ERROR); + imagedestroy($process); + return false; + } + self::$resource = $process; + return true; + } + + /** + * @brief Crops the image to the middle square. If the image is already square it just returns. + * @returns bool for success or failure + */ + public function centerCrop() { + if(!self::$resource) { + OC_Log::write('core','OC_Image::centerCrop, No image loaded', OC_Log::ERROR); + return false; + } + $width_orig=imageSX(self::$resource); + $height_orig=imageSY(self::$resource); + OC_Log::write('core','OC_Image::centerCrop. Original size: '.$width_orig.'x'.$height_orig, OC_Log::DEBUG); + if($width_orig === $height_orig) { + return true; + } + $ratio_orig = $width_orig/$height_orig; + OC_Log::write('core','OC_Image::centerCrop. Ratio: '.$ratio_orig, OC_Log::DEBUG); + $width = $height = min($width_orig, $height_orig); + OC_Log::write('core','OC_Image::centerCrop. New size: '.$width.'x'.$height, OC_Log::DEBUG); + + if ($ratio_orig > 1) { + $x = ($width_orig/2) - ($width/2); + $y = 0; + } else { + $y = ($height_orig/2) - ($height/2); + $x = 0; + } + $process = imagecreatetruecolor($width, $height); + if ($process == false) { + OC_Log::write('core','OC_Image::centerCrop. Error creating true color image',OC_Log::ERROR); + imagedestroy($process); + return false; + } + imagecopyresampled($process, self::$resource, 0, 0, $x, $y, $width, $height, $width, $height); + if ($process == false) { + OC_Log::write('core','OC_Image::centerCrop. Error resampling process image '.$width.'x'.$height,OC_Log::ERROR); + imagedestroy($process); + return false; + } + self::$resource = $process; + return true; + } + + /** + * @brief Crops the image from point $x$y with dimension $wx$h. + * @param $x Horizontal position + * @param $y Vertical position + * @param $w Width + * @param $h Hight + * @returns bool for success or failure + */ + public function crop($x, $y, $w, $h) { + if(!self::$resource) { + OC_Log::write('core','OC_Image::crop, No image loaded', OC_Log::ERROR); + return false; + } + $width_orig=imageSX(self::$resource); + $height_orig=imageSY(self::$resource); + //OC_Log::write('core','OC_Image::crop. Original size: '.$width_orig.'x'.$height_orig, OC_Log::DEBUG); + $process = imagecreatetruecolor($w, $h); + if ($process == false) { + OC_Log::write('core','OC_Image::crop. Error creating true color image',OC_Log::ERROR); + imagedestroy($process); + return false; + } + imagecopyresampled($process, self::$resource, 0, 0, $x, $y, $w, $h, $w, $h); + if ($process == false) { + OC_Log::write('core','OC_Image::crop. Error resampling process image '.$w.'x'.$h,OC_Log::ERROR); + imagedestroy($process); + return false; + } + self::$resource = $process; + return true; + } +} -- cgit v1.2.3 From c500c1e9307fd10f009f19351a101083969bfed2 Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Sun, 1 Jan 2012 18:07:46 +0100 Subject: Removed some denug statements and an exception thrown. --- lib/image.php | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'lib') diff --git a/lib/image.php b/lib/image.php index 4b63ea5ff36..67290d21f3a 100644 --- a/lib/image.php +++ b/lib/image.php @@ -189,7 +189,7 @@ class OC_Image { public function resize($maxsize) { if(!self::$resource) { OC_Log::write('core','OC_Image::resize, No image loaded', OC_Log::ERROR); - throw new Exception('OC_Image::resize, No image loaded!', self::ERR_NO_IMAGE); + return false; } $width_orig=imageSX(self::$resource); $height_orig=imageSY(self::$resource); @@ -231,14 +231,11 @@ class OC_Image { } $width_orig=imageSX(self::$resource); $height_orig=imageSY(self::$resource); - OC_Log::write('core','OC_Image::centerCrop. Original size: '.$width_orig.'x'.$height_orig, OC_Log::DEBUG); if($width_orig === $height_orig) { return true; } $ratio_orig = $width_orig/$height_orig; - OC_Log::write('core','OC_Image::centerCrop. Ratio: '.$ratio_orig, OC_Log::DEBUG); $width = $height = min($width_orig, $height_orig); - OC_Log::write('core','OC_Image::centerCrop. New size: '.$width.'x'.$height, OC_Log::DEBUG); if ($ratio_orig > 1) { $x = ($width_orig/2) - ($width/2); -- cgit v1.2.3 From 929ce2b56621ceda47b910a0fea5452f01812554 Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Sun, 1 Jan 2012 20:06:35 +0100 Subject: Small fixes --- lib/image.php | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'lib') diff --git a/lib/image.php b/lib/image.php index 67290d21f3a..0e1d1ee327f 100644 --- a/lib/image.php +++ b/lib/image.php @@ -55,6 +55,15 @@ class OC_Image { } } + /** + * @brief Determine whether the object contains an image resource. + * returns bool + */ + function empty() { + if(self::$resource && self::$destroy) { + } + } + /** * @brief Prints the image. */ @@ -116,9 +125,6 @@ class OC_Image { * @returns An image resource or false on error */ static public function loadFromFile($imagepath=false) { - if(!is_string($imagepath)) { - return false; - } if(!is_file($imagepath) || !file_exists($imagepath) || !is_readable($imagepath)) { OC_Log::write('core','OC_Image::loadFromFile, couldn\'t load'.$imagepath, OC_Log::DEBUG); return false; -- cgit v1.2.3 From 19328fd8b2a7d050c040b5db2bf6fcc423eec1dc Mon Sep 17 00:00:00 2001 From: Michael Gapczynski Date: Sun, 1 Jan 2012 15:56:33 -0500 Subject: Initial commit of common filestorage --- lib/filestoragecommon.php | 76 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 lib/filestoragecommon.php (limited to 'lib') diff --git a/lib/filestoragecommon.php b/lib/filestoragecommon.php new file mode 100644 index 00000000000..347a92ec1f5 --- /dev/null +++ b/lib/filestoragecommon.php @@ -0,0 +1,76 @@ +. +*/ + +class OC_Filestorage_Common extends OC_Filestorage { + + public function __construct($parameters){} + public function mkdir($path){} + public function rmdir($path){} + public function opendir($path){} + public function is_dir($path){} + public function is_file($path){} + public function stat($path){} + public function filetype($path){} + public function filesize($path) { + $stat = $this->stat($path); + return $stat['size']; + } + public function is_readable($path){} + public function is_writeable($path){} + public function file_exists($path){} + public function readfile($path) { + echo $this->file_get_contents($path); + return $this->filesize($path); + } + public function filectime($path) { + $stat = $this->stat($path); + return $stat['ctime']; + } + public function filemtime($path) { + $stat = $this->stat($path); + return $stat['mtime']; + } + public function fileatime($path) { + $stat = $this->stat($path); + return $stat['atime']; + } + public function file_get_contents($path) { + $handle = $this->fopen($path, "r"); + return fread($handle, $this->filesize($path)); + } + public function file_put_contents($path,$data) { + $handle = $this->fopen($path, "w"); + return fwrite($handle, $data); + } + public function unlink($path){} + public function rename($path1,$path2){} + public function copy($path1,$path2){} + public function fopen($path,$mode){} + public function toTmpFile($path){} + public function fromTmpFile($tmpPath,$path){} + public function fromUploadedFile($tmpPath,$path){} + public function getMimeType($path){} + public function hash($type,$path,$raw){} + public function free_space($path){} + public function search($query){} + public function getLocalFile($path){} +} -- cgit v1.2.3 From 782d201191c79b400ece4109fbb0e194e23880e6 Mon Sep 17 00:00:00 2001 From: Michael Gapczynski Date: Sun, 1 Jan 2012 16:25:43 -0500 Subject: Move to branch --- lib/filestoragecommon.php | 76 ----------------------------------------------- 1 file changed, 76 deletions(-) delete mode 100644 lib/filestoragecommon.php (limited to 'lib') diff --git a/lib/filestoragecommon.php b/lib/filestoragecommon.php deleted file mode 100644 index 347a92ec1f5..00000000000 --- a/lib/filestoragecommon.php +++ /dev/null @@ -1,76 +0,0 @@ -. -*/ - -class OC_Filestorage_Common extends OC_Filestorage { - - public function __construct($parameters){} - public function mkdir($path){} - public function rmdir($path){} - public function opendir($path){} - public function is_dir($path){} - public function is_file($path){} - public function stat($path){} - public function filetype($path){} - public function filesize($path) { - $stat = $this->stat($path); - return $stat['size']; - } - public function is_readable($path){} - public function is_writeable($path){} - public function file_exists($path){} - public function readfile($path) { - echo $this->file_get_contents($path); - return $this->filesize($path); - } - public function filectime($path) { - $stat = $this->stat($path); - return $stat['ctime']; - } - public function filemtime($path) { - $stat = $this->stat($path); - return $stat['mtime']; - } - public function fileatime($path) { - $stat = $this->stat($path); - return $stat['atime']; - } - public function file_get_contents($path) { - $handle = $this->fopen($path, "r"); - return fread($handle, $this->filesize($path)); - } - public function file_put_contents($path,$data) { - $handle = $this->fopen($path, "w"); - return fwrite($handle, $data); - } - public function unlink($path){} - public function rename($path1,$path2){} - public function copy($path1,$path2){} - public function fopen($path,$mode){} - public function toTmpFile($path){} - public function fromTmpFile($tmpPath,$path){} - public function fromUploadedFile($tmpPath,$path){} - public function getMimeType($path){} - public function hash($type,$path,$raw){} - public function free_space($path){} - public function search($query){} - public function getLocalFile($path){} -} -- cgit v1.2.3 From 312e7993bb8edf95a746e62d9b3816d3a0e62fad Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Sun, 1 Jan 2012 23:26:24 +0100 Subject: Added image type specific loading and displaying. Added method 'valid()' to tell if image contains a valid resource. Renamed imageResource() to resource(). --- lib/image.php | 139 +++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 128 insertions(+), 11 deletions(-) (limited to 'lib') diff --git a/lib/image.php b/lib/image.php index 0e1d1ee327f..b23e3507c34 100644 --- a/lib/image.php +++ b/lib/image.php @@ -21,6 +21,18 @@ * */ +/** From user comments at http://dk2.php.net/manual/en/function.exif-imagetype.php + * Don't know if it can come in handy? +if ( ! function_exists( 'exif_imagetype' ) ) { + function exif_imagetype ( $filename ) { + if ( ( list($width, $height, $type, $attr) = getimagesize( $filename ) ) !== false ) { + return $type; + } + return false; + } +} +*/ + /** * Class for image manipulation * Ideas: imagerotate, chunk_split(base64_encode()) @@ -29,6 +41,7 @@ class OC_Image { static private $resource = false; // tmp resource. static private $destroy = false; // if the resource is created withing the object. + static private $imagetype = IMAGETYPE_PNG; // Default to png if file type isn't evident. /** * @brief Constructor. * @param $imageref The path to a local file, a base64 encoded string or a resource created by an imagecreate* function. @@ -50,26 +63,69 @@ class OC_Image { * @brief Destructor. */ function __destruct() { - if(self::$resource && self::$destroy) { + if(is_resource(self::$resource) && self::$destroy) { imagedestroy(self::$resource); // Why does this issue a warning. } } /** * @brief Determine whether the object contains an image resource. - * returns bool + * @returns bool */ - function empty() { - if(self::$resource && self::$destroy) { - } + public function valid() { // apparently you can't name a method 'empty'... + $ret = is_resource(self::$resource); + return $ret; + } + + /** + * @brief Returns the MIME type of the image or an empty string if no image is loaded. + * @returns int + */ + public function mimeType() { + return is_resource(self::$resource) ? image_type_to_mime_type(self::$imagetype) : ''; + } + + /** + * @brief Returns the width of the image or -1 if no image is loaded. + * @returns int + */ + public function width() { + return is_resource(self::$resource) ? imagesx(self::$resource) : -1; + } + + /** + * @brief Returns the height of the image or -1 if no image is loaded. + * @returns int + */ + public function height() { + return is_resource(self::$resource) ? imagesy(self::$resource) : -1; } /** * @brief Prints the image. */ public function show() { - header('Content-Type: image/png'); - imagepng(self::$resource); + header('Content-Type: '.self::mimeType()); + switch(self::$imagetype) { + case IMAGETYPE_GIF: + imagegif(self::$resource); + break; + case IMAGETYPE_JPEG: + imagepng(self::$resource); + break; + case IMAGETYPE_PNG: + imagejpeg(self::$resource); + break; + case IMAGETYPE_XBM: + imagexbm(self::$resource); + break; + case IMAGETYPE_WBMP: + case IMAGETYPE_BMP: + imagewbmp(self::$resource); + break; + default: + imagepng(self::$resource); + } } /** @@ -82,7 +138,7 @@ class OC_Image { /** * @returns Returns the image resource in any. */ - public function imageResource() { + public function resource() { return self::$resource; } @@ -126,11 +182,72 @@ class OC_Image { */ static 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'.$imagepath, OC_Log::DEBUG); + OC_Log::write('core','OC_Image::loadFromFile, couldn\'t load', OC_Log::DEBUG); return false; } - self::$resource = imagecreatefromstring(file_get_contents($imagepath)); - self::$destroy = true; + $itype = exif_imagetype($imagepath); + switch($itype) { + case IMAGETYPE_GIF: + if (imagetypes() & IMG_GIF) { + self::$resource = imagecreatefromgif($imagepath); + } + break; + case IMAGETYPE_JPEG: + if (imagetypes() & IMG_JPG) { + self::$resource = imagecreatefromjpeg($imagepath); + } + break; + case IMAGETYPE_PNG: + if (imagetypes() & IMG_PNG) { + self::$resource = imagecreatefrompng($imagepath); + } + break; + case IMAGETYPE_XBM: + if (imagetypes() & IMG_XPM) { + self::$resource = imagecreatefromxbm($imagepath); + } + break; + case IMAGETYPE_WBMP: + case IMAGETYPE_BMP: + if (imagetypes() & IMG_WBMP) { + self::$resource = imagecreatefromwbmp($imagepath); + } + break; + /* + case IMAGETYPE_TIFF_II: // (intel byte order) + break; + case IMAGETYPE_TIFF_MM: // (motorola byte order) + break; + case IMAGETYPE_JPC: + break; + case IMAGETYPE_JP2: + break; + case IMAGETYPE_JPX: + break; + case IMAGETYPE_JB2: + break; + case IMAGETYPE_SWC: + break; + case IMAGETYPE_IFF: + break; + case IMAGETYPE_ICO: + break; + case IMAGETYPE_SWF: + break; + case IMAGETYPE_PSD: + break; + */ + default: + self::$resource = imagecreatefromstring(file_get_contents($imagepath)); + $itype = IMAGETYPE_PNG; + OC_Log::write('core','OC_Image::loadFromFile, Default', OC_Log::DEBUG); + break; + } + // if($this->valid()) { // FIXME: I get an error: "PHP Fatal error: Using $this when not in object context..." WTF? + if(self::valid()) { // And here I get a warning: "PHP Strict Standards: Non-static method OC_Image::valid() should not be called statically..." valid() shouldn't be a static member as it would fail on a non-instantiated class. + self::$imagetype = $itype; + self::$destroy = true; + } return self::$resource; } -- cgit v1.2.3 From db6738478b6e0efe5a2484151e01e37ae358ac18 Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Sun, 1 Jan 2012 23:34:26 +0100 Subject: Mixed up two lines :-P --- lib/image.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/image.php b/lib/image.php index b23e3507c34..a8948956bf4 100644 --- a/lib/image.php +++ b/lib/image.php @@ -111,10 +111,10 @@ class OC_Image { imagegif(self::$resource); break; case IMAGETYPE_JPEG: - imagepng(self::$resource); + imagejpeg(self::$resource); break; case IMAGETYPE_PNG: - imagejpeg(self::$resource); + imagepng(self::$resource); break; case IMAGETYPE_XBM: imagexbm(self::$resource); -- cgit v1.2.3 From a9bab168f5e43bfa5fe1523aab80faf1bc02cd58 Mon Sep 17 00:00:00 2001 From: Michael Gapczynski Date: Sun, 1 Jan 2012 18:40:32 -0500 Subject: Replace canRead()/canWrite() with is_readable()/is_writeable() for proper permission checks --- lib/filestorage/local.php | 4 ++-- lib/filesystem.php | 61 ++++++++++++++++++----------------------------- 2 files changed, 25 insertions(+), 40 deletions(-) (limited to 'lib') diff --git a/lib/filestorage/local.php b/lib/filestorage/local.php index 9e29f85071a..02746fa6c6f 100644 --- a/lib/filestorage/local.php +++ b/lib/filestorage/local.php @@ -50,10 +50,10 @@ class OC_Filestorage_Local extends OC_Filestorage{ } } public function is_readable($path){ - return is_readable($this->datadir.$path); + return true; } public function is_writeable($path){ - return is_writeable($this->datadir.$path); + return true; } public function file_exists($path){ return file_exists($this->datadir.$path); diff --git a/lib/filesystem.php b/lib/filesystem.php index cae8ead5b16..9b3dde1ae07 100644 --- a/lib/filesystem.php +++ b/lib/filesystem.php @@ -130,35 +130,6 @@ class OC_Filesystem{ return $internalPath; } - /** - * check if the current users has the right premissions to read a file - * @param string path - * @return bool - */ - static private function canRead($path){ - if(substr($path,0,1)!=='/'){ - $path='/'.$path; - } - if(strstr($path,'/../') || strrchr($path, '/') === '/..' ){ - return false; - } - return true;//dummy untill premissions are correctly implemented, also the correcty value because for now users are locked in their seperate data dir and can read/write everything in there - } - /** - * check if the current users has the right premissions to write a file - * @param string path - * @return bool - */ - static private function canWrite($path){ - if(substr($path,0,1)!=='/'){ - $path='/'.$path; - } - if(strstr($path,'/../') || strrchr($path, '/') === '/..' ){ - return false; - } - return true;//dummy untill premissions are correctly implemented, also the correcty value because for now users are locked in their seperate data dir and can read/write everything in there - } - /** * mount an OC_Filestorage in our virtual filesystem * @param OC_Filestorage storage @@ -228,7 +199,7 @@ class OC_Filesystem{ */ static public function getLocalFile($path){ $parent=substr($path,0,strrpos($path,'/')); - if(self::canRead($parent) and $storage=self::getStorage($path)){ + if(self::is_readable($parent) and $storage=self::getStorage($path)){ return $storage->getLocalFile(self::getInternalPath($path)); } } @@ -267,10 +238,24 @@ class OC_Filesystem{ return self::basicOperation('readfile',$path,array('read')); } static public function is_readable($path){ - return self::basicOperation('is_readable',$path); + if(substr($path,0,1)!=='/'){ + $path='/'.$path; + } + if(strstr($path,'/../') || strrchr($path, '/') === '/..' ){ + return false; + } + $storage=self::getStorage($path); + return $storage->is_readable($path); } static public function is_writeable($path){ - return self::basicOperation('is_writeable',$path); + if(substr($path,0,1)!=='/'){ + $path='/'.$path; + } + if(strstr($path,'/../') || strrchr($path, '/') === '/..' ){ + return false; + } + $storage=self::getStorage($path); + return $storage->is_writeable($path); } static public function file_exists($path){ if($path=='/'){ @@ -297,7 +282,7 @@ class OC_Filesystem{ return self::basicOperation('unlink',$path,array('delete')); } static public function rename($path1,$path2){ - if(OC_FileProxy::runPreProxies('rename',$path1,$path2) and self::canWrite($path1) and self::canWrite($path2)){ + if(OC_FileProxy::runPreProxies('rename',$path1,$path2) and self::is_writeable($path1) and self::is_writeable($path2)){ $run=true; OC_Hook::emit( 'OC_Filesystem', 'rename', array( 'oldpath' => $path1 ,'newpath'=>$path2, 'run' => &$run)); if($run){ @@ -318,7 +303,7 @@ class OC_Filesystem{ } } static public function copy($path1,$path2){ - if(OC_FileProxy::runPreProxies('copy',$path1,$path2) and self::canRead($path1) and self::canWrite($path2)){ + if(OC_FileProxy::runPreProxies('copy',$path1,$path2) and self::is_readable($path1) and self::is_writeable($path2)){ $run=true; OC_Hook::emit( 'OC_Filesystem', 'copy', array( 'oldpath' => $path1 ,'newpath'=>$path2, 'run' => &$run)); $exists=self::file_exists($path2); @@ -373,13 +358,13 @@ class OC_Filesystem{ return self::basicOperation('fopen',$path,$hooks,$mode); } static public function toTmpFile($path){ - if(OC_FileProxy::runPreProxies('toTmpFile',$path) and self::canRead($path) and $storage=self::getStorage($path)){ + if(OC_FileProxy::runPreProxies('toTmpFile',$path) and self::is_readable($path) and $storage=self::getStorage($path)){ OC_Hook::emit( 'OC_Filesystem', 'read', array( 'path' => $path)); return $storage->toTmpFile(self::getInternalPath($path)); } } static public function fromTmpFile($tmpFile,$path){ - if(OC_FileProxy::runPreProxies('copy',$tmpFile,$path) and self::canWrite($path) and $storage=self::getStorage($path)){ + if(OC_FileProxy::runPreProxies('copy',$tmpFile,$path) and self::is_writeable($path) and $storage=self::getStorage($path)){ $run=true; $exists=self::file_exists($path); if(!$exists){ @@ -399,7 +384,7 @@ class OC_Filesystem{ } } static public function fromUploadedFile($tmpFile,$path){ - if(OC_FileProxy::runPreProxies('fromUploadedFile',$tmpFile,$path) and self::canWrite($path) and $storage=self::getStorage($path)){ + if(OC_FileProxy::runPreProxies('fromUploadedFile',$tmpFile,$path) and self::is_writeable($path) and $storage=self::getStorage($path)){ $run=true; $exists=self::file_exists($path); if(!$exists){ @@ -462,7 +447,7 @@ class OC_Filesystem{ * @return mixed */ private static function basicOperation($operation,$path,$hooks=array(),$extraParam=null){ - if(OC_FileProxy::runPreProxies($operation,$path, $extraParam) and self::canRead($path) and $storage=self::getStorage($path)){ + if(OC_FileProxy::runPreProxies($operation,$path, $extraParam) and self::is_readable($path) and $storage=self::getStorage($path)){ $interalPath=self::getInternalPath($path); $run=true; foreach($hooks as $hook){ -- cgit v1.2.3 From a8789ebe2975564bee851b895d636d7503135257 Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Mon, 2 Jan 2012 00:43:27 +0100 Subject: Removed static declaration from loadFrom* methods. --- lib/image.php | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'lib') diff --git a/lib/image.php b/lib/image.php index a8948956bf4..21580f40b8b 100644 --- a/lib/image.php +++ b/lib/image.php @@ -160,7 +160,7 @@ class OC_Image { * If a resource is passed it is the job of the caller to destroy it using imagedestroy($var) * @returns An image resource or false on error */ - static public function load($imageref) { + public function load($imageref) { if(self::loadFromFile($imageref) !== false) { return self::$resource; } elseif(self::loadFromBase64($imageref) !== false) { @@ -180,7 +180,7 @@ class OC_Image { * @param $imageref The path to a local file. * @returns An image resource or false on error */ - static public function loadFromFile($imagepath=false) { + 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); return false; @@ -243,8 +243,7 @@ class OC_Image { OC_Log::write('core','OC_Image::loadFromFile, Default', OC_Log::DEBUG); break; } - // if($this->valid()) { // FIXME: I get an error: "PHP Fatal error: Using $this when not in object context..." WTF? - if(self::valid()) { // And here I get a warning: "PHP Strict Standards: Non-static method OC_Image::valid() should not be called statically..." valid() shouldn't be a static member as it would fail on a non-instantiated class. + if($this->valid()) { self::$imagetype = $itype; self::$destroy = true; } @@ -256,7 +255,7 @@ class OC_Image { * @param $str A string of image data as read from a file. * @returns An image resource or false on error */ - static public function loadFromData($str) { + public function loadFromData($str) { if(is_resource($str)) { return false; } @@ -274,7 +273,7 @@ class OC_Image { * @param $str A string base64 encoded string of image data. * @returns An image resource or false on error */ - static public function loadFromBase64($str) { + public function loadFromBase64($str) { if(!is_string($str)) { return false; } @@ -297,7 +296,7 @@ class OC_Image { * @param $res An image resource. * @returns An image resource or false on error */ - static public function loadFromResource($res) { + public function loadFromResource($res) { if(!is_resource($res)) { return false; } -- cgit v1.2.3 From 4374d55e5e020a1f2673a18991be6f2560e9f2c3 Mon Sep 17 00:00:00 2001 From: Michael Gapczynski Date: Sun, 1 Jan 2012 19:59:24 -0500 Subject: Correct local permissions checks --- lib/filestorage/local.php | 4 ++-- lib/filesystem.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'lib') diff --git a/lib/filestorage/local.php b/lib/filestorage/local.php index 02746fa6c6f..cfc27159786 100644 --- a/lib/filestorage/local.php +++ b/lib/filestorage/local.php @@ -50,10 +50,10 @@ class OC_Filestorage_Local extends OC_Filestorage{ } } public function is_readable($path){ - return true; + return is_readable($this->datadir.$path); } public function is_writeable($path){ - return true; + return is_writable($this->datadir.$path); } public function file_exists($path){ return file_exists($this->datadir.$path); diff --git a/lib/filesystem.php b/lib/filesystem.php index 9b3dde1ae07..1205a6aa51b 100644 --- a/lib/filesystem.php +++ b/lib/filesystem.php @@ -245,7 +245,7 @@ class OC_Filesystem{ return false; } $storage=self::getStorage($path); - return $storage->is_readable($path); + return $storage->is_readable(self::getInternalPath($path)); } static public function is_writeable($path){ if(substr($path,0,1)!=='/'){ @@ -255,7 +255,7 @@ class OC_Filesystem{ return false; } $storage=self::getStorage($path); - return $storage->is_writeable($path); + return $storage->is_writeable(self::getInternalPath($path)); } static public function file_exists($path){ if($path=='/'){ -- cgit v1.2.3 From 534b6f3a098c8f2bb5993592e73f5af75c3c86bc Mon Sep 17 00:00:00 2001 From: Georg Ehrke Date: Mon, 2 Jan 2012 11:49:53 +0100 Subject: Fix whitespace username --- lib/user.php | 2 +- settings/js/users.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/user.php b/lib/user.php index 241d9aa8b10..0a5881ec0f8 100644 --- a/lib/user.php +++ b/lib/user.php @@ -120,7 +120,7 @@ class OC_User { return false; } // No empty username - if( !$uid ){ + if(trim($uid) == ''){ return false; } // Check if user already exists diff --git a/settings/js/users.js b/settings/js/users.js index 4fea52e4a1f..79b4e80870a 100644 --- a/settings/js/users.js +++ b/settings/js/users.js @@ -126,7 +126,7 @@ $(document).ready(function(){ $('#newuser').submit(function(event){ event.preventDefault(); var username=$('#newusername').val(); - if(username == '') { + if($.trim(username) == '') { alert('Please provide a username!'); return false; } -- cgit v1.2.3 From c62c55fb81ced8710ab0290c272a1c0922640afd Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Mon, 2 Jan 2012 12:09:45 +0100 Subject: Added save() to OC_Image. --- lib/image.php | 53 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 44 insertions(+), 9 deletions(-) (limited to 'lib') diff --git a/lib/image.php b/lib/image.php index 21580f40b8b..57a0caa140b 100644 --- a/lib/image.php +++ b/lib/image.php @@ -42,6 +42,7 @@ class OC_Image { static private $resource = false; // tmp resource. static private $destroy = false; // if the resource is created withing the object. static private $imagetype = IMAGETYPE_PNG; // Default to png if file type isn't evident. + static private $filepath = null; /** * @brief Constructor. * @param $imageref The path to a local file, a base64 encoded string or a resource created by an imagecreate* function. @@ -49,7 +50,7 @@ class OC_Image { * @returns bool False on error */ function __construct($imageref = null) { - OC_Log::write('core','OC_Image::__construct, start', OC_Log::DEBUG); + //OC_Log::write('core','OC_Image::__construct, start', OC_Log::DEBUG); if(!function_exists('imagecreatefromjpeg')) { // FIXME: Find a better way to check for GD OC_Log::write('core','OC_Image::__construct, GD module not installed', OC_Log::ERROR); return false; @@ -102,30 +103,63 @@ class OC_Image { } /** - * @brief Prints the image. + * @brief Outputs the image. + * @returns bool */ public function show() { + return $this->_output(); + } + + /** + * @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); + return false; + } elseif($filepath === null && $this->filepath !== null) { + $filepath = $this->filepath; + } + return $this->_output($filepath, true); + } + + /** + * @brief Outputs/saves the image. + */ + private function _output($filepath=null, $really=false) { header('Content-Type: '.self::mimeType()); + 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); + return false; + } + } + $retval = false; switch(self::$imagetype) { case IMAGETYPE_GIF: - imagegif(self::$resource); + $retval = imagegif(self::$resource, $filepath); break; case IMAGETYPE_JPEG: - imagejpeg(self::$resource); + $retval = imagejpeg(self::$resource, $filepath); break; case IMAGETYPE_PNG: - imagepng(self::$resource); + $retval = imagepng(self::$resource, $filepath); break; case IMAGETYPE_XBM: - imagexbm(self::$resource); + $retval = imagexbm(self::$resource, $filepath); break; case IMAGETYPE_WBMP: case IMAGETYPE_BMP: - imagewbmp(self::$resource); + $retval = imagewbmp(self::$resource, $filepath); break; default: - imagepng(self::$resource); + $retval = imagepng(self::$resource, $filepath); } + return $retval; } /** @@ -186,7 +220,7 @@ class OC_Image { return false; } $itype = exif_imagetype($imagepath); - switch($itype) { + switch($itype) { // TODO: Log if image type is not supported. case IMAGETYPE_GIF: if (imagetypes() & IMG_GIF) { self::$resource = imagecreatefromgif($imagepath); @@ -245,6 +279,7 @@ class OC_Image { } if($this->valid()) { self::$imagetype = $itype; + self::$filepath = $imagepath; self::$destroy = true; } return self::$resource; -- cgit v1.2.3 From 6a7fbf9d136c44c7bdb9fab80354cbf44fadc105 Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Mon, 2 Jan 2012 13:40:23 +0100 Subject: Added more error checking and debug on missing image support. --- lib/image.php | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) (limited to 'lib') diff --git a/lib/image.php b/lib/image.php index 57a0caa140b..b797f331f45 100644 --- a/lib/image.php +++ b/lib/image.php @@ -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; /* -- cgit v1.2.3 From cc55f00481dd00c4db54714d79e1f13158a87850 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Mon, 2 Jan 2012 16:38:10 +0100 Subject: fix is_readable and is_writable --- lib/filesystem.php | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) (limited to 'lib') diff --git a/lib/filesystem.php b/lib/filesystem.php index 1205a6aa51b..627f494c937 100644 --- a/lib/filesystem.php +++ b/lib/filesystem.php @@ -199,11 +199,26 @@ class OC_Filesystem{ */ static public function getLocalFile($path){ $parent=substr($path,0,strrpos($path,'/')); - if(self::is_readable($parent) and $storage=self::getStorage($path)){ + if(self::isValidPath($parent) and $storage=self::getStorage($path)){ return $storage->getLocalFile(self::getInternalPath($path)); } } + /** + * check if the requested path is valid + * @param string path + * @return bool + */ + static public function isValidPath($path){ + if(substr($path,0,1)!=='/'){ + $path='/'.$path; + } + if(strstr($path,'/../') || strrchr($path, '/') === '/..' ){ + return false; + } + return true; + } + static public function mkdir($path){ return self::basicOperation('mkdir',$path,array('create','write')); } @@ -238,24 +253,10 @@ class OC_Filesystem{ return self::basicOperation('readfile',$path,array('read')); } static public function is_readable($path){ - if(substr($path,0,1)!=='/'){ - $path='/'.$path; - } - if(strstr($path,'/../') || strrchr($path, '/') === '/..' ){ - return false; - } - $storage=self::getStorage($path); - return $storage->is_readable(self::getInternalPath($path)); + return self::basicOperation('is_readable',$path); } static public function is_writeable($path){ - if(substr($path,0,1)!=='/'){ - $path='/'.$path; - } - if(strstr($path,'/../') || strrchr($path, '/') === '/..' ){ - return false; - } - $storage=self::getStorage($path); - return $storage->is_writeable(self::getInternalPath($path)); + return self::basicOperation('is_writeable',$path); } static public function file_exists($path){ if($path=='/'){ @@ -358,7 +359,7 @@ class OC_Filesystem{ return self::basicOperation('fopen',$path,$hooks,$mode); } static public function toTmpFile($path){ - if(OC_FileProxy::runPreProxies('toTmpFile',$path) and self::is_readable($path) and $storage=self::getStorage($path)){ + if(OC_FileProxy::runPreProxies('toTmpFile',$path) and self::isValidPath($path) and $storage=self::getStorage($path)){ OC_Hook::emit( 'OC_Filesystem', 'read', array( 'path' => $path)); return $storage->toTmpFile(self::getInternalPath($path)); } @@ -447,7 +448,7 @@ class OC_Filesystem{ * @return mixed */ private static function basicOperation($operation,$path,$hooks=array(),$extraParam=null){ - if(OC_FileProxy::runPreProxies($operation,$path, $extraParam) and self::is_readable($path) and $storage=self::getStorage($path)){ + if(OC_FileProxy::runPreProxies($operation,$path, $extraParam) and self::isValidPath($path) and $storage=self::getStorage($path)){ $interalPath=self::getInternalPath($path); $run=true; foreach($hooks as $hook){ -- cgit v1.2.3 From b8cffbc0eec099e0fb7ffbb53e7fc1dc5bbc4035 Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Mon, 2 Jan 2012 23:17:15 +0100 Subject: OC_Image::__invoke didn't return anything thus causing contacts/thumbnail.php to spit out lots of error messages. --- lib/image.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/image.php b/lib/image.php index b797f331f45..e09486be081 100644 --- a/lib/image.php +++ b/lib/image.php @@ -178,7 +178,7 @@ class OC_Image { * @brief Prints the image when called as $image(). */ public function __invoke() { - self::show(); + return self::show(); } /** -- cgit v1.2.3 From 4c8f17ad4747592cc01525c663de32962552cf18 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Tue, 3 Jan 2012 04:55:19 +0100 Subject: don't try to use mod_rewrite when it isn't enabled having a broken web/card/caldav is much better as having no ownCloud at all :) --- .htaccess | 2 ++ lib/setup.php | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/.htaccess b/.htaccess index b181f8b8452..86a2de6b946 100644 --- a/.htaccess +++ b/.htaccess @@ -5,6 +5,8 @@ php_value post_max_size 512M php_value memory_limit 512M SetEnv htaccessWorking true + RewriteEngine on RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization},last] + Options -Indexes diff --git a/lib/setup.php b/lib/setup.php index 8afe0070e9b..b53c626c9a7 100644 --- a/lib/setup.php +++ b/lib/setup.php @@ -275,7 +275,7 @@ class OC_Setup { $content.= "php_value post_max_size 512M\n"; $content.= "SetEnv htaccessWorking true\n"; $content.= "\n"; - $content.= "\n"; + $content.= ""; $content.= "RewriteEngine on\n"; $content.= "RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization},last]\n"; $content.= "\n"; -- cgit v1.2.3 From 9e9bc1430b6b31be67a346421c1989c2d44fad11 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Tue, 3 Jan 2012 15:55:38 +0100 Subject: don't check if the target path is writable for operations that can create a new file fixes file upload --- lib/filesystem.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'lib') diff --git a/lib/filesystem.php b/lib/filesystem.php index 627f494c937..44401260c5e 100644 --- a/lib/filesystem.php +++ b/lib/filesystem.php @@ -283,7 +283,7 @@ class OC_Filesystem{ return self::basicOperation('unlink',$path,array('delete')); } static public function rename($path1,$path2){ - if(OC_FileProxy::runPreProxies('rename',$path1,$path2) and self::is_writeable($path1) and self::is_writeable($path2)){ + if(OC_FileProxy::runPreProxies('rename',$path1,$path2) and self::is_writeable($path1) and self::isValidPath($path2)){ $run=true; OC_Hook::emit( 'OC_Filesystem', 'rename', array( 'oldpath' => $path1 ,'newpath'=>$path2, 'run' => &$run)); if($run){ @@ -304,7 +304,7 @@ class OC_Filesystem{ } } static public function copy($path1,$path2){ - if(OC_FileProxy::runPreProxies('copy',$path1,$path2) and self::is_readable($path1) and self::is_writeable($path2)){ + if(OC_FileProxy::runPreProxies('copy',$path1,$path2) and self::is_readable($path1) and self::isValidPath($path2)){ $run=true; OC_Hook::emit( 'OC_Filesystem', 'copy', array( 'oldpath' => $path1 ,'newpath'=>$path2, 'run' => &$run)); $exists=self::file_exists($path2); @@ -365,7 +365,7 @@ class OC_Filesystem{ } } static public function fromTmpFile($tmpFile,$path){ - if(OC_FileProxy::runPreProxies('copy',$tmpFile,$path) and self::is_writeable($path) and $storage=self::getStorage($path)){ + if(OC_FileProxy::runPreProxies('copy',$tmpFile,$path) and self::isValidPath($path) and $storage=self::getStorage($path)){ $run=true; $exists=self::file_exists($path); if(!$exists){ @@ -385,7 +385,7 @@ class OC_Filesystem{ } } static public function fromUploadedFile($tmpFile,$path){ - if(OC_FileProxy::runPreProxies('fromUploadedFile',$tmpFile,$path) and self::is_writeable($path) and $storage=self::getStorage($path)){ + if(OC_FileProxy::runPreProxies('fromUploadedFile',$tmpFile,$path) and self::isValidPath($path) and $storage=self::getStorage($path)){ $run=true; $exists=self::file_exists($path); if(!$exists){ -- cgit v1.2.3 From 868a3b5364af550492794f2093ce0aa07b938c6c Mon Sep 17 00:00:00 2001 From: prcrst Date: Tue, 3 Jan 2012 12:37:33 +0100 Subject: Fix sqlite detection for Ubuntu 11.10 --- lib/util.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/util.php b/lib/util.php index 9cf78da6e90..009119b54a9 100644 --- a/lib/util.php +++ b/lib/util.php @@ -175,7 +175,7 @@ class OC_Util { $errors=array(); //check for database drivers - if(!is_callable('sqlite_open') and !is_callable('mysql_connect') and !is_callable('pg_connect')){ + if(!(is_callable('sqlite_open') or class_exists('SQLite3')) and !is_callable('mysql_connect') and !is_callable('pg_connect')){ $errors[]=array('error'=>'No database drivers (sqlite, mysql, or postgresql) installed.
','hint'=>'');//TODO: sane hint } $CONFIG_DBTYPE = OC_Config::getValue( "dbtype", "sqlite" ); -- cgit v1.2.3