aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/Photo.php131
-rw-r--r--include/conversation.php2
-rw-r--r--include/follow.php13
-rwxr-xr-xinclude/items.php62
-rw-r--r--include/network.php5
-rwxr-xr-x[-rw-r--r--]include/oembed.php4
-rw-r--r--include/onepoll.php7
-rw-r--r--include/poller.php4
-rw-r--r--include/text.php13
-rw-r--r--include/user.php8
10 files changed, 208 insertions, 41 deletions
diff --git a/include/Photo.php b/include/Photo.php
index fce559999..f769a70a6 100644
--- a/include/Photo.php
+++ b/include/Photo.php
@@ -7,14 +7,34 @@ class Photo {
private $width;
private $height;
private $valid;
+ private $type;
+ private $types;
+
+ /**
+ * supported mimetypes and corresponding file extensions
+ */
+ static function supportedTypes() {
+ $t = array();
+ $t['image/jpeg'] ='jpg';
+ if (imagetypes() & IMG_PNG) $t['image/png'] = 'png';
+ return $t;
+ }
+
+ public function __construct($data, $type="image/jpeg") {
- public function __construct($data) {
+ $this->types = $this->supportedTypes();
+ if (!array_key_exists($type,$this->types)){
+ $type='image/jpeg';
+ }
$this->valid = false;
+ $this->type = $type;
$this->image = @imagecreatefromstring($data);
if($this->image !== FALSE) {
$this->width = imagesx($this->image);
$this->height = imagesy($this->image);
$this->valid = true;
+ imagealphablending($this->image, false);
+ imagesavealpha($this->image, true);
}
}
@@ -38,6 +58,13 @@ class Photo {
public function getImage() {
return $this->image;
}
+
+ public function getType() {
+ return $this->type;
+ }
+ public function getExt() {
+ return $this->types[$this->type];
+ }
public function scaleImage($max) {
@@ -78,6 +105,9 @@ class Photo {
$dest = imagecreatetruecolor( $dest_width, $dest_height );
+ imagealphablending($dest, false);
+ imagesavealpha($dest, true);
+ if ($this->type=='image/png') imagefill($dest, 0, 0, imagecolorallocatealpha($dest, 0, 0, 0, 127)); // fill with alpha
imagecopyresampled($dest, $this->image, 0, 0, 0, 0, $dest_width, $dest_height, $width, $height);
if($this->image)
imagedestroy($this->image);
@@ -134,6 +164,9 @@ class Photo {
$dest = imagecreatetruecolor( $dest_width, $dest_height );
+ imagealphablending($dest, false);
+ imagesavealpha($dest, true);
+ if ($this->type=='image/png') imagefill($dest, 0, 0, imagecolorallocatealpha($dest, 0, 0, 0, 127)); // fill with alpha
imagecopyresampled($dest, $this->image, 0, 0, 0, 0, $dest_width, $dest_height, $width, $height);
if($this->image)
imagedestroy($this->image);
@@ -148,6 +181,9 @@ class Photo {
public function scaleImageSquare($dim) {
$dest = imagecreatetruecolor( $dim, $dim );
+ imagealphablending($dest, false);
+ imagesavealpha($dest, true);
+ if ($this->type=='image/png') imagefill($dest, 0, 0, imagecolorallocatealpha($dest, 0, 0, 0, 127)); // fill with alpha
imagecopyresampled($dest, $this->image, 0, 0, 0, 0, $dim, $dim, $this->width, $this->height);
if($this->image)
imagedestroy($this->image);
@@ -159,6 +195,9 @@ class Photo {
public function cropImage($max,$x,$y,$w,$h) {
$dest = imagecreatetruecolor( $max, $max );
+ imagealphablending($dest, false);
+ imagesavealpha($dest, true);
+ if ($this->type=='image/png') imagefill($dest, 0, 0, imagecolorallocatealpha($dest, 0, 0, 0, 127)); // fill with alpha
imagecopyresampled($dest, $this->image, 0, 0, $x, $y, $max, $max, $w, $h);
if($this->image)
imagedestroy($this->image);
@@ -168,20 +207,38 @@ class Photo {
}
public function saveImage($path) {
- $quality = get_config('system','jpeg_quality');
- if((! $quality) || ($quality > 100))
- $quality = JPEG_QUALITY;
- imagejpeg($this->image,$path,$quality);
+ switch($this->type){
+ case "image/png":
+ $quality = get_config('system','png_quality');
+ if((! $quality) || ($quality > 9))
+ $quality = PNG_QUALITY;
+ imagepng($this->image, $path, $quality);
+ break;
+ default:
+ $quality = get_config('system','jpeg_quality');
+ if((! $quality) || ($quality > 100))
+ $quality = JPEG_QUALITY;
+ imagejpeg($this->image,$path,$quality);
+ }
+
}
public function imageString() {
ob_start();
-
- $quality = get_config('system','jpeg_quality');
- if((! $quality) || ($quality > 100))
- $quality = JPEG_QUALITY;
-
- imagejpeg($this->image,NULL,$quality);
+ switch($this->type){
+ case "image/png":
+ $quality = get_config('system','png_quality');
+ if((! $quality) || ($quality > 9))
+ $quality = PNG_QUALITY;
+ imagepng($this->image,NULL, $quality);
+ break;
+ default:
+ $quality = get_config('system','jpeg_quality');
+ if((! $quality) || ($quality > 100))
+ $quality = JPEG_QUALITY;
+
+ imagejpeg($this->image,NULL,$quality);
+ }
$s = ob_get_contents();
ob_end_clean();
return $s;
@@ -200,8 +257,8 @@ class Photo {
$guid = get_guid();
$r = q("INSERT INTO `photo`
- ( `uid`, `contact-id`, `guid`, `resource-id`, `created`, `edited`, `filename`, `album`, `height`, `width`, `data`, `scale`, `profile`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid` )
- VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', %d, %d, '%s', '%s', '%s', '%s' )",
+ ( `uid`, `contact-id`, `guid`, `resource-id`, `created`, `edited`, `filename`, type, `album`, `height`, `width`, `data`, `scale`, `profile`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid` )
+ VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', %d, %d, '%s', '%s', '%s', '%s' )",
intval($uid),
intval($cid),
dbesc($guid),
@@ -209,6 +266,7 @@ class Photo {
dbesc(datetime_convert()),
dbesc(datetime_convert()),
dbesc(basename($filename)),
+ dbesc($this->type),
dbesc($album),
intval($this->height),
intval($this->width),
@@ -230,6 +288,40 @@ class Photo {
}}
+/**
+ * Guess image mimetype from filename or from Content-Type header
+ *
+ * @arg $filename string Image filename
+ * @arg $fromcurl boolean Check Content-Type header from curl request
+ */
+function guess_image_type($filename, $fromcurl=false) {
+ logger('Photo: guess_image_type: '.$filename . ($fromcurl?' from curl headers':''), LOGGER_DEBUG);
+ $type = null;
+ if ($fromcurl) {
+ $a = get_app();
+ $headers=array();
+ $h = explode("\n",$a->get_curl_headers());
+ foreach ($h as $l) {
+ list($k,$v) = array_map("trim", explode(":", trim($l), 2));
+ $headers[$k] = $v;
+ }
+ if (array_key_exists('Content-Type', $headers))
+ $type = $headers['Content-Type'];
+ }
+ if (is_null($type)){
+ $ext = pathinfo($filename, PATHINFO_EXTENSION);
+ $types = Photo::supportedTypes();
+ $type = "image/jpeg";
+ foreach ($types as $m=>$e){
+ if ($ext==$e) $type = $m;
+ }
+
+ }
+ logger('Photo: guess_image_type: type='.$type, LOGGER_DEBUG);
+ return $type;
+
+}
+
function import_profile_photo($photo,$uid,$cid) {
$a = get_app();
@@ -238,7 +330,12 @@ function import_profile_photo($photo,$uid,$cid) {
$filename = basename($photo);
$img_str = fetch_url($photo,true);
- $img = new Photo($img_str);
+
+ // guess mimetype from headers or filename
+ $type = guess_image_type($photo,true);
+
+
+ $img = new Photo($img_str, $type);
if($img->is_valid()) {
$img->scaleImageSquare(175);
@@ -266,9 +363,9 @@ function import_profile_photo($photo,$uid,$cid) {
- $photo = $a->get_baseurl() . '/photo/' . $hash . '-4.jpg';
- $thumb = $a->get_baseurl() . '/photo/' . $hash . '-5.jpg';
- $micro = $a->get_baseurl() . '/photo/' . $hash . '-6.jpg';
+ $photo = $a->get_baseurl() . '/photo/' . $hash . '-4.' . $img->getExt();
+ $thumb = $a->get_baseurl() . '/photo/' . $hash . '-5.' . $img->getExt();
+ $micro = $a->get_baseurl() . '/photo/' . $hash . '-6.' . $img->getExt();
}
else
$photo_failure = true;
diff --git a/include/conversation.php b/include/conversation.php
index a9c6287a9..68693bb9f 100644
--- a/include/conversation.php
+++ b/include/conversation.php
@@ -546,7 +546,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
}
$likebuttons = '';
- $shareable = ((($profile_owner == local_user()) && (! $item['private'])) ? true : false); //($mode != 'display') &&
+ $shareable = ((($profile_owner == local_user()) && ((! $item['private']) || $item['network'] === NETWORK_FEED)) ? true : false);
if($page_writeable) {
if($toplevelpost) {
diff --git a/include/follow.php b/include/follow.php
index d92d7577d..22288a0da 100644
--- a/include/follow.php
+++ b/include/follow.php
@@ -94,6 +94,9 @@ function new_contact($uid,$url,$interactive = false) {
}
$writeable = ((($ret['network'] === NETWORK_OSTATUS) && ($ret['notify'])) ? 1 : 0);
+
+ $subhub = (($ret['network'] === NETWORK_OSTATUS) ? true : false);
+
$hidden = (($ret['network'] === NETWORK_MAIL) ? 1 : 0);
if($ret['network'] === NETWORK_MAIL) {
@@ -116,8 +119,9 @@ function new_contact($uid,$url,$interactive = false) {
if(count($r)) {
// update contact
if($r[0]['rel'] == CONTACT_IS_FOLLOWER || ($network === NETWORK_DIASPORA && $r[0]['rel'] == CONTACT_IS_SHARING)) {
- q("UPDATE `contact` SET `rel` = %d , `readonly` = 0 WHERE `id` = %d AND `uid` = %d LIMIT 1",
+ q("UPDATE `contact` SET `rel` = %d , `subhub` = %d, `readonly` = 0 WHERE `id` = %d AND `uid` = %d LIMIT 1",
intval(CONTACT_IS_FRIEND),
+ intval($subhub),
intval($r[0]['id']),
intval($uid)
);
@@ -131,8 +135,8 @@ function new_contact($uid,$url,$interactive = false) {
// create contact record
$r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `nurl`, `addr`, `alias`, `batch`, `notify`, `poll`, `poco`, `name`, `nick`, `photo`, `network`, `pubkey`, `rel`, `priority`,
- `writable`, `hidden`, `blocked`, `readonly`, `pending` )
- VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, %d, 0, 0, 0 ) ",
+ `writable`, `hidden`, `blocked`, `readonly`, `pending`, `subhub` )
+ VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, %d, 0, 0, 0, %d ) ",
intval($uid),
dbesc(datetime_convert()),
dbesc($ret['url']),
@@ -151,7 +155,8 @@ function new_contact($uid,$url,$interactive = false) {
intval($new_relation),
intval($ret['priority']),
intval($writeable),
- intval($hidden)
+ intval($hidden),
+ intval($subhub)
);
}
diff --git a/include/items.php b/include/items.php
index 037de35eb..d543dcab0 100755
--- a/include/items.php
+++ b/include/items.php
@@ -22,8 +22,6 @@ function get_feed_for(&$a, $dfrn_id, $owner_nick, $last_update, $direction = 0)
if($a->argv[$x] === 'category' && $a->argc > ($x + 1) && strlen($a->argv[$x+1]))
$category = $a->argv[$x+1];
}
-
-
}
@@ -693,6 +691,8 @@ function encode_rel_links($links) {
return xmlify($o);
}
+
+
function item_store($arr,$force_parent = false) {
// If a Diaspora signature structure was passed in, pull it out of the
@@ -806,6 +806,14 @@ function item_store($arr,$force_parent = false) {
$deny_cid = $r[0]['deny_cid'];
$deny_gid = $r[0]['deny_gid'];
$arr['wall'] = $r[0]['wall'];
+
+ // if the parent is private, force privacy for the entire conversation
+ // This differs from the above settings as it subtly allows comments from
+ // email correspondents to be private even if the overall thread is not.
+
+ if($r[0]['private'])
+ $arr['private'] = 1;
+
}
else {
@@ -1314,6 +1322,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
$birthday = '';
$hubs = $feed->get_links('hub');
+ logger('consume_feed: hubs: ' . print_r($hubs,true), LOGGER_DATA);
if(count($hubs))
$hub = implode(',', $hubs);
@@ -1356,7 +1365,11 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
}
$img_str = fetch_url($photo_url,true);
- $img = new Photo($img_str);
+ // guess mimetype from headers or filename
+ $type = guess_image_type($photo_url,true);
+
+
+ $img = new Photo($img_str, $type);
if($img->is_valid()) {
if($have_photo) {
q("DELETE FROM `photo` WHERE `resource-id` = '%s' AND `contact-id` = %d AND `uid` = %d",
@@ -1382,9 +1395,9 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
q("UPDATE `contact` SET `avatar-date` = '%s', `photo` = '%s', `thumb` = '%s', `micro` = '%s'
WHERE `uid` = %d AND `id` = %d LIMIT 1",
dbesc(datetime_convert()),
- dbesc($a->get_baseurl() . '/photo/' . $hash . '-4.jpg'),
- dbesc($a->get_baseurl() . '/photo/' . $hash . '-5.jpg'),
- dbesc($a->get_baseurl() . '/photo/' . $hash . '-6.jpg'),
+ dbesc($a->get_baseurl() . '/photo/' . $hash . '-4.'.$img->getExt()),
+ dbesc($a->get_baseurl() . '/photo/' . $hash . '-5.'.$img->getExt()),
+ dbesc($a->get_baseurl() . '/photo/' . $hash . '-6.'.$img->getExt()),
intval($contact['uid']),
intval($contact['id'])
);
@@ -1640,6 +1653,11 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
if(count($r)) {
if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) {
+
+ // do not accept (ignore) an earlier edit than one we currently have.
+ if(datetime_convert('UTC','UTC',$datarray['edited'] < $r[0]['edited']))
+ continue;
+
$r = q("UPDATE `item` SET `title` = '%s', `body` = '%s', `tag` = '%s', `edited` = '%s' WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
dbesc($datarray['title']),
dbesc($datarray['body']),
@@ -1786,6 +1804,11 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
if(count($r)) {
if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) {
+
+ // do not accept (ignore) an earlier edit than one we currently have.
+ if(datetime_convert('UTC','UTC',$datarray['edited'] < $r[0]['edited']))
+ continue;
+
$r = q("UPDATE `item` SET `title` = '%s', `body` = '%s', `tag` = '%s', `edited` = '%s' WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
dbesc($datarray['title']),
dbesc($datarray['body']),
@@ -1841,9 +1864,11 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
}
if(($contact['network'] === NETWORK_FEED) || (! strlen($contact['notify']))) {
- // one way feed - no remote comment ability
- $datarray['last-child'] = 0;
+ // one way feed - no remote comment ability
+ $datarray['last-child'] = 0;
}
+ if($contact['network'] === NETWORK_FEED)
+ $datarray['private'] = 1;
// This is my contact on another system, but it's really me.
// Turn this into a wall post.
@@ -2269,7 +2294,12 @@ function local_delivery($importer,$data) {
if(count($r)) {
$iid = $r[0]['id'];
- if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) {
+ if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) {
+
+ // do not accept (ignore) an earlier edit than one we currently have.
+ if(datetime_convert('UTC','UTC',$datarray['edited'] < $r[0]['edited']))
+ continue;
+
logger('received updated comment' , LOGGER_DEBUG);
$r = q("UPDATE `item` SET `title` = '%s', `body` = '%s', `tag` = '%s', `edited` = '%s' WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
dbesc($datarray['title']),
@@ -2448,6 +2478,11 @@ function local_delivery($importer,$data) {
if(count($r)) {
if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) {
+
+ // do not accept (ignore) an earlier edit than one we currently have.
+ if(datetime_convert('UTC','UTC',$datarray['edited'] < $r[0]['edited']))
+ continue;
+
$r = q("UPDATE `item` SET `title` = '%s', `body` = '%s', `tag` = '%s', `edited` = '%s' WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
dbesc($datarray['title']),
dbesc($datarray['body']),
@@ -2614,6 +2649,11 @@ function local_delivery($importer,$data) {
if(count($r)) {
if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) {
+
+ // do not accept (ignore) an earlier edit than one we currently have.
+ if(datetime_convert('UTC','UTC',$datarray['edited'] < $r[0]['edited']))
+ continue;
+
$r = q("UPDATE `item` SET `title` = '%s', `body` = '%s', `tag` = '%s', `edited` = '%s' WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
dbesc($datarray['title']),
dbesc($datarray['body']),
@@ -2958,7 +2998,7 @@ function fix_private_photos($s,$uid, $item = null, $cid = 0) {
if(stristr($image , $site . '/photo/')) {
$replace = false;
$i = basename($image);
- $i = str_replace('.jpg','',$i);
+ $i = str_replace(array('.jpg','.png'),array('',''),$i);
$x = strpos($i,'-');
if($x) {
$res = substr($i,$x+1);
@@ -3000,7 +3040,7 @@ function fix_private_photos($s,$uid, $item = null, $cid = 0) {
}
if($replace) {
logger('fix_private_photos: replacing photo', LOGGER_DEBUG);
- $s = str_replace($image, 'data:image/jpg;base64,' . base64_encode($r[0]['data']), $s);
+ $s = str_replace($image, 'data:' . $r[0]['type'] . ';base64,' . base64_encode($r[0]['data']), $s);
logger('fix_private_photos: replaced: ' . $s, LOGGER_DATA);
}
}
diff --git a/include/network.php b/include/network.php
index eeb2460d1..446413cd8 100644
--- a/include/network.php
+++ b/include/network.php
@@ -807,8 +807,11 @@ function scale_external_images($s,$include_link = true) {
if(stristr($mtch[1],$hostname))
continue;
$i = fetch_url($mtch[1]);
+ // guess mimetype from headers or filename
+ $type = guess_image_type($mtch[1],true);
+
if($i) {
- $ph = new Photo($i);
+ $ph = new Photo($i, $type);
if($ph->is_valid()) {
$orig_width = $ph->getWidth();
$orig_height = $ph->getHeight();
diff --git a/include/oembed.php b/include/oembed.php
index 1f45d2814..e2504b7eb 100644..100755
--- a/include/oembed.php
+++ b/include/oembed.php
@@ -65,7 +65,8 @@ function oembed_fetch_url($embedurl){
}
function oembed_format_object($j){
- $embedurl = $j->embedurl;
+ $a = get_app();
+ $embedurl = $j->embedurl;
$jhtml = oembed_iframe($j->embedurl,(isset($j->width) ? $j->width : null), (isset($j->height) ? $j->height : null) );
$ret="<span class='oembed ".$j->type."'>";
switch ($j->type) {
@@ -78,6 +79,7 @@ function oembed_format_object($j){
$th=120; $tw = $th*$tr;
$tpl=get_markup_template('oembed_video.tpl');
$ret.=replace_macros($tpl, array(
+ '$baseurl' => $a->get_baseurl(),
'$embedurl'=>$embedurl,
'$escapedhtml'=>base64_encode($jhtml),
'$tw'=>$tw,
diff --git a/include/onepoll.php b/include/onepoll.php
index a64922aa3..02763cf4b 100644
--- a/include/onepoll.php
+++ b/include/onepoll.php
@@ -94,8 +94,8 @@ function onepoll_run($argv, $argc){
$t = $contact['last-update'];
if($contact['subhub']) {
- $interval = get_config('system','pushpoll_frequency');
- $contact['priority'] = (($interval !== false) ? intval($interval) : 3);
+ $poll_interval = get_config('system','pushpoll_frequency');
+ $contact['priority'] = (($poll_interval !== false) ? intval($poll_interval) : 3);
$hub_update = false;
if(datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 1 day"))
@@ -477,6 +477,9 @@ function onepoll_run($argv, $argc){
if($contact['network'] === NETWORK_DFRN || $contact['blocked'] || $contact['readonly'])
$hubmode = 'unsubscribe';
+ if($contact['network'] === NETWORK_OSTATUS && (! $contact['hub-verify']))
+ $hub_update = true;
+
if((strlen($hub)) && ($hub_update) && ($contact['rel'] != CONTACT_IS_FOLLOWER)) {
logger('poller: hub ' . $hubmode . ' : ' . $hub . ' contact name : ' . $contact['name'] . ' local user : ' . $importer['name']);
$hubs = explode(',', $hub);
diff --git a/include/poller.php b/include/poller.php
index 6b12445d1..fefc9b381 100644
--- a/include/poller.php
+++ b/include/poller.php
@@ -201,8 +201,8 @@ function poller_run($argv, $argc){
if($contact['subhub']) {
- $interval = get_config('system','pushpoll_frequency');
- $contact['priority'] = (($interval !== false) ? intval($interval) : 3);
+ $poll_interval = get_config('system','pushpoll_frequency');
+ $contact['priority'] = (($poll_interval !== false) ? intval($poll_interval) : 3);
$hub_update = false;
if((datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 1 day")) || $force)
diff --git a/include/text.php b/include/text.php
index d4a4d5580..f408e0df6 100644
--- a/include/text.php
+++ b/include/text.php
@@ -1541,3 +1541,16 @@ function protect_sprintf($s) {
return(str_replace('%','%%',$s));
}
+
+function is_a_date_arg($s) {
+ $i = intval($s);
+ if($i > 1900) {
+ $y = date('Y');
+ if($i <= $y+1 && strpos($s,'-') == 4) {
+ $m = intval(substr($s,5));
+ if($m > 0 && $m <= 12)
+ return true;
+ }
+ }
+ return false;
+}
diff --git a/include/user.php b/include/user.php
index af43a2b52..2477438bf 100644
--- a/include/user.php
+++ b/include/user.php
@@ -284,7 +284,11 @@ function create_user($arr) {
$filename = basename($photo);
$img_str = fetch_url($photo,true);
- $img = new Photo($img_str);
+ // guess mimetype from headers or filename
+ $type = guess_image_type($photo,true);
+
+
+ $img = new Photo($img_str, $type);
if($img->is_valid()) {
$img->scaleImageSquare(175);
@@ -324,4 +328,4 @@ function create_user($arr) {
$result['user'] = $u;
return $result;
-} \ No newline at end of file
+}