From c62c55fb81ced8710ab0290c272a1c0922640afd Mon Sep 17 00:00:00 2001
From: Thomas Tanghus <thomas@tanghus.net>
Date: Mon, 2 Jan 2012 12:09:45 +0100
Subject: [PATCH] Added save() to OC_Image.

---
 lib/image.php | 53 ++++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 44 insertions(+), 9 deletions(-)

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;
-- 
GitLab