X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=fromgplus%2Ffromgplus.php;h=4c96892c662d94efd9ff9cdee6ee5742bc3c94d9;hb=5fb7ef40fd9861a8011cfb01dc0dbd4d1d6046f6;hp=9fc13c5ec97e8bad1946831d7cf9a5514d938ae7;hpb=70fa10bf6496475a2de58a05a904a7063af625b5;p=friendica-addons.git diff --git a/fromgplus/fromgplus.php b/fromgplus/fromgplus.php index 9fc13c5e..4c96892c 100644 --- a/fromgplus/fromgplus.php +++ b/fromgplus/fromgplus.php @@ -9,16 +9,23 @@ define('FROMGPLUS_DEFAULT_POLL_INTERVAL', 30); // given in minutes +require_once('mod/share.php'); +require_once('mod/parse_url.php'); + function fromgplus_install() { - register_hook('plugin_settings', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings'); - register_hook('plugin_settings_post', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings_post'); + register_hook('connector_settings', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings'); + register_hook('connector_settings_post', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings_post'); register_hook('cron', 'addon/fromgplus/fromgplus.php', 'fromgplus_cron'); } function fromgplus_uninstall() { + unregister_hook('connector_settings', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings'); + unregister_hook('connector_settings_post', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings_post'); + unregister_hook('cron', 'addon/fromgplus/fromgplus.php', 'fromgplus_cron'); + + // Old hooks unregister_hook('plugin_settings', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings'); unregister_hook('plugin_settings_post', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings_post'); - unregister_hook('cron', 'addon/fromgplus/fromgplus.php', 'fromgplus_cron'); } function fromgplus_addon_settings(&$a,&$s) { @@ -26,11 +33,23 @@ function fromgplus_addon_settings(&$a,&$s) { if(! local_user()) return; + // If "gpluspost" is installed as well, then the settings are displayed there + $result = q("SELECT `installed` FROM `addon` WHERE `name` = 'gpluspost' AND `installed`"); + if (count($result) > 0) + return; + $enable_checked = (intval(get_pconfig(local_user(),'fromgplus','enable')) ? ' checked="checked"' : ''); + $keywords_checked = (intval(get_pconfig(local_user(), 'fromgplus', 'keywords')) ? ' checked="checked"' : ''); $account = get_pconfig(local_user(),'fromgplus','account'); - $s .= '
'; - $s .= '

' . t('Google+ Import Settings').'

'; + $s .= ''; + $s .= '

'. t('Google+ Mirror').'

