app.net, facebook, twitter and statusnet: Preview now shows the post like it will appear on other networks.

This commit is contained in:
Michael Vogel 2014-07-09 22:31:52 +02:00
parent f0efa3cae2
commit 9177ee2ecb
5 changed files with 166 additions and 4 deletions

View file

@ -23,6 +23,7 @@ function appnet_install() {
register_hook('cron', 'addon/appnet/appnet.php', 'appnet_cron'); register_hook('cron', 'addon/appnet/appnet.php', 'appnet_cron');
register_hook('connector_settings', 'addon/appnet/appnet.php', 'appnet_settings'); register_hook('connector_settings', 'addon/appnet/appnet.php', 'appnet_settings');
register_hook('connector_settings_post','addon/appnet/appnet.php', 'appnet_settings_post'); register_hook('connector_settings_post','addon/appnet/appnet.php', 'appnet_settings_post');
register_hook('prepare_body', 'addon/appnet/appnet.php', 'appnet_prepare_body');
} }
@ -33,6 +34,7 @@ function appnet_uninstall() {
unregister_hook('cron', 'addon/appnet/appnet.php', 'appnet_cron'); unregister_hook('cron', 'addon/appnet/appnet.php', 'appnet_cron');
unregister_hook('connector_settings', 'addon/appnet/appnet.php', 'appnet_settings'); unregister_hook('connector_settings', 'addon/appnet/appnet.php', 'appnet_settings');
unregister_hook('connector_settings_post', 'addon/appnet/appnet.php', 'appnet_settings_post'); unregister_hook('connector_settings_post', 'addon/appnet/appnet.php', 'appnet_settings_post');
unregister_hook('prepare_body', 'addon/appnet/appnet.php', 'appnet_prepare_body');
} }
function appnet_module() {} function appnet_module() {}
@ -1174,6 +1176,43 @@ function appnet_fetchcontact($a, $uid, $contact, $me, $create_user) {
return($r[0]["id"]); return($r[0]["id"]);
} }
function appnet_prepare_body(&$a,&$b) {
if ($b["item"]["network"] != NETWORK_APPNET)
return;
if ($b["preview"]) {
$max_char = 256;
require_once("include/plaintext.php");
$item = $b["item"];
$item["plink"] = $a->get_baseurl()."/display/".$a->user["nickname"]."/".$item["parent"];
$r = q("SELECT `author-link` FROM item WHERE item.uri = '%s' AND item.uid = %d LIMIT 1",
dbesc($item["thr-parent"]),
intval(local_user()));
if(count($r)) {
$orig_post = $r[0];
$nicknameplain = preg_replace("=https?://alpha.app.net/(.*)=ism", "$1", $orig_post["author-link"]);
$nickname = "@[url=".$orig_post["author-link"]."]".$nicknameplain."[/url]";
$nicknameplain = "@".$nicknameplain;
if ((strpos($item["body"], $nickname) === false) AND (strpos($item["body"], $nicknameplain) === false))
$item["body"] = $nickname." ".$item["body"];
}
$msgarr = plaintext($a, $item, $max_char, true);
$msg = appnet_create_entities($a, $item, $msgarr);
require_once("library/markdown.php");
$msg = Markdown($msg);
$b['html'] = $msg;
}
}
function appnet_cron($a,$b) { function appnet_cron($a,$b) {
$last = get_config('appnet','last_poll'); $last = get_config('appnet','last_poll');

View file

@ -34,6 +34,7 @@ function fbpost_install() {
register_hook('enotify', 'addon/fbpost/fbpost.php', 'fbpost_enotify'); register_hook('enotify', 'addon/fbpost/fbpost.php', 'fbpost_enotify');
register_hook('queue_predeliver', 'addon/fbpost/fbpost.php', 'fbpost_queue_hook'); register_hook('queue_predeliver', 'addon/fbpost/fbpost.php', 'fbpost_queue_hook');
register_hook('cron', 'addon/fbpost/fbpost.php', 'fbpost_cron'); register_hook('cron', 'addon/fbpost/fbpost.php', 'fbpost_cron');
register_hook('prepare_body', 'addon/fbpost/fbpost.php', 'fbpost_prepare_body');
} }
@ -45,6 +46,7 @@ function fbpost_uninstall() {
unregister_hook('enotify', 'addon/fbpost/fbpost.php', 'fbpost_enotify'); unregister_hook('enotify', 'addon/fbpost/fbpost.php', 'fbpost_enotify');
unregister_hook('queue_predeliver', 'addon/fbpost/fbpost.php', 'fbpost_queue_hook'); unregister_hook('queue_predeliver', 'addon/fbpost/fbpost.php', 'fbpost_queue_hook');
unregister_hook('cron', 'addon/fbpost/fbpost.php', 'fbpost_cron'); unregister_hook('cron', 'addon/fbpost/fbpost.php', 'fbpost_cron');
unregister_hook('prepare_body', 'addon/fbpost/fbpost.php', 'fbpost_prepare_body');
} }
@ -565,9 +567,11 @@ function fbpost_post_hook(&$a,&$b) {
$msgarr = plaintext($a, $b, 0, false); $msgarr = plaintext($a, $b, 0, false);
$msg = $msgarr["text"]; $msg = $msgarr["text"];
$link = $msgarr["url"]; $link = $msgarr["url"];
$image = $msgarr["image"];
$linkname = $msgarr["title"]; $linkname = $msgarr["title"];
if ($msgarr["type"] != "video")
$image = $msgarr["image"];
// Fallback - if message is empty // Fallback - if message is empty
if(!strlen($msg)) if(!strlen($msg))
$msg = $linkname; $msg = $linkname;
@ -917,6 +921,23 @@ function fbpost_get_app_access_token() {
} }
} }
function fbpost_prepare_body(&$a,&$b) {
if ($b["item"]["network"] != NETWORK_FACEBOOK)
return;
if ($b["preview"]) {
$msg = $b["item"]["body"];
require_once("include/bbcode.php");
require_once("include/html2plain.php");
$msg = bb_CleanPictureLinks($msg);
$msg = bbcode($msg, false, false, 2, true);
$msg = trim(html2plain($msg, 0));
$b['html'] = nl2br(htmlspecialchars($msg));
}
}
function fbpost_cron($a,$b) { function fbpost_cron($a,$b) {
$last = get_config('facebook','last_poll'); $last = get_config('facebook','last_poll');

View file

@ -692,6 +692,9 @@ function fbsync_createlike($a, $uid, $self_id, $self, $contacts, $like) {
function fbsync_fetch_contact($uid, $contact, $create_user) { function fbsync_fetch_contact($uid, $contact, $create_user) {
if($contact->url == "")
return(0);
// Check if the unique contact is existing // Check if the unique contact is existing
// To-Do: only update once a while // To-Do: only update once a while
$r = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1", $r = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1",

View file

@ -118,6 +118,7 @@ function statusnet_install() {
register_hook('post_local', 'addon/statusnet/statusnet.php', 'statusnet_post_local'); register_hook('post_local', 'addon/statusnet/statusnet.php', 'statusnet_post_local');
register_hook('jot_networks', 'addon/statusnet/statusnet.php', 'statusnet_jot_nets'); register_hook('jot_networks', 'addon/statusnet/statusnet.php', 'statusnet_jot_nets');
register_hook('cron', 'addon/statusnet/statusnet.php', 'statusnet_cron'); register_hook('cron', 'addon/statusnet/statusnet.php', 'statusnet_cron');
register_hook('prepare_body', 'addon/statusnet/statusnet.php', 'statusnet_prepare_body');
logger("installed statusnet"); logger("installed statusnet");
} }
@ -129,6 +130,7 @@ function statusnet_uninstall() {
unregister_hook('post_local', 'addon/statusnet/statusnet.php', 'statusnet_post_local'); unregister_hook('post_local', 'addon/statusnet/statusnet.php', 'statusnet_post_local');
unregister_hook('jot_networks', 'addon/statusnet/statusnet.php', 'statusnet_jot_nets'); unregister_hook('jot_networks', 'addon/statusnet/statusnet.php', 'statusnet_jot_nets');
unregister_hook('cron', 'addon/statusnet/statusnet.php', 'statusnet_cron'); unregister_hook('cron', 'addon/statusnet/statusnet.php', 'statusnet_cron');
unregister_hook('prepare_body', 'addon/statusnet/statusnet.php', 'statusnet_prepare_body');
// old setting - remove only // old setting - remove only
unregister_hook('post_local_end', 'addon/statusnet/statusnet.php', 'statusnet_post_hook'); unregister_hook('post_local_end', 'addon/statusnet/statusnet.php', 'statusnet_post_hook');
@ -548,6 +550,8 @@ function statusnet_post_hook(&$a,&$b) {
$dent = new StatusNetOAuth($api,$ckey,$csecret,$otoken,$osecret); $dent = new StatusNetOAuth($api,$ckey,$csecret,$otoken,$osecret);
$max_char = $dent->get_maxlength(); // max. length for a dent $max_char = $dent->get_maxlength(); // max. length for a dent
set_pconfig($b['uid'], 'statusnet', 'max_char', $max_char);
$tempfile = ""; $tempfile = "";
require_once("include/plaintext.php"); require_once("include/plaintext.php");
require_once("include/network.php"); require_once("include/network.php");
@ -565,7 +569,7 @@ function statusnet_post_hook(&$a,&$b) {
$msg .= " \n".short_link($msgarr["url"]); $msg .= " \n".short_link($msgarr["url"]);
else else
$msg .= " \n".$msgarr["url"]; $msg .= " \n".$msgarr["url"];
} elseif (isset($msgarr["image"])) } elseif (isset($msgarr["image"]) AND ($msgarr["type"] != "video"))
$image = $msgarr["image"]; $image = $msgarr["image"];
if ($image != "") { if ($image != "") {
@ -675,6 +679,49 @@ function statusnet_plugin_admin(&$a, &$o){
)); ));
} }
function statusnet_prepare_body(&$a,&$b) {
if ($b["item"]["network"] != NETWORK_STATUSNET)
return;
if ($b["preview"]) {
$max_char = get_pconfig(local_user(),'statusnet','max_char');
if (intval($max_char) == 0)
$max_char = 140;
require_once("include/plaintext.php");
$item = $b["item"];
$item["plink"] = $a->get_baseurl()."/display/".$a->user["nickname"]."/".$item["parent"];
$r = q("SELECT `item`.`author-link`, `item`.`uri`, `contact`.`nick` AS contact_nick
FROM `item` INNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
WHERE `item`.`uri` = '%s' AND `item`.`uid` = %d LIMIT 1",
dbesc($item["thr-parent"]),
intval(local_user()));
if(count($r)) {
$orig_post = $r[0];
$nickname = "@[url=".$orig_post["author-link"]."]".$orig_post["contact_nick"]."[/url]";
$nicknameplain = "@".$orig_post["contact_nick"];
if ((strpos($item["body"], $nickname) === false) AND (strpos($item["body"], $nicknameplain) === false))
$item["body"] = $nickname." ".$item["body"];
}
$msgarr = plaintext($a, $item, $max_char, true);
$msg = $msgarr["text"];
if (isset($msgarr["url"]))
$msg .= " ".$msgarr["url"];
if (isset($msgarr["image"]))
$msg .= " ".$msgarr["image"];
$b['html'] = nl2br(htmlspecialchars($msg));
}
}
function statusnet_cron($a,$b) { function statusnet_cron($a,$b) {
$last = get_config('statusnet','last_poll'); $last = get_config('statusnet','last_poll');
@ -998,6 +1045,8 @@ function statusnet_createpost($a, $uid, $post, $self, $create_user, $only_existi
require_once("include/html2bbcode.php"); require_once("include/html2bbcode.php");
logger("statusnet_createpost: start", LOGGER_DEBUG);
$api = get_pconfig($uid, 'statusnet', 'baseapi'); $api = get_pconfig($uid, 'statusnet', 'baseapi');
$hostname = preg_replace("=https?://([\w\.]*)/.*=ism", "$1", $api); $hostname = preg_replace("=https?://([\w\.]*)/.*=ism", "$1", $api);
@ -1128,6 +1177,7 @@ function statusnet_createpost($a, $uid, $post, $self, $create_user, $only_existi
$postarray['author-link'] = $post->retweeted_status->user->statusnet_profile_url; $postarray['author-link'] = $post->retweeted_status->user->statusnet_profile_url;
$postarray['author-avatar'] = $post->retweeted_status->user->profile_image_url; $postarray['author-avatar'] = $post->retweeted_status->user->profile_image_url;
} }
logger("statusnet_createpost: end", LOGGER_DEBUG);
return($postarray); return($postarray);
} }
@ -1416,6 +1466,8 @@ function statusnet_convertmsg($a, $body, $no_tags = false) {
require_once("include/items.php"); require_once("include/items.php");
require_once("include/network.php"); require_once("include/network.php");
$body = preg_replace("=\[url\=https?://([0-9]*).([0-9]*).([0-9]*).([0-9]*)/([0-9]*)\](.*?)\[\/url\]=ism","$1.$2.$3.$4/$5",$body);
$URLSearchString = "^\[\]"; $URLSearchString = "^\[\]";
$links = preg_match_all("/[^!#@]\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", $body,$matches,PREG_SET_ORDER); $links = preg_match_all("/[^!#@]\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", $body,$matches,PREG_SET_ORDER);
@ -1428,10 +1480,16 @@ function statusnet_convertmsg($a, $body, $no_tags = false) {
foreach ($matches AS $match) { foreach ($matches AS $match) {
$search = "[url=".$match[1]."]".$match[2]."[/url]"; $search = "[url=".$match[1]."]".$match[2]."[/url]";
logger("statusnet_convertmsg: expanding url ".$match[1], LOGGER_DEBUG);
$expanded_url = original_url($match[1]); $expanded_url = original_url($match[1]);
logger("statusnet_convertmsg: fetching data for ".$expanded_url, LOGGER_DEBUG);
$oembed_data = oembed_fetch_url($expanded_url, true); $oembed_data = oembed_fetch_url($expanded_url, true);
logger("statusnet_convertmsg: fetching data: done", LOGGER_DEBUG);
if ($type == "") if ($type == "")
$type = $oembed_data->type; $type = $oembed_data->type;
if ($oembed_data->type == "video") { if ($oembed_data->type == "video") {

View file

@ -73,6 +73,7 @@ function twitter_install() {
register_hook('queue_predeliver', 'addon/twitter/twitter.php', 'twitter_queue_hook'); register_hook('queue_predeliver', 'addon/twitter/twitter.php', 'twitter_queue_hook');
register_hook('follow', 'addon/twitter/twitter.php', 'twitter_follow'); register_hook('follow', 'addon/twitter/twitter.php', 'twitter_follow');
register_hook('expire', 'addon/twitter/twitter.php', 'twitter_expire'); register_hook('expire', 'addon/twitter/twitter.php', 'twitter_expire');
register_hook('prepare_body', 'addon/twitter/twitter.php', 'twitter_prepare_body');
logger("installed twitter"); logger("installed twitter");
} }
@ -87,6 +88,7 @@ function twitter_uninstall() {
unregister_hook('queue_predeliver', 'addon/twitter/twitter.php', 'twitter_queue_hook'); unregister_hook('queue_predeliver', 'addon/twitter/twitter.php', 'twitter_queue_hook');
unregister_hook('follow', 'addon/twitter/twitter.php', 'twitter_follow'); unregister_hook('follow', 'addon/twitter/twitter.php', 'twitter_follow');
unregister_hook('expire', 'addon/twitter/twitter.php', 'twitter_expire'); unregister_hook('expire', 'addon/twitter/twitter.php', 'twitter_expire');
unregister_hook('prepare_body', 'addon/twitter/twitter.php', 'twitter_prepare_body');
// old setting - remove only // old setting - remove only
unregister_hook('post_local_end', 'addon/twitter/twitter.php', 'twitter_post_hook'); unregister_hook('post_local_end', 'addon/twitter/twitter.php', 'twitter_post_hook');
@ -472,7 +474,7 @@ function twitter_post_hook(&$a,&$b) {
if (isset($msgarr["url"])) if (isset($msgarr["url"]))
$msg .= "\n".$msgarr["url"]; $msg .= "\n".$msgarr["url"];
elseif (isset($msgarr["image"])) elseif (isset($msgarr["image"]) AND ($msgarr["type"] != "video"))
$image = $msgarr["image"]; $image = $msgarr["image"];
// and now tweet it :-) // and now tweet it :-)
@ -652,6 +654,45 @@ function twitter_expire($a,$b) {
logger('twitter_expire: expire_end'); logger('twitter_expire: expire_end');
} }
function twitter_prepare_body(&$a,&$b) {
if ($b["item"]["network"] != NETWORK_TWITTER)
return;
if ($b["preview"]) {
$max_char = 140;
require_once("include/plaintext.php");
$item = $b["item"];
$item["plink"] = $a->get_baseurl()."/display/".$a->user["nickname"]."/".$item["parent"];
$r = q("SELECT `author-link` FROM item WHERE item.uri = '%s' AND item.uid = %d LIMIT 1",
dbesc($item["thr-parent"]),
intval(local_user()));
if(count($r)) {
$orig_post = $r[0];
$nicknameplain = preg_replace("=https?://twitter.com/(.*)=ism", "$1", $orig_post["author-link"]);
$nickname = "@[url=".$orig_post["author-link"]."]".$nicknameplain."[/url]";
$nicknameplain = "@".$nicknameplain;
if ((strpos($item["body"], $nickname) === false) AND (strpos($item["body"], $nicknameplain) === false))
$item["body"] = $nickname." ".$item["body"];
}
$msgarr = plaintext($a, $item, $max_char, true);
$msg = $msgarr["text"];
if (isset($msgarr["url"]))
$msg .= " ".$msgarr["url"];
if (isset($msgarr["image"]))
$msg .= " ".$msgarr["image"];
$b['html'] = nl2br(htmlspecialchars($msg));
}
}
function twitter_fetchtimeline($a, $uid) { function twitter_fetchtimeline($a, $uid) {
$ckey = get_config('twitter', 'consumerkey'); $ckey = get_config('twitter', 'consumerkey');
$csecret = get_config('twitter', 'consumersecret'); $csecret = get_config('twitter', 'consumersecret');