From 09727024ba6e92d15cc582023a9bd9c467500055 Mon Sep 17 00:00:00 2001
From: Michael <heluecht@pirati.ca>
Date: Sat, 21 Oct 2017 15:09:47 +0000
Subject: [PATCH 1/4] Better handling for GIF even, if not supported by the
 graphics library

---
 mod/photo.php | 54 ++++++++++++++++++++++++++-------------------------
 1 file changed, 28 insertions(+), 26 deletions(-)

diff --git a/mod/photo.php b/mod/photo.php
index 5896c90baa..1a814f5efc 100644
--- a/mod/photo.php
+++ b/mod/photo.php
@@ -11,7 +11,7 @@ function photo_init(App $a) {
 	$prvcachecontrol = false;
 	$file = "";
 
-	switch($a->argc) {
+	switch ($a->argc) {
 		case 4:
 			$person = $a->argv[3];
 			$customres = intval($a->argv[2]);
@@ -31,14 +31,13 @@ function photo_init(App $a) {
 			// NOTREACHED
 	}
 
-	//	strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= filemtime($localFileName)) {
 	if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
 		header('HTTP/1.1 304 Not Modified');
 		header("Last-Modified: " . gmdate("D, d M Y H:i:s", time()) . " GMT");
 		header('Etag: '.$_SERVER['HTTP_IF_NONE_MATCH']);
 	 	header("Expires: " . gmdate("D, d M Y H:i:s", time() + (31536000)) . " GMT");
 		header("Cache-Control: max-age=31536000");
-		if(function_exists('header_remove')) {
+		if (function_exists('header_remove')) {
 			header_remove('Last-Modified');
 			header_remove('Expires');
 			header_remove('Cache-Control');
@@ -48,14 +47,13 @@ function photo_init(App $a) {
 
 	$default = 'images/person-175.jpg';
 
-	if(isset($type)) {
-
+	if (isset($type)) {
 
 		/**
 		 * Profile photos
 		 */
 
-		switch($type) {
+		switch ($type) {
 
 			case 'profile':
 			case 'custom':
@@ -72,7 +70,11 @@ function photo_init(App $a) {
 				break;
 		}
 
-		$uid = str_replace(array('.jpg','.png'),array('',''), $person);
+		$uid = str_replace(array('.jpg', '.png', '.gif'), array('', '', ''), $person);
+
+		foreach (Photo::supportedTypes() AS $m => $e) {
+			$uid = str_replace('.'.$e, '', $uid);
+		}
 
 		$r = q("SELECT * FROM `photo` WHERE `scale` = %d AND `uid` = %d AND `profile` = 1 LIMIT 1",
 			intval($resolution),
@@ -82,28 +84,29 @@ function photo_init(App $a) {
 			$data = $r[0]['data'];
 			$mimetype = $r[0]['type'];
 		}
-		if(! isset($data)) {
+		if (empty($data)) {
 			$data = file_get_contents($default);
 			$mimetype = 'image/jpeg';
 		}
-	}
-	else {
+	} else {
 
 		/**
 		 * Other photos
 		 */
 
 		$resolution = 0;
-		foreach( Photo::supportedTypes() as $m=>$e){
-			$photo = str_replace(".$e",'',$photo);
+		$photo = str_replace(array('.jpg', '.png', '.gif'), array('', '', ''), $photo);
+
+		foreach (Photo::supportedTypes() AS $m => $e) {
+			$photo = str_replace('.'.$e, '', $photo);
 		}
 
-		if(substr($photo,-2,1) == '-') {
-			$resolution = intval(substr($photo,-1,1));
-			$photo = substr($photo,0,-2);
+		if (substr($photo, -2, 1) == '-') {
+			$resolution = intval(substr($photo, -1, 1));
+			$photo = substr($photo, 0, -2);
 		}
 
-        // check if the photo exists and get the owner of the photo
+		// check if the photo exists and get the owner of the photo
 		$r = q("SELECT `uid` FROM `photo` WHERE `resource-id` = '%s' LIMIT 1",
 			dbesc($photo),
 			intval($resolution)
@@ -136,9 +139,9 @@ function photo_init(App $a) {
 		}
 	}
 
-	if(! isset($data)) {
-		if(isset($resolution)) {
-			switch($resolution) {
+	if (empty($data)) {
+		if (isset($resolution)) {
+			switch ($resolution) {
 
 				case 4:
 					$data = file_get_contents('images/person-175.jpg');
@@ -161,10 +164,10 @@ function photo_init(App $a) {
 	}
 
 	// Resize only if its not a GIF
-	if ($mime != "image/gif") {
+	if ($mimetype != "image/gif") {
 		$ph = new Photo($data, $mimetype);
-		if($ph->is_valid()) {
-			if(isset($customres) && $customres > 0 && $customres < 500) {
+		if ($ph->is_valid()) {
+			if (isset($customres) && $customres > 0 && $customres < 500) {
 				$ph->scaleImageSquare($customres);
 			}
 			$data = $ph->imageString();
@@ -172,14 +175,14 @@ function photo_init(App $a) {
 		}
 	}
 
-	if(function_exists('header_remove')) {
+	if (function_exists('header_remove')) {
 		header_remove('Pragma');
 		header_remove('pragma');
 	}
 
 	header("Content-type: ".$mimetype);
 
-	if($prvcachecontrol) {
+	if ($prvcachecontrol) {
 
 		// it is a private photo that they have no permission to view.
 		// tell the browser not to cache it, in case they authenticate
@@ -187,8 +190,7 @@ function photo_init(App $a) {
 
 		header("Cache-Control: no-store, no-cache, must-revalidate");
 
-	}
-	else {
+	} else {
 		header("Last-Modified: " . gmdate("D, d M Y H:i:s", time()) . " GMT");
 		header('Etag: "'.md5($data).'"');
 	 	header("Expires: " . gmdate("D, d M Y H:i:s", time() + (31536000)) . " GMT");

From 2624abdc35491ff2fc48568bb8258b82733ccf81 Mon Sep 17 00:00:00 2001
From: Michael <heluecht@pirati.ca>
Date: Sat, 21 Oct 2017 15:31:31 +0000
Subject: [PATCH 2/4] Now only resize if supported

---
 mod/photo.php | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/mod/photo.php b/mod/photo.php
index 1a814f5efc..e223808307 100644
--- a/mod/photo.php
+++ b/mod/photo.php
@@ -163,8 +163,8 @@ function photo_init(App $a) {
 		}
 	}
 
-	// Resize only if its not a GIF
-	if ($mimetype != "image/gif") {
+	// Resize only if its not a GIF and it is supported by the library
+	if (($mimetype != "image/gif") && in_array($mimetype, Photo::supportedTypes())) {
 		$ph = new Photo($data, $mimetype);
 		if ($ph->is_valid()) {
 			if (isset($customres) && $customres > 0 && $customres < 500) {

From b513a597c81b1443f39721716316e162690dc8a4 Mon Sep 17 00:00:00 2001
From: Michael <heluecht@pirati.ca>
Date: Sat, 21 Oct 2017 16:13:25 +0000
Subject: [PATCH 3/4] Static methods should be called statically

---
 include/Photo.php | 4 ++--
 mod/photo.php     | 9 ++++++---
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/include/Photo.php b/include/Photo.php
index a86942ee29..457a2e31c4 100644
--- a/include/Photo.php
+++ b/include/Photo.php
@@ -26,7 +26,7 @@ class Photo {
 	/**
 	 * @brief supported mimetypes and corresponding file extensions
 	 */
-	static function supportedTypes() {
+	static public function supportedTypes() {
 		if (class_exists('Imagick')) {
 
 			// Imagick::queryFormats won't help us a lot there...
@@ -49,7 +49,7 @@ class Photo {
 
 	public function __construct($data, $type=null) {
 		$this->imagick = class_exists('Imagick');
-		$this->types = $this->supportedTypes();
+		$this->types = static::supportedTypes();
 		if (!array_key_exists($type, $this->types)){
 			$type='image/jpeg';
 		}
diff --git a/mod/photo.php b/mod/photo.php
index e223808307..72b7e8e95a 100644
--- a/mod/photo.php
+++ b/mod/photo.php
@@ -202,12 +202,15 @@ function photo_init(App $a) {
 	if ($public and ($file != "")) {
 		// If the photo path isn't there, try to create it
 		$basepath = $a->get_basepath();
-		if (!is_dir($basepath."/photo"))
-			if (is_writable($basepath))
+		if (!is_dir($basepath."/photo")) {
+			if (is_writable($basepath)) {
 				mkdir($basepath."/photo");
+			}
+		}
 
-		if (is_dir($basepath."/photo"))
+		if (is_dir($basepath."/photo")) {
 			file_put_contents($basepath."/photo/".$file, $data);
+		}
 	}
 
 	killme();

From e40c3a9d7c980c4287c273bc12d934ceb8b55fc0 Mon Sep 17 00:00:00 2001
From: Michael <heluecht@pirati.ca>
Date: Mon, 23 Oct 2017 14:49:56 +0000
Subject: [PATCH 4/4] Static public is public static

---
 include/Photo.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/Photo.php b/include/Photo.php
index 457a2e31c4..343082d1df 100644
--- a/include/Photo.php
+++ b/include/Photo.php
@@ -26,7 +26,7 @@ class Photo {
 	/**
 	 * @brief supported mimetypes and corresponding file extensions
 	 */
-	static public function supportedTypes() {
+	public static function supportedTypes() {
 		if (class_exists('Imagick')) {
 
 			// Imagick::queryFormats won't help us a lot there...