diff --git a/facebook.tgz b/facebook.tgz index 6ec94f3a8..ff920dc60 100644 Binary files a/facebook.tgz and b/facebook.tgz differ diff --git a/facebook/facebook.php b/facebook/facebook.php index 127456af5..6786febbb 100644 --- a/facebook/facebook.php +++ b/facebook/facebook.php @@ -418,7 +418,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) @@ -1006,6 +1006,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) { @@ -1088,38 +1092,42 @@ 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; 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)) { + if(trim($image) != "") { $postvars['picture'] = $image; - //$postvars['type'] = "photo"; } - if(isset($link)) { + if(trim($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; } @@ -1135,7 +1143,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'] . '"}'; @@ -1780,7 +1788,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/libertree.tgz b/libertree.tgz index f467bc00c..a36e792b1 100644 Binary files a/libertree.tgz and b/libertree.tgz differ diff --git a/libertree/libertree.php b/libertree/libertree.php index 0e7e1a819..2809adee3 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'); @@ -188,12 +189,12 @@ 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)) $body = "## ".html_entity_decode($title)."\n\n".$body; - + $params = array( 'text' => $body, diff --git a/morechoice.tgz b/morechoice.tgz index fcdc04f69..a00b7dccc 100644 Binary files a/morechoice.tgz and b/morechoice.tgz differ diff --git a/morechoice/morechoice.php b/morechoice/morechoice.php index e96f0c970..bf97b76bc 100644 --- a/morechoice/morechoice.php +++ b/morechoice/morechoice.php @@ -14,6 +14,7 @@ function morechoice_install() { register_hook('gender_selector', 'addon/morechoice/morechoice.php', 'morechoice_gender_selector'); register_hook('sexpref_selector', 'addon/morechoice/morechoice.php', 'morechoice_sexpref_selector'); register_hook('marital_selector', 'addon/morechoice/morechoice.php', 'morechoice_marital_selector'); + register_hook('poke_verbs', 'addon/morechoice/morechoice.php', 'morechoice_poke_verbs'); } @@ -23,6 +24,7 @@ function morechoice_uninstall() { unregister_hook('gender_selector', 'addon/morechoice/morechoice.php', 'morechoice_gender_selector'); unregister_hook('sexpref_selector', 'addon/morechoice/morechoice.php', 'morechoice_sexpref_selector'); unregister_hook('marital_selector', 'addon/morechoice/morechoice.php', 'morechoice_marital_selector'); + unregister_hook('poke_verbs', 'addon/morechoice/morechoice.php', 'morechoice_poke_verbs'); } @@ -122,3 +124,10 @@ function morechoice_marital_selector($a,&$b) { $b[] = 'Wallowing in self-pity'; } } + +function morechoice_poke_verbs($a,&$b) { + $b['bitchslap'] = array('bitchslapped', t('bitchslap'), t('bitchslapped')); + $b['shag'] = array('shag', t('shag'), t('shagged')); + + +} \ No newline at end of file diff --git a/nsfw/nsfw.php b/nsfw/nsfw.php index 4a65b7208..60ab45813 100755 --- a/nsfw/nsfw.php +++ b/nsfw/nsfw.php @@ -10,7 +10,7 @@ */ function nsfw_install() { - register_hook('prepare_body', 'addon/nsfw/nsfw.php', 'nsfw_prepare_body'); + register_hook('prepare_body', 'addon/nsfw/nsfw.php', 'nsfw_prepare_body', 10); register_hook('plugin_settings', 'addon/nsfw/nsfw.php', 'nsfw_addon_settings'); register_hook('plugin_settings_post', 'addon/nsfw/nsfw.php', 'nsfw_addon_settings_post'); diff --git a/privacy_image_cache.tgz b/privacy_image_cache.tgz index 27943df53..9712a0677 100644 Binary files a/privacy_image_cache.tgz and b/privacy_image_cache.tgz differ diff --git a/privacy_image_cache/privacy_image_cache.php b/privacy_image_cache/privacy_image_cache.php index b7236d09d..f0d8e39ac 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'); @@ -39,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']; @@ -47,9 +69,22 @@ 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); - 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 +99,7 @@ function privacy_image_cache_init() { dbesc(''), intval(imagesy($image)), intval(imagesx($image)), - 'image/gif', + $mime, dbesc($img_str), 100, 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("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) { // 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=" . addslashes(rawurlencode(htmlspecialchars_decode($matches[2]))) . $matches[3]; } /** * @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); } diff --git a/showmore/showmore.php b/showmore/showmore.php index 2b4d5d0fc..096fd3f70 100755 --- a/showmore/showmore.php +++ b/showmore/showmore.php @@ -66,6 +66,33 @@ function showmore_addon_settings_post(&$a,&$b) { } } +function get_body_length($body) { + $string = trim($body); + + // We need to get rid of hidden tags (display: none) + + // Get rid of the warning. It would be better to have some valid html as input + $dom = @DomDocument::loadHTML($body); + $xpath = new DOMXPath($dom); + + /* + * Checking any possible syntax of the style attribute with xpath is impossible + * So we just get any element with a style attribute, and check them with a regexp + */ + $xr = $xpath->query('//*[@style]'); + foreach($xr as $node) { + if(preg_match('/.*display: *none *;.*/',$node->getAttribute('style'))) { + // Hidden, remove it from its parent + $node->parentNode->removeChild($node); + } + } + // Now we can get the body of our HTML DomDocument, it contains only what is visible + $string = $dom->saveHTML(); + + $string = strip_tags($string); + return strlen($string); +} + function showmore_prepare_body(&$a,&$b) { $words = null; @@ -76,7 +103,7 @@ function showmore_prepare_body(&$a,&$b) { if(!$chars) $chars = 1100; - if (strlen(strip_tags(trim($b['html']))) > $chars) { + if (get_body_length($b['html']) > $chars) { $found = true; $shortened = trim(showmore_cutitem($b['html'], $chars))."..."; } diff --git a/statusnet.tgz b/statusnet.tgz index 51390d305..a9fe97967 100755 Binary files a/statusnet.tgz and b/statusnet.tgz differ diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index 99e844752..b433f57b2 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" @@ -498,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/tumblr.tgz b/tumblr.tgz index 2a137b54f..fe0389554 100755 Binary files a/tumblr.tgz and b/tumblr.tgz differ diff --git a/tumblr/tumblr.php b/tumblr/tumblr.php index 03a67949b..eeb51348b 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); diff --git a/twitter.tgz b/twitter.tgz index 192d6f85d..ec5d55d5c 100755 Binary files a/twitter.tgz and b/twitter.tgz differ diff --git a/twitter/twitter.php b/twitter/twitter.php index 9984f3695..d55e3b73c 100755 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -209,7 +209,7 @@ function twitter_settings(&$a,&$s) { $s .= '
'; } } - $s .= '
'; + $s .= '
'; } @@ -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) { @@ -363,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));