X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=facebook%2Ffacebook.php;h=1afa996df08aab3163ce906f024acef65093bba3;hb=ced503973ade95bc6681c03503b8ac4fed9e87c3;hp=e433c98ef95a8b856315a7d30f569ff687982316;hpb=fc4250303b3c6f0e5113f9853a8072e944bfaac6;p=friendica-addons.git diff --git a/facebook/facebook.php b/facebook/facebook.php index e433c98e..1afa996d 100755 --- a/facebook/facebook.php +++ b/facebook/facebook.php @@ -53,10 +53,12 @@ * - Implement a configuration option to set the polling interval system-wide */ -define('FACEBOOK_MAXPOSTLEN', 420); +// Size of maximum post length increased +// see http://www.facebook.com/schrep/posts/203969696349811 +// define('FACEBOOK_MAXPOSTLEN', 420); +define('FACEBOOK_MAXPOSTLEN', 63206); define('FACEBOOK_SESSION_ERR_NOTIFICATION_INTERVAL', 259200); // 3 days - function facebook_install() { register_hook('post_local', 'addon/facebook/facebook.php', 'facebook_post_local'); register_hook('notifier_normal', 'addon/facebook/facebook.php', 'facebook_post_hook'); @@ -464,9 +466,21 @@ function facebook_content(&$a) { info( t('Updating contacts') . EOL); } - - $fb_installed = get_pconfig(local_user(),'facebook','post'); - + $o = ''; + + $fb_installed = false; + if (get_pconfig(local_user(),'facebook','post')) { + $access_token = get_pconfig(local_user(),'facebook','access_token'); + if ($access_token) { + $private_wall = intval(get_pconfig($uid,'facebook','private_wall')); + $s = fetch_url('https://graph.facebook.com/me/feed?access_token=' . $access_token); + if($s) { + $j = json_decode($s); + if (isset($j->data)) $fb_installed = true; + } + } + } + $appid = get_config('facebook','appid'); if(! $appid) { @@ -629,17 +643,39 @@ function facebook_plugin_settings(&$a,&$b) { function facebook_plugin_admin(&$a, &$o){ + $o = ''; - $activated = facebook_check_realtime_active(); - if ($activated) { - $o = t('Real-Time Updates are activated.') . '

'; - $o .= ''; - } else { - $o = t('Real-Time Updates not activated.') . '
'; + $o .= '

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

'; + + $appid = get_config('facebook', 'appid' ); + $appsecret = get_config('facebook', 'appsecret' ); + + $o .= '
'; + $o .= '
'; + $o .= ''; + + if ($appid && $appsecret) { + $o .= '

' . t('Real-Time Updates') . '

'; + + $activated = facebook_check_realtime_active(); + if ($activated) { + $o .= t('Real-Time Updates are activated.') . '

