From 612f2a4d21de314ffb100fa748d53eecc4766c6c Mon Sep 17 00:00:00 2001 From: Michael Vogel Date: Sun, 20 Oct 2013 15:16:37 +0200 Subject: [PATCH] fbpost: using the same text formatting functionality like other addons --- fbpost/fbpost.php | 159 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 145 insertions(+), 14 deletions(-) diff --git a/fbpost/fbpost.php b/fbpost/fbpost.php index 6a0eb197..715f1087 100644 --- a/fbpost/fbpost.php +++ b/fbpost/fbpost.php @@ -184,7 +184,7 @@ function fbpost_content(&$a) { } $o = ''; - + $fb_installed = false; if (get_pconfig(local_user(),'facebook','post')) { $access_token = get_pconfig(local_user(),'facebook','access_token'); @@ -196,7 +196,7 @@ function fbpost_content(&$a) { } } } - + $appid = get_config('facebook','appid'); if(! $appid) { @@ -306,21 +306,21 @@ function fbpost_plugin_admin(&$a, &$o){ $o = ''; - + $o .= '

' . t('Facebook API Key') . '

'; - + $appid = get_config('facebook', 'appid' ); $appsecret = get_config('facebook', 'appsecret' ); - + $ret1 = q("SELECT `v` FROM `config` WHERE `cat` = 'facebook' AND `k` = 'appid' LIMIT 1"); $ret2 = q("SELECT `v` FROM `config` WHERE `cat` = 'facebook' AND `k` = 'appsecret' LIMIT 1"); if ((count($ret1) > 0 && $ret1[0]['v'] != $appid) || (count($ret2) > 0 && $ret2[0]['v'] != $appsecret)) $o .= t('Error: it appears that you have specified the App-ID and -Secret in your .htconfig.php file. As long as they are specified there, they cannot be set using this form.

'); - + $o .= '
'; $o .= '
'; $o .= ''; - + } /** @@ -329,7 +329,7 @@ function fbpost_plugin_admin(&$a, &$o){ function fbpost_plugin_admin_post(&$a){ check_form_security_token_redirectOnErr('/admin/plugins/fbpost', 'fbsave'); - + if (x($_REQUEST,'fb_save_keys')) { set_config('facebook', 'appid', $_REQUEST['appid']); set_config('facebook', 'appsecret', $_REQUEST['appsecret']); @@ -357,6 +357,131 @@ function fbpost_jot_nets(&$a,&$b) { } } +function fbpost_createmsg($b) { + require_once("include/bbcode.php"); + require_once("include/html2plain.php"); + + // Looking for the first image + $image = ''; + if(preg_match("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/is",$b['body'],$matches)) + $image = $matches[3]; + + if ($image == '') + if(preg_match("/\[img\](.*?)\[\/img\]/is",$b['body'],$matches)) + $image = $matches[1]; + + $multipleimages = (strpos($b['body'], "[img") != strrpos($b['body'], "[img")); + + // 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); + + $body = $b["body"]; + if ($b["title"] != "") + $body = $b["title"]."\n\n".$body; + + if (strpos($body, "[bookmark") !== false) { + // splitting the text in two parts: + // before and after the bookmark + $pos = strpos($body, "[bookmark"); + $body1 = substr($body, 0, $pos); + $body2 = substr($body, $pos); + + // Removing all quotes after the bookmark + // they are mostly only the content after the bookmark. + $body2 = preg_replace("/\[quote\=([^\]]*)\](.*?)\[\/quote\]/ism",'',$body2); + $body2 = preg_replace("/\[quote\](.*?)\[\/quote\]/ism",'',$body2); + + $pos2 = strpos($body2, "[/bookmark]"); + if ($pos2) + $body2 = substr($body2, $pos2 + 11); + + $body = $body1.$body2; + } + + // Add some newlines so that the message could be cut better + $body = str_replace(array("[quote", "[bookmark", "[/bookmark]", "[/quote]"), + array("\n[quote", "\n[bookmark", "[/bookmark]\n", "[/quote]\n"), $body); + + // remove the recycle signs and the names since they aren't helpful on twitter + // $recycle = html_entity_decode("♲ ", ENT_QUOTES, 'UTF-8'); + // $body = preg_replace( '/'.$recycle.'\[url\=(\w+.*?)\](\w+.*?)\[\/url\]/i', "\n", $body); + + // At first convert the text to html + $html = bbcode($body, false, false, 2); + + // Then convert it to plain text + //$msg = trim($b['title']." \n\n".html2plain($html, 0, true)); + $msg = trim(html2plain($html, 0, true)); + $msg = html_entity_decode($msg,ENT_QUOTES,'UTF-8'); + + // Removing multiple newlines + while (strpos($msg, "\n\n\n") !== false) + $msg = str_replace("\n\n\n", "\n\n", $msg); + + // Removing multiple spaces + while (strpos($msg, " ") !== false) + $msg = str_replace(" ", " ", $msg); + + // Removing URLs + $msg = preg_replace('/(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/i', "", $msg); + + $msg = trim($msg); + + $link = ''; + $linkname = ''; + // look for bookmark-bbcode and handle it with priority + if(preg_match("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/is",$b['body'],$matches)) { + $link = $matches[1]; + $linkname = $matches[2]; + } + + $multiplelinks = (strpos($b['body'], "[bookmark") != strrpos($b['body'], "[bookmark")); + + if ($multiplelinks) + $linkname = ''; + + // If there is no bookmark element then take the first link + if ($link == '') { + $links = collecturls($html); + if (sizeof($links) > 0) { + reset($links); + $link = current($links); + } + $multiplelinks = (sizeof($links) > 1); + } + + $msglink = ""; + if ($multiplelinks) + $msglink = $b["plink"]; + else if ($link != "") + $msglink = $link; + else if ($multipleimages) + $msglink = $b["plink"]; + else if ($image != "") + $msglink = $image; + + // Removing multiple spaces - again + while (strpos($msg, " ") !== false) + $msg = str_replace(" ", " ", $msg); + + if ($msglink != "") { + // Looking if the link points to an image + $img_str = fetch_url($msglink); + + $tempfile = tempnam(get_config("system","temppath"), "cache"); + file_put_contents($tempfile, $img_str); + $mime = image_type_to_mime_type(exif_imagetype($tempfile)); + unlink($tempfile); + } else + $mime = ""; + + if (($image == $msglink) OR (substr($mime, 0, 6) == "image/")) + return(array("msg"=>trim($msg), "link"=>"", "linkname"=>$linkname, "image"=>$msglink)); + else + return(array("msg"=>trim($msg), "link"=>$msglink, "linkname"=>$linkname,"image"=>$image)); +} + /** * @param App $a * @param object $b @@ -502,7 +627,7 @@ function fbpost_post_hook(&$a,&$b) { // if($b['verb'] == ACTIVITY_DISLIKE) // $msg = trim(strip_tags(bbcode($msg))); - +/* // Looking for the first image $image = ''; if(preg_match("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/is",$b['body'],$matches)) @@ -592,6 +717,12 @@ function fbpost_post_hook(&$a,&$b) { // Remove trailing and leading spaces $msg = trim($msg); +*/ + $msgarr = fbpost_createmsg($b); + $msg = $msgarr["msg"]; + $link = $msgarr["link"]; + $image = $msgarr["image"]; + $linkname = $msgarr["linkname"]; // Fallback - if message is empty if(!strlen($msg)) @@ -615,11 +746,11 @@ function fbpost_post_hook(&$a,&$b) { $postvars = array('access_token' => $fb_token); } else { // message, picture, link, name, caption, description, source, place, tags - if(trim($link) != "") - if (@exif_imagetype($link) != 0) { - $image = $link; - $link = ""; - } + //if(trim($link) != "") + // if (@exif_imagetype($link) != 0) { + // $image = $link; + // $link = ""; + // } $postvars = array( 'access_token' => $fb_token,