From cc74af9d09d2e345e6a87b0b0ebcf7612457f234 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Wed, 4 Jul 2012 21:56:17 +0200 Subject: [PATCH 01/10] Only some reformatting of the code. --- privacy_image_cache/privacy_image_cache.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/privacy_image_cache/privacy_image_cache.php b/privacy_image_cache/privacy_image_cache.php index b7236d09..49456ce8 100644 --- a/privacy_image_cache/privacy_image_cache.php +++ b/privacy_image_cache/privacy_image_cache.php @@ -111,8 +111,10 @@ function privacy_image_cache_is_local_image($url) { */ function privacy_image_cache_img_cb($matches) { // following line changed per bug #431 - if (privacy_image_cache_is_local_image($matches[2])) return $matches[1] . $matches[2] . $matches[3]; - return $matches[1] . get_app()->get_baseurl() . "/privacy_image_cache/?url=" . escape_tags(addslashes(rawurlencode($matches[2]))) . $matches[3]; + if (privacy_image_cache_is_local_image($matches[2])) + return $matches[1] . $matches[2] . $matches[3]; + + return $matches[1] . get_app()->get_baseurl() . "/privacy_image_cache/?url=" . escape_tags(addslashes(rawurlencode($matches[2]))) . $matches[3]; } /** From 4f3e76e87e68014f31cd6810ffaa557644af13a2 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Thu, 5 Jul 2012 23:37:28 +0200 Subject: [PATCH 02/10] Facebook: Trying to optimise the handling of videos Tumblr: Changed the way the HTML is generated --- facebook/facebook.php | 18 +++++++++++------- tumblr/tumblr.php | 9 ++++----- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/facebook/facebook.php b/facebook/facebook.php index e48d73ad..30f72862 100644 --- a/facebook/facebook.php +++ b/facebook/facebook.php @@ -416,7 +416,7 @@ function fb_get_friends($uid, $fullsync = true) { return; $s = fetch_url('https://graph.facebook.com/me/friends?access_token=' . $access_token); if($s) { - logger('facebook: fb_get_friends: ' . $s, LOGGER_DATA); + logger('facebook: fb_gwet_friends: ' . $s, LOGGER_DATA); $j = json_decode($s); logger('facebook: fb_get_friends: json: ' . print_r($j,true), LOGGER_DATA); if(! $j->data) @@ -1101,21 +1101,25 @@ function facebook_post_hook(&$a,&$b) { logger('Facebook post: msg=' . $msg, LOGGER_DATA); - if($likes) { + if($likes) { $postvars = array('access_token' => $fb_token); } else { + // message, picture, link, name, caption, description, source, place, tags $postvars = array( - 'access_token' => $fb_token, + 'access_token' => $fb_token, 'message' => $msg ); if(isset($image)) { $postvars['picture'] = $image; - //$postvars['type'] = "photo"; } if(isset($link)) { $postvars['link'] = $link; - //$postvars['type'] = "link"; + + // The following doesn't work - why? + if ((stristr($link,'youtube')) || (stristr($link,'youtu.be')) || (stristr($link,'vimeo'))) { + $postvars['source'] = $link; + } } if(isset($linkname)) $postvars['name'] = $linkname; @@ -1133,7 +1137,7 @@ function facebook_post_hook(&$a,&$b) { if($reply) { $url = 'https://graph.facebook.com/' . $reply . '/' . (($likes) ? 'likes' : 'comments'); - } else if (($link != "") or ($image != "") or ($b['title'] == '') or (strlen($msg) < 500)) { + } else if (($link != "") or ($image != "") or ($b['title'] == '') or (strlen($msg) < 500)) { $url = 'https://graph.facebook.com/me/feed'; if($b['plink']) $postvars['actions'] = '{"name": "' . t('View on Friendica') . '", "link": "' . $b['plink'] . '"}'; @@ -1778,7 +1782,7 @@ function fb_consume_stream($uid,$j,$wall = false) { // oembed display a picture of the video as well if ($entry->type != "video") { if(isset($entry->picture) && isset($entry->link)) { - $datarray['body'] .= "\n" . '[url=' . $entry->link . '][img]'.$entry->picture.'[/img][/url]'; + $datarray['body'] .= "\n" . '[url=' . $entry->link . '][img]'.$entry->picture.'[/img][/url]'; } else { if(isset($entry->picture)) diff --git a/tumblr/tumblr.php b/tumblr/tumblr.php index 03a67949..eeb51348 100755 --- a/tumblr/tumblr.php +++ b/tumblr/tumblr.php @@ -204,19 +204,18 @@ function tumblr_send(&$a,&$b) { $params['embed'] = $link; if ($title != '') $params['caption'] = '

'.$title. - "

".bbcode($body)."

"; + "

".bbcode($body, false, false)."

"; else - $params['caption'] = bbcode($body); + $params['caption'] = bbcode($body, false, false); } else if (($link != '') and !$video) { $params['type'] = "link"; $params['name'] = $title; $params['url'] = $link; - //$params['description'] = bbcode($body); - $params['description'] = bbcode($b["body"]); + $params['description'] = bbcode($b["body"], false, false); } else { $params['type'] = "regular"; $params['title'] = $title; - $params['body'] = bbcode($b['body']); + $params['body'] = bbcode($b['body'], false, false); } $x = post_url($tmbl_blog,$params); From b0dbf4d54c316d965974864cd75f68ed77021a9c Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Fri, 6 Jul 2012 07:38:50 +0200 Subject: [PATCH 03/10] Twitter/Statusnet: Problem with vanishing linebreaks when message isn't shortened --- statusnet/statusnet.php | 7 ++++++- twitter/twitter.php | 6 +++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index 99e84475..b3a8a1a1 100755 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -482,9 +482,14 @@ function statusnet_post_hook(&$a,&$b) { } // ok, all the links we want to send out are save, now strip // away the remaining bbcode - $msg = strip_tags(bbcode($tmp, false, false)); + //$msg = strip_tags(bbcode($tmp, false, false)); + $msg = bbcode($tmp, false, false); + $msg = str_replace(array('
','
'),"\n",$msg); + $msg = strip_tags($msg); + // quotes not working - let's try this $msg = html_entity_decode($msg); + if (( strlen($msg) > $max_char) && $max_char > 0) { $shortlink = short_link( $b['plink'] ); // the new message will be shortened such that "... $shortlink" diff --git a/twitter/twitter.php b/twitter/twitter.php index 9984f369..2849db96 100755 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -347,7 +347,11 @@ function twitter_post_hook(&$a,&$b) { } // ok, all the links we want to send out are save, now strip // away the remaining bbcode - $msg = strip_tags(bbcode($tmp, false, false)); + //$msg = strip_tags(bbcode($tmp, false, false)); + $msg = bbcode($tmp, false, false); + $msg = str_replace(array('
','
'),"\n",$msg); + $msg = strip_tags($msg); + // quotes not working - let's try this $msg = html_entity_decode($msg); if (( strlen($msg) > $max_char) && $max_char > 0) { From 129fff8fc14b61a935bf50a830524c4a0163a117 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sat, 7 Jul 2012 20:39:48 +0200 Subject: [PATCH 04/10] privacy_image_cache: using another hook that only is used for displaying the page --- privacy_image_cache/privacy_image_cache.php | 34 +++++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/privacy_image_cache/privacy_image_cache.php b/privacy_image_cache/privacy_image_cache.php index 49456ce8..b5cfb13e 100644 --- a/privacy_image_cache/privacy_image_cache.php +++ b/privacy_image_cache/privacy_image_cache.php @@ -11,7 +11,8 @@ define("PRIVACY_IMAGE_CACHE_DEFAULT_TIME", 86400); // 1 Day require_once('include/security.php'); function privacy_image_cache_install() { - register_hook('bbcode', 'addon/privacy_image_cache/privacy_image_cache.php', 'privacy_image_cache_bbcode_hook'); + register_hook('prepare_body', 'addon/privacy_image_cache/privacy_image_cache.php', 'privacy_image_cache_prepare_body_hook'); + // register_hook('bbcode', 'addon/privacy_image_cache/privacy_image_cache.php', 'privacy_image_cache_bbcode_hook'); register_hook('display_item', 'addon/privacy_image_cache/privacy_image_cache.php', 'privacy_image_cache_display_item_hook'); register_hook('ping_xmlize', 'addon/privacy_image_cache/privacy_image_cache.php', 'privacy_image_cache_ping_xmlize_hook'); register_hook('cron', 'addon/privacy_image_cache/privacy_image_cache.php', 'privacy_image_cache_cron'); @@ -19,6 +20,7 @@ function privacy_image_cache_install() { function privacy_image_cache_uninstall() { + unregister_hook('prepare_body', 'addon/privacy_image_cache/privacy_image_cache.php', 'privacy_image_cache_prepare_body_hook'); unregister_hook('bbcode', 'addon/privacy_image_cache/privacy_image_cache.php', 'privacy_image_cache_bbcode_hook'); unregister_hook('display_item', 'addon/privacy_image_cache/privacy_image_cache.php', 'privacy_image_cache_display_item_hook'); unregister_hook('ping_xmlize', 'addon/privacy_image_cache/privacy_image_cache.php', 'privacy_image_cache_ping_xmlize_hook'); @@ -30,6 +32,8 @@ function privacy_image_cache_module() {} function privacy_image_cache_init() { + global $a; + if(function_exists('header_remove')) { header_remove('Pragma'); header_remove('pragma'); @@ -48,8 +52,18 @@ function privacy_image_cache_init() { require_once("Photo.php"); $img_str = fetch_url($_REQUEST['url'],true); - if (substr($img_str, 0, 6) == "GIF89a") { - $mime = "image/gif"; + + $tempfile = tempnam("", "cache"); + file_put_contents($tempfile, $img_str); + $mime = image_type_to_mime_type(exif_imagetype($tempfile)); + unlink($tempfile); + + // If there is an error then return a blank image + if ((substr($a->get_curl_code(), 0, 1) == "4") or (!$img_str)) { + $img_str = file_get_contents("images/blank.png"); + $mime = "image/png"; + //} else if (substr($img_str, 0, 6) == "GIF89a") { + } else if ($mime != "image/jpeg") { $image = @imagecreatefromstring($img_str); if($image === FALSE) die(); @@ -64,7 +78,7 @@ function privacy_image_cache_init() { dbesc(''), intval(imagesy($image)), intval(imagesx($image)), - 'image/gif', + $mime, dbesc($img_str), 100, intval(0), @@ -81,7 +95,6 @@ function privacy_image_cache_init() { } } - header("Content-type: $mime"); header("Expires: " . gmdate("D, d M Y H:i:s", time() + (3600*24)) . " GMT"); header("Cache-Control: max-age=" . (3600*24)); @@ -121,8 +134,17 @@ function privacy_image_cache_img_cb($matches) { * @param App $a * @param string $o */ +function privacy_image_cache_prepare_body_hook(&$a, &$o) { + $o["html"] = preg_replace_callback("/(]*src *= *[\"'])([^\"']+)([\"'][^>]*>)/siU", "privacy_image_cache_img_cb", $o["html"]); +} + +/** + * @param App $a + * @param string $o + * Function disabled because the plugin moved + */ function privacy_image_cache_bbcode_hook(&$a, &$o) { - $o = preg_replace_callback("/(]*src *= *[\"'])([^\"']+)([\"'][^>]*>)/siU", "privacy_image_cache_img_cb", $o); + //$o = preg_replace_callback("/(]*src *= *[\"'])([^\"']+)([\"'][^>]*>)/siU", "privacy_image_cache_img_cb", $o); } From 56fd821c7eb492bf21632c6c581ec2fe4d75c574 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 8 Jul 2012 18:29:31 +0200 Subject: [PATCH 05/10] Fixed problems with images where the address contains special chars --- facebook/facebook.php | 10 +++++++--- privacy_image_cache/privacy_image_cache.php | 2 +- statusnet/statusnet.php | 6 +++++- twitter/twitter.php | 3 +++ 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/facebook/facebook.php b/facebook/facebook.php index 30f72862..51f1fc84 100644 --- a/facebook/facebook.php +++ b/facebook/facebook.php @@ -1004,6 +1004,10 @@ function facebook_post_hook(&$a,&$b) { if(preg_match("/\[img\](.*?)\[\/img\]/is",$b['body'],$matches)) $image = $matches[1]; + // When saved into the database the content is sent through htmlspecialchars + // That means that we have to decode all image-urls + $image = htmlspecialchars_decode($image); + // Checking for a bookmark element $body = $b['body']; if (strpos($body, "[bookmark") !== false) { @@ -1110,10 +1114,10 @@ function facebook_post_hook(&$a,&$b) { 'access_token' => $fb_token, 'message' => $msg ); - if(isset($image)) { + if(trim($image) != "") { $postvars['picture'] = $image; } - if(isset($link)) { + if(trim($link) != "") { $postvars['link'] = $link; // The following doesn't work - why? @@ -1121,7 +1125,7 @@ function facebook_post_hook(&$a,&$b) { $postvars['source'] = $link; } } - if(isset($linkname)) + if(trim($linkname) != "") $postvars['name'] = $linkname; } diff --git a/privacy_image_cache/privacy_image_cache.php b/privacy_image_cache/privacy_image_cache.php index b5cfb13e..cd8a65f8 100644 --- a/privacy_image_cache/privacy_image_cache.php +++ b/privacy_image_cache/privacy_image_cache.php @@ -127,7 +127,7 @@ function privacy_image_cache_img_cb($matches) { if (privacy_image_cache_is_local_image($matches[2])) return $matches[1] . $matches[2] . $matches[3]; - return $matches[1] . get_app()->get_baseurl() . "/privacy_image_cache/?url=" . escape_tags(addslashes(rawurlencode($matches[2]))) . $matches[3]; + return $matches[1] . get_app()->get_baseurl() . "/privacy_image_cache/?url=" . addslashes(rawurlencode(htmlspecialchars_decode($matches[2]))) . $matches[3]; } /** diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index b3a8a1a1..b433f57b 100755 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -503,10 +503,14 @@ function statusnet_post_hook(&$a,&$b) { $msg = implode(' ', $e); $msg .= '... ' . $shortlink; } + + $msg = trim($msg); + // and now dent it :-) if(strlen($msg)) { $result = $dent->post('statuses/update', array('status' => $msg)); - logger('statusnet_post send, result: ' . print_r($result, true), LOGGER_DEBUG); + logger('statusnet_post send, result: ' . print_r($result, true). + "\nmessage: ".$msg, LOGGER_DEBUG."\nOriginal post: ".print_r($b)); if ($result->error) { logger('Send to StatusNet failed: "' . $result->error . '"'); } diff --git a/twitter/twitter.php b/twitter/twitter.php index 2849db96..04c1c87d 100755 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -367,6 +367,9 @@ function twitter_post_hook(&$a,&$b) { $msg = implode(' ', $e); $msg .= '... ' . $shortlink; } + + $msg = trim($msg); + // and now tweet it :-) if(strlen($msg)) { $result = $tweet->post('statuses/update', array('status' => $msg)); From bf4f8f472950ed93e71487dccefa6100e14967f3 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Mon, 9 Jul 2012 11:54:52 +0200 Subject: [PATCH 06/10] Libertree: Posting works again (new "source" field) --- libertree/libertree.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libertree/libertree.php b/libertree/libertree.php index c117fa81..4b55a5e7 100755 --- a/libertree/libertree.php +++ b/libertree/libertree.php @@ -196,7 +196,8 @@ function libertree_send(&$a,&$b) { $body = "## ".html_entity_decode($title)."\n\n".$body; $params = array( - 'text' => $body + 'text' => $body, + 'source' => "friendica" // 'token' => $ltree_api_token ); From cff32d46c2c03621aaabac3165a5baae67f5f957 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Fri, 13 Jul 2012 23:27:00 +0200 Subject: [PATCH 07/10] facebook: Changing the order which kind of text is taken when there is no message privacy_image_cache: Workaround when a space is in the url --- facebook/facebook.php | 6 +++--- privacy_image_cache/privacy_image_cache.php | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/facebook/facebook.php b/facebook/facebook.php index 51f1fc84..b9f42859 100644 --- a/facebook/facebook.php +++ b/facebook/facebook.php @@ -1090,15 +1090,15 @@ function facebook_post_hook(&$a,&$b) { } // Fallback - if message is empty + if(!strlen($msg)) + $msg = $linkname; + if(!strlen($msg)) $msg = $link; if(!strlen($msg)) $msg = $image; - if(!strlen($msg)) - $msg = $linkname; - // If there is nothing to post then exit if(!strlen($msg)) return; diff --git a/privacy_image_cache/privacy_image_cache.php b/privacy_image_cache/privacy_image_cache.php index cd8a65f8..b757c783 100644 --- a/privacy_image_cache/privacy_image_cache.php +++ b/privacy_image_cache/privacy_image_cache.php @@ -51,6 +51,9 @@ function privacy_image_cache_init() { } else { require_once("Photo.php"); + // It shouldn't happen but it does - spaces in URL + $_REQUEST['url'] = str_replace(" ", "+", $_REQUEST['url']); + $img_str = fetch_url($_REQUEST['url'],true); $tempfile = tempnam("", "cache"); From 341de3e5babdfa34ef8514bc03618a9978386fda Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 15 Jul 2012 13:41:01 +0200 Subject: [PATCH 08/10] Libertree: Added a parameter so that the bb2markdown conversion can differ from libertree to diaspora --- libertree/libertree.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libertree/libertree.php b/libertree/libertree.php index fcd0fa5c..4141d8b6 100755 --- a/libertree/libertree.php +++ b/libertree/libertree.php @@ -188,7 +188,7 @@ function libertree_send(&$a,&$b) { } while ($oldbody != $body); // convert to markdown - $body = bb2diaspora($body); + $body = bb2diaspora($body, false, false); // Adding the title if(strlen($title)) From 97209cee755c391c5cd7f534cde6177d275bd53b Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Wed, 18 Jul 2012 21:04:23 +0200 Subject: [PATCH 09/10] Libertree: The source is set to the site name --- libertree/libertree.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libertree/libertree.php b/libertree/libertree.php index 4141d8b6..2809adee 100755 --- a/libertree/libertree.php +++ b/libertree/libertree.php @@ -153,7 +153,8 @@ function libertree_send(&$a,&$b) { $ltree_api_token = get_pconfig($b['uid'],'libertree','libertree_api_token'); $ltree_url = get_pconfig($b['uid'],'libertree','libertree_url'); $ltree_blog = "$ltree_url/api/v1/posts/create/?token=$ltree_api_token"; - $ltree_source = "Friendica"; + //$ltree_source = "Friendica"; + $ltree_source = "[".$a->config['sitename']."](".$a->get_baseurl().")"; if($ltree_url && $ltree_api_token && $ltree_blog && $ltree_source) { require_once('include/bb2diaspora.php'); From 4437c42fd4b490cf60834b8151be14bac21c9c64 Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Wed, 18 Jul 2012 23:34:45 +0200 Subject: [PATCH 10/10] privacy_image_cache: A file cache is implemented that should be much faster than the database. --- privacy_image_cache/privacy_image_cache.php | 22 +++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/privacy_image_cache/privacy_image_cache.php b/privacy_image_cache/privacy_image_cache.php index b757c783..f0d8e39a 100644 --- a/privacy_image_cache/privacy_image_cache.php +++ b/privacy_image_cache/privacy_image_cache.php @@ -43,6 +43,24 @@ function privacy_image_cache_init() { // Double encoded url - happens with Diaspora $urlhash2 = 'pic:' . sha1(urldecode($_REQUEST['url'])); + $cache = get_config('system','itemcache'); + if (($cache != '') and is_dir($cache)) { + $cachefile = $cache."/".hash("md5", $urlhash); + if (file_exists($cachefile)) { + $img_str = file_get_contents($cachefile); + + $mime = image_type_to_mime_type(exif_imagetype($cachefile)); + + header("Content-type: $mime"); + header("Expires: " . gmdate("D, d M Y H:i:s", time() + (3600*24)) . " GMT"); + header("Cache-Control: max-age=" . (3600*24)); + + echo $img_str; + + killme(); + } + } + $r = q("SELECT * FROM `photo` WHERE `resource-id` in ('%s', '%s') LIMIT 1", $urlhash, $urlhash2); if (count($r)) { $img_str = $r[0]['data']; @@ -98,6 +116,10 @@ function privacy_image_cache_init() { } } + // Writing in cachefile + if (isset($cachefile) && $cachefile != '') + file_put_contents($cachefile, $img_str); + header("Content-type: $mime"); header("Expires: " . gmdate("D, d M Y H:i:s", time() + (3600*24)) . " GMT"); header("Cache-Control: max-age=" . (3600*24));