Merge pull request #68 from annando/master

facebook, libertree, privacy_image_cache, statusnet, twitter and tumblr ...
pull/69/merge
friendica 2012-07-18 16:34:31 -07:00
commit f0397d5237
6 changed files with 104 additions and 31 deletions

View File

@ -418,7 +418,7 @@ function fb_get_friends($uid, $fullsync = true) {
return; return;
$s = fetch_url('https://graph.facebook.com/me/friends?access_token=' . $access_token); $s = fetch_url('https://graph.facebook.com/me/friends?access_token=' . $access_token);
if($s) { if($s) {
logger('facebook: fb_get_friends: ' . $s, LOGGER_DATA); logger('facebook: fb_gwet_friends: ' . $s, LOGGER_DATA);
$j = json_decode($s); $j = json_decode($s);
logger('facebook: fb_get_friends: json: ' . print_r($j,true), LOGGER_DATA); logger('facebook: fb_get_friends: json: ' . print_r($j,true), LOGGER_DATA);
if(! $j->data) if(! $j->data)
@ -1006,6 +1006,10 @@ function facebook_post_hook(&$a,&$b) {
if(preg_match("/\[img\](.*?)\[\/img\]/is",$b['body'],$matches)) if(preg_match("/\[img\](.*?)\[\/img\]/is",$b['body'],$matches))
$image = $matches[1]; $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 // Checking for a bookmark element
$body = $b['body']; $body = $b['body'];
if (strpos($body, "[bookmark") !== false) { if (strpos($body, "[bookmark") !== false) {
@ -1088,38 +1092,42 @@ function facebook_post_hook(&$a,&$b) {
} }
// Fallback - if message is empty // Fallback - if message is empty
if(!strlen($msg))
$msg = $linkname;
if(!strlen($msg)) if(!strlen($msg))
$msg = $link; $msg = $link;
if(!strlen($msg)) if(!strlen($msg))
$msg = $image; $msg = $image;
if(!strlen($msg))
$msg = $linkname;
// If there is nothing to post then exit // If there is nothing to post then exit
if(!strlen($msg)) if(!strlen($msg))
return; return;
logger('Facebook post: msg=' . $msg, LOGGER_DATA); logger('Facebook post: msg=' . $msg, LOGGER_DATA);
if($likes) { if($likes) {
$postvars = array('access_token' => $fb_token); $postvars = array('access_token' => $fb_token);
} }
else { else {
// message, picture, link, name, caption, description, source, place, tags
$postvars = array( $postvars = array(
'access_token' => $fb_token, 'access_token' => $fb_token,
'message' => $msg 'message' => $msg
); );
if(isset($image)) { if(trim($image) != "") {
$postvars['picture'] = $image; $postvars['picture'] = $image;
//$postvars['type'] = "photo";
} }
if(isset($link)) { if(trim($link) != "") {
$postvars['link'] = $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)) if(trim($linkname) != "")
$postvars['name'] = $linkname; $postvars['name'] = $linkname;
} }
@ -1135,7 +1143,7 @@ function facebook_post_hook(&$a,&$b) {
if($reply) { if($reply) {
$url = 'https://graph.facebook.com/' . $reply . '/' . (($likes) ? 'likes' : 'comments'); $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'; $url = 'https://graph.facebook.com/me/feed';
if($b['plink']) if($b['plink'])
$postvars['actions'] = '{"name": "' . t('View on Friendica') . '", "link": "' . $b['plink'] . '"}'; $postvars['actions'] = '{"name": "' . t('View on Friendica') . '", "link": "' . $b['plink'] . '"}';
@ -1780,7 +1788,7 @@ function fb_consume_stream($uid,$j,$wall = false) {
// oembed display a picture of the video as well // oembed display a picture of the video as well
if ($entry->type != "video") { if ($entry->type != "video") {
if(isset($entry->picture) && isset($entry->link)) { 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 { else {
if(isset($entry->picture)) if(isset($entry->picture))

View File

@ -153,7 +153,8 @@ function libertree_send(&$a,&$b) {
$ltree_api_token = get_pconfig($b['uid'],'libertree','libertree_api_token'); $ltree_api_token = get_pconfig($b['uid'],'libertree','libertree_api_token');
$ltree_url = get_pconfig($b['uid'],'libertree','libertree_url'); $ltree_url = get_pconfig($b['uid'],'libertree','libertree_url');
$ltree_blog = "$ltree_url/api/v1/posts/create/?token=$ltree_api_token"; $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) { if($ltree_url && $ltree_api_token && $ltree_blog && $ltree_source) {
require_once('include/bb2diaspora.php'); require_once('include/bb2diaspora.php');
@ -188,12 +189,12 @@ function libertree_send(&$a,&$b) {
} while ($oldbody != $body); } while ($oldbody != $body);
// convert to markdown // convert to markdown
$body = bb2diaspora($body); $body = bb2diaspora($body, false, false);
// Adding the title // Adding the title
if(strlen($title)) if(strlen($title))
$body = "## ".html_entity_decode($title)."\n\n".$body; $body = "## ".html_entity_decode($title)."\n\n".$body;
$params = array( $params = array(
'text' => $body, 'text' => $body,

View File

@ -11,7 +11,8 @@ define("PRIVACY_IMAGE_CACHE_DEFAULT_TIME", 86400); // 1 Day
require_once('include/security.php'); require_once('include/security.php');
function privacy_image_cache_install() { 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('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('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'); 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() { 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('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('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'); 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() { function privacy_image_cache_init() {
global $a;
if(function_exists('header_remove')) { if(function_exists('header_remove')) {
header_remove('Pragma'); header_remove('Pragma');
header_remove('pragma'); header_remove('pragma');
@ -39,6 +43,24 @@ function privacy_image_cache_init() {
// Double encoded url - happens with Diaspora // Double encoded url - happens with Diaspora
$urlhash2 = 'pic:' . sha1(urldecode($_REQUEST['url'])); $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); $r = q("SELECT * FROM `photo` WHERE `resource-id` in ('%s', '%s') LIMIT 1", $urlhash, $urlhash2);
if (count($r)) { if (count($r)) {
$img_str = $r[0]['data']; $img_str = $r[0]['data'];
@ -47,9 +69,22 @@ function privacy_image_cache_init() {
} else { } else {
require_once("Photo.php"); 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); $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); $image = @imagecreatefromstring($img_str);
if($image === FALSE) die(); if($image === FALSE) die();
@ -64,7 +99,7 @@ function privacy_image_cache_init() {
dbesc(''), dbesc(''),
intval(imagesy($image)), intval(imagesy($image)),
intval(imagesx($image)), intval(imagesx($image)),
'image/gif', $mime,
dbesc($img_str), dbesc($img_str),
100, 100,
intval(0), intval(0),
@ -81,6 +116,9 @@ function privacy_image_cache_init() {
} }
} }
// Writing in cachefile
if (isset($cachefile) && $cachefile != '')
file_put_contents($cachefile, $img_str);
header("Content-type: $mime"); header("Content-type: $mime");
header("Expires: " . gmdate("D, d M Y H:i:s", time() + (3600*24)) . " GMT"); header("Expires: " . gmdate("D, d M Y H:i:s", time() + (3600*24)) . " GMT");
@ -111,16 +149,27 @@ function privacy_image_cache_is_local_image($url) {
*/ */
function privacy_image_cache_img_cb($matches) { function privacy_image_cache_img_cb($matches) {
// following line changed per bug #431 // following line changed per bug #431
if (privacy_image_cache_is_local_image($matches[2])) return $matches[1] . $matches[2] . $matches[3]; if (privacy_image_cache_is_local_image($matches[2]))
return $matches[1] . get_app()->get_baseurl() . "/privacy_image_cache/?url=" . escape_tags(addslashes(rawurlencode($matches[2]))) . $matches[3]; return $matches[1] . $matches[2] . $matches[3];
return $matches[1] . get_app()->get_baseurl() . "/privacy_image_cache/?url=" . addslashes(rawurlencode(htmlspecialchars_decode($matches[2]))) . $matches[3];
} }
/** /**
* @param App $a * @param App $a
* @param string $o * @param string $o
*/ */
function privacy_image_cache_prepare_body_hook(&$a, &$o) {
$o["html"] = preg_replace_callback("/(<img [^>]*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) { function privacy_image_cache_bbcode_hook(&$a, &$o) {
$o = preg_replace_callback("/(<img [^>]*src *= *[\"'])([^\"']+)([\"'][^>]*>)/siU", "privacy_image_cache_img_cb", $o); //$o = preg_replace_callback("/(<img [^>]*src *= *[\"'])([^\"']+)([\"'][^>]*>)/siU", "privacy_image_cache_img_cb", $o);
} }

View File

@ -482,9 +482,14 @@ function statusnet_post_hook(&$a,&$b) {
} }
// ok, all the links we want to send out are save, now strip // ok, all the links we want to send out are save, now strip
// away the remaining bbcode // 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('<br>','<br />'),"\n",$msg);
$msg = strip_tags($msg);
// quotes not working - let's try this // quotes not working - let's try this
$msg = html_entity_decode($msg); $msg = html_entity_decode($msg);
if (( strlen($msg) > $max_char) && $max_char > 0) { if (( strlen($msg) > $max_char) && $max_char > 0) {
$shortlink = short_link( $b['plink'] ); $shortlink = short_link( $b['plink'] );
// the new message will be shortened such that "... $shortlink" // the new message will be shortened such that "... $shortlink"
@ -498,10 +503,14 @@ function statusnet_post_hook(&$a,&$b) {
$msg = implode(' ', $e); $msg = implode(' ', $e);
$msg .= '... ' . $shortlink; $msg .= '... ' . $shortlink;
} }
$msg = trim($msg);
// and now dent it :-) // and now dent it :-)
if(strlen($msg)) { if(strlen($msg)) {
$result = $dent->post('statuses/update', array('status' => $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) { if ($result->error) {
logger('Send to StatusNet failed: "' . $result->error . '"'); logger('Send to StatusNet failed: "' . $result->error . '"');
} }

View File

@ -204,19 +204,18 @@ function tumblr_send(&$a,&$b) {
$params['embed'] = $link; $params['embed'] = $link;
if ($title != '') if ($title != '')
$params['caption'] = '<h1><a href="'.$link.'">'.$title. $params['caption'] = '<h1><a href="'.$link.'">'.$title.
"</a></h1><p>".bbcode($body)."</p>"; "</a></h1><p>".bbcode($body, false, false)."</p>";
else else
$params['caption'] = bbcode($body); $params['caption'] = bbcode($body, false, false);
} else if (($link != '') and !$video) { } else if (($link != '') and !$video) {
$params['type'] = "link"; $params['type'] = "link";
$params['name'] = $title; $params['name'] = $title;
$params['url'] = $link; $params['url'] = $link;
//$params['description'] = bbcode($body); $params['description'] = bbcode($b["body"], false, false);
$params['description'] = bbcode($b["body"]);
} else { } else {
$params['type'] = "regular"; $params['type'] = "regular";
$params['title'] = $title; $params['title'] = $title;
$params['body'] = bbcode($b['body']); $params['body'] = bbcode($b['body'], false, false);
} }
$x = post_url($tmbl_blog,$params); $x = post_url($tmbl_blog,$params);

View File

@ -347,7 +347,11 @@ function twitter_post_hook(&$a,&$b) {
} }
// ok, all the links we want to send out are save, now strip // ok, all the links we want to send out are save, now strip
// away the remaining bbcode // 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('<br>','<br />'),"\n",$msg);
$msg = strip_tags($msg);
// quotes not working - let's try this // quotes not working - let's try this
$msg = html_entity_decode($msg); $msg = html_entity_decode($msg);
if (( strlen($msg) > $max_char) && $max_char > 0) { if (( strlen($msg) > $max_char) && $max_char > 0) {
@ -363,6 +367,9 @@ function twitter_post_hook(&$a,&$b) {
$msg = implode(' ', $e); $msg = implode(' ', $e);
$msg .= '... ' . $shortlink; $msg .= '... ' . $shortlink;
} }
$msg = trim($msg);
// and now tweet it :-) // and now tweet it :-)
if(strlen($msg)) { if(strlen($msg)) {
$result = $tweet->post('statuses/update', array('status' => $msg)); $result = $tweet->post('statuses/update', array('status' => $msg));