'; + $s .= '
'; + $s .= ''; $s .= '
'; return; @@ -56,10 +78,31 @@ function fromgplus_addon_settings_post(&$a,&$b) { set_pconfig(local_user(),'fromgplus','account',trim($_POST['fromgplus-account'])); $enable = ((x($_POST,'fromgplus-enable')) ? intval($_POST['fromgplus-enable']) : 0); set_pconfig(local_user(),'fromgplus','enable', $enable); + $keywords = ((x($_POST, 'fromgplus-keywords')) ? intval($_POST['fromgplus-keywords']) : 0); + set_pconfig(local_user(),'fromgplus', 'keywords', $keywords); + + if (!$enable) + del_pconfig(local_user(),'fromgplus','lastdate'); + info( t('Google+ Import Settings saved.') . EOL); } } +function fromgplus_plugin_admin(&$a, &$o){ + $t = get_markup_template("admin.tpl", "addon/fromgplus/"); + + $o = replace_macros($t, array( + '$submit' => t('Save Settings'), + '$key' => array('key', t('Key'), trim(get_config('fromgplus', 'key')), t('')), + )); +} + +function fromgplus_plugin_admin_post(&$a){ + $key = ((x($_POST,'key')) ? trim($_POST['key']) : ''); + set_config('fromgplus','key',$key); + info( t('Settings updated.'). EOL ); +} + function fromgplus_cron($a,$b) { $last = get_config('fromgplus','last_poll'); @@ -93,10 +136,14 @@ function fromgplus_cron($a,$b) { set_config('fromgplus','last_poll', time()); } -function fromgplus_post($a, $uid, $source, $body, $location) { +function fromgplus_post($a, $uid, $source, $body, $location, $coord, $id) { //$uid = 2; + // Don't know what it is. Maybe some trash from the mobile client + $trash = html_entity_decode("", ENT_QUOTES, 'UTF-8'); + $body = str_replace($trash, "", $body); + $body = trim($body); if (substr($body, 0, 3) == "[b]") { @@ -115,6 +162,10 @@ function fromgplus_post($a, $uid, $source, $body, $location) { $_REQUEST['profile_uid'] = $uid; $_REQUEST['source'] = $source; + $_REQUEST['extid'] = NETWORK_GPLUS; + + if (isset($id)) + $_REQUEST['message_id'] = NETWORK_GPLUS.":".$id; // $_REQUEST['verb'] // $_REQUEST['parent'] @@ -123,6 +174,7 @@ function fromgplus_post($a, $uid, $source, $body, $location) { $_REQUEST['title'] = $title; $_REQUEST['body'] = $body; $_REQUEST['location'] = $location; + $_REQUEST['coord'] = $coord; if (($_REQUEST['title'] == "") AND ($_REQUEST['body'] == "")) { logger('fromgplus: empty post for user '.$uid." ".print_r($_REQUEST, true)); @@ -172,14 +224,15 @@ function fromgplus_parse_query($var) } function fromgplus_cleanupgoogleproxy($fullImage, $image) { + //$preview = "/w".$fullImage->width."-h".$fullImage->height."/"; + //$preview2 = "/w".$fullImage->width."-h".$fullImage->height."-p/"; + //$fullImage = str_replace(array($preview, $preview2), array("/", "/"), $fullImage->url); + $fullImage = $fullImage->url; - $preview = "/w".$fullImage->width."-h".$fullImage->height."/"; - $preview2 = "/w".$fullImage->width."-h".$fullImage->height."-p/"; - $fullImage = str_replace(array($preview, $preview2), array("/", "/"), $fullImage->url); - - $preview = "/w".$image->width."-h".$image->height."/"; - $preview2 = "/w".$image->width."-h".$image->height."-p/"; - $image = str_replace(array($preview, $preview2), array("/", "/"), $image->url); + //$preview = "/w".$image->width."-h".$image->height."/"; + //$preview2 = "/w".$image->width."-h".$image->height."-p/"; + //$image = str_replace(array($preview, $preview2), array("/", "/"), $image->url); + $image = $image->url; $cleaned = array(); @@ -204,7 +257,23 @@ function fromgplus_cleanupgoogleproxy($fullImage, $image) { $cleaned["preview"] = ""; } - if ($cleaned["full"] == $cleaned["preview"]) + if ($cleaned["full"] != "") + $infoFull = get_photo_info($cleaned["full"]); + else + $infoFull = array("0" => 0, "1" => 0); + + if ($cleaned["preview"] != "") + $infoPreview = get_photo_info($cleaned["preview"]); + else + $infoFull = array("0" => 0, "1" => 0); + + if (($infoPreview[0] >= $infoFull[0]) AND ($infoPreview[1] >= $infoFull[1])) { + $temp = $cleaned["full"]; + $cleaned["full"] = $cleaned["preview"]; + $cleaned["preview"] = $temp; + } + + if (($cleaned["full"] == $cleaned["preview"]) OR (($infoPreview[0] == $infoFull[0]) AND ($infoPreview[1] == $infoFull[1]))) $cleaned["preview"] = ""; if ($cleaned["full"] == "") @@ -213,97 +282,151 @@ function fromgplus_cleanupgoogleproxy($fullImage, $image) { if ($cleaned["full"] == "") if (@exif_imagetype($image) != 0) - $cleaned["full"] = $fullImage; + $cleaned["full"] = $image; + + // Could be changed in the future to a link to the album + $cleaned["page"] = $cleaned["full"]; return($cleaned); } function fromgplus_cleantext($text) { + + // Don't know what it is. But it is added to the text. + $trash = html_entity_decode("", ENT_QUOTES, 'UTF-8'); + $text = strip_tags($text); - $text = html_entity_decode($text); + $text = html_entity_decode($text, ENT_QUOTES); $text = trim($text); - $text = str_replace(array("\n", "\r", " "), array("", "", ""), $text); + $text = str_replace(array("\n", "\r", " ", $trash), array("", "", "", ""), $text); return($text); } -function fromgplus_handleattachments($item, $displaytext) { +function fromgplus_handleattachments($a, $uid, $item, $displaytext, $shared) { + require_once("include/Photo.php"); + require_once("include/items.php"); + require_once("include/network.php"); + $post = ""; $quote = ""; + $pagedata = array(); + $pagedata["type"] = ""; foreach ($item->object->attachments as $attachment) { switch($attachment->objectType) { case "video": - $post .= "\n\n[bookmark=".$attachment->url."]".fromgplus_html2bbcode($attachment->displayName)."[/bookmark]\n"; - - /*$images = cleanupgoogleproxy($attachment->fullImage, $attachment->image); - if ($images["preview"] != "") - $post .= "\n[url=".$images["full"]."][img]".$images["preview"]."[/img][/url]\n"; - elseif ($images["full"] != "") - $post .= "\n[img]".$images["full"]."[/img]\n";*/ - + $pagedata["type"] = "video"; + $pagedata["url"] = original_url($attachment->url); + $pagedata["title"] = fromgplus_html2bbcode($attachment->displayName); break; case "article": - $post .= "\n\n[bookmark=".$attachment->url."]".fromgplus_html2bbcode($attachment->displayName)."[/bookmark]\n"; + $pagedata["type"] = "link"; + $pagedata["url"] = original_url($attachment->url); + $pagedata["title"] = fromgplus_html2bbcode($attachment->displayName); $images = fromgplus_cleanupgoogleproxy($attachment->fullImage, $attachment->image); - //if ($images["preview"] != "") - // $post .= "\n[url=".$images["full"]."][img]".$images["preview"]."[/img][/url]\n"; - //elseif ($images["full"] != "") - // $post .= "\n[img]".$images["full"]."[/img]\n"; if ($images["full"] != "") - $post .= "\n[img]".$images["full"]."[/img]\n"; + $pagedata["images"][0]["src"] = $images["full"]; - //$post .= "[quote]".trim(fromgplus_html2bbcode($attachment->content))."[/quote]"; $quote = trim(fromgplus_html2bbcode($attachment->content)); + if ($quote != "") - $quote = "\n[quote]".$quote."[/quote]"; + $pagedata["text"] = $quote; + + // Add Keywords to page link + $data = parseurl_getsiteinfo_cached($pagedata["url"], true); + if (isset($data["keywords"]) AND get_pconfig($uid, 'fromgplus', 'keywords')) { + $pagedata["keywords"] = $data["keywords"]; + } break; case "photo": - $images = fromgplus_cleanupgoogleproxy($attachment->fullImage, $attachment->image); - if ($images["preview"] != "") - $post .= "\n[url=".$images["full"]."][img]".$images["preview"]."[/img][/url]\n"; - elseif ($images["full"] != "") + // Don't store shared pictures in your wall photos (to prevent a possible violating of licenses) + if ($shared) + $images = fromgplus_cleanupgoogleproxy($attachment->fullImage, $attachment->image); + else { + if ($attachment->fullImage->url != "") + $images = store_photo($a, $uid, "", $attachment->fullImage->url); + elseif ($attachment->image->url != "") + $images = store_photo($a, $uid, "", $attachment->image->url); + } + + if ($images["preview"] != "") { + $post .= "\n[url=".$images["page"]."][img]".$images["preview"]."[/img][/url]\n"; + $pagedata["images"][0]["src"] = $images["preview"]; + $pagedata["url"] = $images["page"]; + } elseif ($images["full"] != "") { $post .= "\n[img]".$images["full"]."[/img]\n"; + $pagedata["images"][0]["src"] = $images["full"]; + + if ($images["preview"] != "") + $pagedata["images"][1]["src"] = $images["preview"]; + } - if (($attachment->displayName != "") AND (fromgplus_cleantext($attachment->displayName) != fromgplus_cleantext($displaytext))) + if (($attachment->displayName != "") AND (fromgplus_cleantext($attachment->displayName) != fromgplus_cleantext($displaytext))) { $post .= fromgplus_html2bbcode($attachment->displayName)."\n"; + $pagedata["title"] = fromgplus_html2bbcode($attachment->displayName); + } break; case "photo-album": - $post .= "\n\n[bookmark=".$attachment->url."]".fromgplus_html2bbcode($attachment->displayName)."[/bookmark]\n"; + $pagedata["url"] = original_url($attachment->url); + $pagedata["title"] = fromgplus_html2bbcode($attachment->displayName); + $post .= "\n\n[bookmark=".$pagedata["url"]."]".$pagedata["title"]."[/bookmark]\n"; $images = fromgplus_cleanupgoogleproxy($attachment->fullImage, $attachment->image); - if ($images["preview"] != "") + + if ($images["preview"] != "") { $post .= "\n[url=".$images["full"]."][img]".$images["preview"]."[/img][/url]\n"; - elseif ($images["full"] != "") + $pagedata["images"][0]["src"] = $images["preview"]; + $pagedata["url"] = $images["full"]; + } elseif ($images["full"] != "") { $post .= "\n[img]".$images["full"]."[/img]\n"; + $pagedata["images"][0]["src"] = $images["full"]; + if ($images["preview"] != "") + $pagedata["images"][1]["src"] = $images["preview"]; + } break; case "album": - foreach($attachment->thumbnails as $thumb) { - $preview = "/w".$thumb->image->width."-h".$thumb->image->height."/"; - $preview2 = "/w".$thumb->image->width."-h".$thumb->image->height."-p/"; - $image = str_replace(array($preview, $preview2), array("/", "/"), $thumb->image->url); + $pagedata["type"] = "link"; + $pagedata["url"] = original_url($attachment->url); + $pagedata["title"] = fromgplus_html2bbcode($attachment->displayName); + + $thumb = $attachment->thumbnails[0]; + $pagedata["images"][0]["src"] = $thumb->image->url; + + $quote = trim(fromgplus_html2bbcode($thumb->description)); + if ($quote != "") + $pagedata["text"] = $quote; - $post .= "\n[url=".$thumb->url."][img]".$image."[/img][/url]\n"; - } break; + case "audio": - $post .= "\n\n[bookmark=".$attachment->url."]".fromgplus_html2bbcode($attachment->displayName)."[/bookmark]\n"; + $pagedata["url"] = original_url($attachment->url); + $pagedata["title"] = fromgplus_html2bbcode($attachment->displayName); + $post .= "\n\n[bookmark=".$pagedata["url"]."]".$pagedata["title"]."[/bookmark]\n"; break; + //default: // die($attachment->objectType); } } + + if ($pagedata["type"] != "") + return(add_page_info_data($pagedata)); + return($post.$quote); } function fromgplus_fetch($a, $uid) { $maxfetch = 20; + // Special blank to identify postings from the googleplus connector + $blank = html_entity_decode(" ", ENT_QUOTES, 'UTF-8'); + $account = get_pconfig($uid,'fromgplus','account'); $key = get_config('fromgplus','key'); @@ -315,6 +438,8 @@ function fromgplus_fetch($a, $uid) { $initiallastdate = get_pconfig($uid,'fromgplus','lastdate'); + $first_time = ($initiallastdate == ""); + $lastdate = 0; if (!is_array($activities->items)) @@ -323,46 +448,78 @@ function fromgplus_fetch($a, $uid) { $reversed = array_reverse($activities->items); foreach($reversed as $item) { + if (strtotime($item->published) <= $initiallastdate) continue; + // Don't publish items that are too young + if (strtotime($item->published) > (time() - 3*60)) { + logger('fromgplus_fetch: item too new '.$item->published); + continue; + } + if ($lastdate < strtotime($item->published)) $lastdate = strtotime($item->published); - if ($item->access->description == "Public") + set_pconfig($uid,'fromgplus','lastdate', $lastdate); + + if ($first_time) + continue; + + if ($item->access->description == "Public") { + + // Loop prevention through the special blank from the googleplus connector + //if (strstr($item->object->content, $blank)) + if (strrpos($item->object->content, $blank) >= strlen($item->object->content) - 5) + continue; + switch($item->object->objectType) { case "note": $post = fromgplus_html2bbcode($item->object->content); if (is_array($item->object->attachments)) - $post .= fromgplus_handleattachments($item, $item->object->content); + $post .= fromgplus_handleattachments($a, $uid, $item, $item->object->content, false); + + $coord = ""; + $location = ""; + if (isset($item->location)) { + if (isset($item->location->address->formatted)) + $location = $item->location->address->formatted; + + if (isset($item->location->displayName)) + $location = $item->location->displayName; - // geocode, placeName - if (isset($item->address)) + if (isset($item->location->position->latitude) AND + isset($item->location->position->longitude)) + $coord = $item->location->position->latitude." ".$item->location->position->longitude; + + } elseif (isset($item->address)) $location = $item->address; - else - $location = ""; - // Loop prevention - should be made better - if ($item->provider->title != "HootSuite") - fromgplus_post($a, $uid, "Google+", $post, $location); - //fromgplus_post($a, $uid, $item->provider->title, $post, $location); + fromgplus_post($a, $uid, $item->provider->title, $post, $location, $coord, $item->id); break; case "activity": $post = fromgplus_html2bbcode($item->annotation)."\n"; - if (intval(get_config('system','new_share'))) { - $post .= "[share author='".str_replace("'", "'",$item->object->actor->displayName). - "' profile='".$item->object->actor->url. - "' avatar='".$item->object->actor->image->url. - "' link='".$item->object->url."']"; + if (!intval(get_config('system','old_share'))) { + + if (function_exists("share_header")) + $post .= share_header($item->object->actor->displayName, $item->object->actor->url, + $item->object->actor->image->url, "", + datetime_convert('UTC','UTC',$item->object->published),$item->object->url); + else + $post .= "[share author='".str_replace("'", "'",$item->object->actor->displayName). + "' profile='".$item->object->actor->url. + "' avatar='".$item->object->actor->image->url. + "' posted='".datetime_convert('UTC','UTC',$item->object->published). + "' link='".$item->object->url."']"; $post .= fromgplus_html2bbcode($item->object->content); if (is_array($item->object->attachments)) - $post .= "\n".trim(fromgplus_handleattachments($item, $item->object->content)); + $post .= "\n".trim(fromgplus_handleattachments($a, $uid, $item, $item->object->content, true)); $post .= "[/share]"; } else { @@ -371,40 +528,30 @@ function fromgplus_fetch($a, $uid) { $post .= fromgplus_html2bbcode($item->object->content); if (is_array($item->object->attachments)) - $post .= "\n".trim(fromgplus_handleattachments($item, $item->object->content)); + $post .= "\n".trim(fromgplus_handleattachments($a, $uid, $item, $item->object->content, true)); } - if (isset($item->address)) + $coord = ""; + $location = ""; + if (isset($item->location)) { + if (isset($item->location->address->formatted)) + $location = $item->location->address->formatted; + + if (isset($item->location->displayName)) + $location = $item->location->displayName; + + if (isset($item->location->position->latitude) AND + isset($item->location->position->longitude)) + $coord = $item->location->position->latitude." ".$item->location->position->longitude; + + } elseif (isset($item->address)) $location = $item->address; - else - $location = ""; - // Loop prevention - should be made better - if ($item->provider->title != "HootSuite") - fromgplus_post($a, $uid, "Google+", $post, $location); - //fromgplus_post($a, $uid, $item->provider->title, $post, $location); + fromgplus_post($a, $uid, $item->provider->title, $post, $location, $coord, $item->id); break; } + } } if ($lastdate != 0) set_pconfig($uid,'fromgplus','lastdate', $lastdate); } - -/* -// Test -require_once("boot.php"); - -if(@is_null($a)) { - $a = new App; -} - -if(@is_null($db)) { - @include(".htconfig.php"); - require_once("include/dba.php"); - $db = new dba($db_host, $db_user, $db_pass, $db_data); - unset($db_host, $db_user, $db_pass, $db_data); -}; - -$test = array(); -fromgplus_cron($a, $test); -*/