'; + $o .= ''; + } else { + $o .= t('Real-Time Updates not activated.') . '
'; + } } } function facebook_plugin_admin_post(&$a, &$o){ + check_form_security_token_redirectOnErr('/admin/plugins/facebook', 'fbsave'); + + if (x($_REQUEST,'fb_save_keys')) { + set_config('facebook', 'appid', $_REQUEST['appid']); + set_config('facebook', 'appsecret', $_REQUEST['appsecret']); + del_config('facebook', 'app_access_token'); + info(t('The new values have been saved.')); + } if (x($_REQUEST,'real_time_activate')) { facebook_subscription_add_users(); } @@ -673,6 +709,7 @@ function facebook_post_hook(&$a,&$b) { */ require_once('include/group.php'); + require_once('include/html2plain.php'); logger('Facebook post'); @@ -793,7 +830,8 @@ function facebook_post_hook(&$a,&$b) { if($b['verb'] == ACTIVITY_DISLIKE) $msg = trim(strip_tags(bbcode($msg))); - $search_str = $a->get_baseurl() . '/search'; + // Old code + /*$search_str = $a->get_baseurl() . '/search'; if(preg_match("/\[url=(.*?)\](.*?)\[\/url\]/is",$msg,$matches)) { @@ -822,24 +860,83 @@ function facebook_post_hook(&$a,&$b) { if((strpos($link,z_root()) !== false) && (! $image)) $image = $a->get_baseurl() . '/images/friendica-64.jpg'; - $msg = trim(strip_tags(bbcode($msg))); + $msg = trim(strip_tags(bbcode($msg)));*/ + + // New code + + // 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]; + + // Checking for a bookmark element + $body = $b['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 the bookmark and all quotes after the bookmark + // they are mostly only the content after the bookmark. + $body2 = preg_replace("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism",'',$body2); + $body2 = preg_replace("/\[quote\=([^\]]*)\](.*?)\[\/quote\]/ism",'',$body2); + $body2 = preg_replace("/\[quote\](.*?)\[\/quote\]/ism",'',$body2); + + $body = $body1.$body2; + } + + // At first convert the text to html + $html = bbcode($body); + + // Then convert it to plain text + $msg = trim($b['title']." \n\n".html2plain($html, 0, true)); $msg = html_entity_decode($msg,ENT_QUOTES,'UTF-8'); - // add any attachments as text urls + // Removing multiple newlines + while (strpos($msg, "\n\n\n") !== false) + $msg = str_replace("\n\n\n", "\n\n", $msg); - $arr = explode(',',$b['attach']); + // add any attachments as text urls + $arr = explode(',',$b['attach']); - if(count($arr)) { + if(count($arr)) { $msg .= "\n"; - foreach($arr as $r) { - $matches = false; + foreach($arr as $r) { + $matches = false; $cnt = preg_match('|\[attach\]href=\"(.*?)\" size=\"(.*?)\" type=\"(.*?)\" title=\"(.*?)\"\[\/attach\]|',$r,$matches); if($cnt) { - $msg .= $matches[1]; + $msg .= "\n".$matches[1]; } } } + $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]; + } + + // 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); + } + } + + // Remove trailing and leading spaces + $msg = trim($msg); + + // Since facebook increased the maxpostlen massively this never should happen again :) if (strlen($msg) > FACEBOOK_MAXPOSTLEN) { $shortlink = ""; require_once('library/slinky.php'); @@ -857,7 +954,19 @@ function facebook_post_hook(&$a,&$b) { $msg = substr($msg, 0, FACEBOOK_MAXPOSTLEN - strlen($shortlink) - 4); $msg .= '... ' . $shortlink; } - if(! strlen($msg)) + + // Fallback - if message is empty + if(!strlen($msg)) + $msg = $linkname; + + if(!strlen($msg)) + $msg = $link; + + if(!strlen($msg)) + $msg = $image; + + // If there is nothing to post then exit + if(!strlen($msg)) return; logger('Facebook post: msg=' . $msg, LOGGER_DATA); @@ -937,6 +1046,9 @@ function facebook_post_hook(&$a,&$b) { 'language' => $r[0]['language'], 'to_name' => $r[0]['username'], 'to_email' => $r[0]['email'], + 'source_name' => t('Administrator'), + 'source_link' => $a->config["system"]["url"], + 'source_photo' => $a->config["system"]["url"] . '/images/person-80.jpg', )); set_pconfig($b['uid'], 'facebook', 'session_expired_mailsent', time()); @@ -1418,8 +1530,8 @@ function fb_get_app_access_token() { logger('fb_get_app_access_token: appid and/or appsecret not set', LOGGER_DEBUG); return false; } - - $x = fetch_url('https://graph.facebook.com/oauth/access_token?client_id=' . $appid . '&client_secret=' . $appsecret . "&grant_type=client_credentials"); + logger('https://graph.facebook.com/oauth/access_token?client_id=' . $appid . '&client_secret=' . $appsecret . '&grant_type=client_credentials', LOGGER_DATA); + $x = fetch_url('https://graph.facebook.com/oauth/access_token?client_id=' . $appid . '&client_secret=' . $appsecret . '&grant_type=client_credentials'); if(strpos($x,'access_token=') !== false) { logger('fb_get_app_access_token: returned access token: ' . $x, LOGGER_DATA); @@ -1450,8 +1562,7 @@ function facebook_subscription_del_users() { del_config('facebook', 'realtime_active'); } -function facebook_subscription_add_users() { - +function facebook_subscription_add_users($second_try = false) { $a = get_app(); $access_token = fb_get_app_access_token(); @@ -1472,9 +1583,18 @@ function facebook_subscription_add_users() { del_config('facebook', 'cb_verify_token'); if ($j) { + $x = json_decode($j); logger("Facebook reponse: " . $j, LOGGER_DATA); - - if (facebook_check_realtime_active()) set_config('facebook', 'realtime_active', 1); + if (isset($x->error)) { + logger('facebook_subscription_add_users: got an error: ' . $j); + if ($x->error->type == "OAuthException" && $x->error->code == 190) { + del_config('facebook', 'app_access_token'); + if ($second_try === false) facebook_subscription_add_users(true); + } + } else { + logger('facebook_subscription_add_users: sucessful'); + if (facebook_check_realtime_active()) set_config('facebook', 'realtime_active', 1); + } }; } @@ -1588,4 +1708,4 @@ function facebook_delete_url($url,$headers = null, &$redirects = 0, $timeout = 0 curl_close($ch); return($body); -}} \ No newline at end of file +}}