]> git.mxchange.org Git - friendica-addons.git/commitdiff
fbpost: using the same text formatting functionality like other addons
authorMichael Vogel <icarus@dabo.de>
Sun, 20 Oct 2013 13:16:37 +0000 (15:16 +0200)
committerMichael Vogel <icarus@dabo.de>
Sun, 20 Oct 2013 13:16:37 +0000 (15:16 +0200)
fbpost/fbpost.php

index 6a0eb1973dabaeadd8bf66fb5fe7ab1cf3c3c2fa..715f10872870545a43133273a1c850adf7d2979a 100644 (file)
@@ -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 = '<input type="hidden" name="form_security_token" value="' . get_form_security_token("fbsave") . '">';
-       
+
        $o .= '<h4>' . t('Facebook API Key') . '</h4>';
-       
+
        $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.<br><br>');
-       
+
        $o .= '<label for="fb_appid">' . t('App-ID / API-Key') . '</label><input id="fb_appid" name="appid" type="text" value="' . escape_tags($appid ? $appid : "") . '"><br style="clear: both;">';
        $o .= '<label for="fb_appsecret">' . t('Application secret') . '</label><input id="fb_appsecret" name="appsecret" type="text" value="' . escape_tags($appsecret ? $appsecret : "") . '"><br style="clear: both;">';
 
        $o .= '<input type="submit" name="fb_save_keys" value="' . t('Save') . '">';
-       
+
 }
 
 /**
@@ -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("&#x2672; ", 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,