register_hook('post_local', 'addon/statusnet/statusnet.php', 'statusnet_post_local');
register_hook('jot_networks', 'addon/statusnet/statusnet.php', 'statusnet_jot_nets');
register_hook('cron', 'addon/statusnet/statusnet.php', 'statusnet_cron');
+ register_hook('prepare_body', 'addon/statusnet/statusnet.php', 'statusnet_prepare_body');
logger("installed statusnet");
}
unregister_hook('post_local', 'addon/statusnet/statusnet.php', 'statusnet_post_local');
unregister_hook('jot_networks', 'addon/statusnet/statusnet.php', 'statusnet_jot_nets');
unregister_hook('cron', 'addon/statusnet/statusnet.php', 'statusnet_cron');
+ unregister_hook('prepare_body', 'addon/statusnet/statusnet.php', 'statusnet_prepare_body');
// old setting - remove only
unregister_hook('post_local_end', 'addon/statusnet/statusnet.php', 'statusnet_post_hook');
*/
if (! $globalsn == null) {
$s .= '<h4>' . t('Globally Available StatusNet OAuthKeys') . '</h4>';
- $s .= '<p>'. t("There are preconfigured OAuth key pairs for some StatusNet servers available. If you are useing one of them, please use these credentials. If not feel free to connect to any other StatusNet instance \x28see below\x29.") .'</p>';
+ $s .= '<p>'. t("There are preconfigured OAuth key pairs for some StatusNet servers available. If you are using one of them, please use these credentials. If not feel free to connect to any other StatusNet instance \x28see below\x29.") .'</p>';
$s .= '<div id="statusnet-preconf-wrapper">';
foreach ($globalsn as $asn) {
$s .= '<input type="radio" name="statusnet-preconf-apiurl" value="'. $asn['apiurl'] .'">'. $asn['sitename'] .'<br />';
$orig_post = $r[0];
}
- $nickname = "@[url=".$orig_post["author-link"]."]".$orig_post["contact_nick"]."[/url]";
- $nicknameplain = "@".$orig_post["contact_nick"];
+ //$nickname = "@[url=".$orig_post["author-link"]."]".$orig_post["contact_nick"]."[/url]";
+ //$nicknameplain = "@".$orig_post["contact_nick"];
+
+ $nick = preg_replace("=https?://(.*)/(.*)=ism", "$2", $orig_post["author-link"]);
+
+ $nickname = "@[url=".$orig_post["author-link"]."]".$nick."[/url]";
+ $nicknameplain = "@".$nick;
logger("statusnet_post_hook: comparing ".$nickname." and ".$nicknameplain." with ".$b["body"], LOGGER_DEBUG);
if ((strpos($b["body"], $nickname) === false) AND (strpos($b["body"], $nicknameplain) === false))
return;
// if posts comes from statusnet don't send it back
+ if($b['extid'] == NETWORK_STATUSNET)
+ return;
+
if($b['app'] == "StatusNet")
return;
$dent = new StatusNetOAuth($api,$ckey,$csecret,$otoken,$osecret);
$max_char = $dent->get_maxlength(); // max. length for a dent
+ set_pconfig($b['uid'], 'statusnet', 'max_char', $max_char);
+
$tempfile = "";
require_once("include/plaintext.php");
require_once("include/network.php");
- $msgarr = plaintext($a, $b, $max_char, true);
+ $msgarr = plaintext($a, $b, $max_char, true, 7);
$msg = $msgarr["text"];
if (($msg == "") AND isset($msgarr["title"]))
$msg .= " \n".short_link($msgarr["url"]);
else
$msg .= " \n".$msgarr["url"];
- } elseif (isset($msgarr["image"]))
+ } elseif (isset($msgarr["image"]) AND ($msgarr["type"] != "video"))
$image = $msgarr["image"];
if ($image != "") {
));
}
+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"];
+
+ $nick = preg_replace("=https?://(.*)/(.*)=ism", "$2", $orig_post["author-link"]);
+
+ $nickname = "@[url=".$orig_post["author-link"]."]".$nick."[/url]";
+ $nicknameplain = "@".$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, 7);
+ $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) {
$last = get_config('statusnet','last_poll');
$_REQUEST["type"] = "wall";
$_REQUEST["api_source"] = true;
$_REQUEST["profile_uid"] = $uid;
- $_REQUEST["source"] = "StatusNet";
+ //$_REQUEST["source"] = "StatusNet";
+ $_REQUEST["source"] = $post->source;
+ $_REQUEST["extid"] = NETWORK_STATUSNET;
//$_REQUEST["date"] = $post->created_at;
}
function statusnet_fetch_contact($uid, $contact, $create_user) {
+ if ($contact->statusnet_profile_url == "")
+ return(-1);
+
// Check if the unique contact is existing
// To-Do: only update once a while
$r = q("SELECT id FROM unique_contacts WHERE url='%s' LIMIT 1",
q("UPDATE `contact` SET `photo` = '%s',
`thumb` = '%s',
`micro` = '%s',
- `name-date` = '%s',
- `uri-date` = '%s',
`avatar-date` = '%s'
WHERE `id` = %d",
dbesc($photos[0]),
dbesc($photos[1]),
dbesc($photos[2]),
dbesc(datetime_convert()),
- dbesc(datetime_convert()),
- dbesc(datetime_convert()),
intval($contact_id)
);
// check that we have all the photos, this has been known to fail on occasion
- if((! $r[0]['photo']) || (! $r[0]['thumb']) || (! $r[0]['micro']) || ($update_photo)) {
+ if((!$r[0]['photo']) || (!$r[0]['thumb']) || (!$r[0]['micro']) || ($update_photo)) {
logger("statusnet_fetch_contact: Updating contact ".$contact->screen_name, LOGGER_DEBUG);
require_once("include/html2bbcode.php");
+ logger("statusnet_createpost: start", LOGGER_DEBUG);
+
$api = get_pconfig($uid, 'statusnet', 'baseapi');
$hostname = preg_replace("=https?://([\w\.]*)/.*=ism", "$1", $api);
$postarray['gravity'] = 0;
$postarray['uid'] = $uid;
$postarray['wall'] = 0;
- $postarray['uri'] = $hostname."::".$post->id;
+
+ if (is_object($post->retweeted_status)) {
+ $content = $post->retweeted_status;
+ statusnet_fetch_contact($uid, $content->user, false);
+ } else
+ $content = $post;
+
+ $postarray['uri'] = $hostname."::".$content->id;
$r = q("SELECT * FROM `item` WHERE `extid` = '%s' AND `uid` = %d LIMIT 1",
dbesc($postarray['uri']),
$contactid = 0;
- if ($post->in_reply_to_status_id != "") {
+ if ($content->in_reply_to_status_id != "") {
- $parent = $hostname."::".$post->in_reply_to_status_id;
+ $parent = $hostname."::".$content->in_reply_to_status_id;
$r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
dbesc($parent),
if (count($r)) {
$postarray['thr-parent'] = $r[0]["uri"];
$postarray['parent-uri'] = $r[0]["parent-uri"];
+ $postarray['parent'] = $r[0]["parent"];
+ $postarray['object-type'] = ACTIVITY_OBJ_COMMENT;
} else {
$r = q("SELECT * FROM `item` WHERE `extid` = '%s' AND `uid` = %d LIMIT 1",
dbesc($parent),
if (count($r)) {
$postarray['thr-parent'] = $r[0]['uri'];
$postarray['parent-uri'] = $r[0]['parent-uri'];
+ $postarray['parent'] = $r[0]['parent'];
+ $postarray['object-type'] = ACTIVITY_OBJ_COMMENT;
} else {
$postarray['thr-parent'] = $postarray['uri'];
$postarray['parent-uri'] = $postarray['uri'];
+ $postarray['object-type'] = ACTIVITY_OBJ_NOTE;
}
}
// Is it me?
$own_url = get_pconfig($uid, 'statusnet', 'own_url');
- if ($post->user->id == $own_url) {
+ if ($content->user->id == $own_url) {
$r = q("SELECT * FROM `contact` WHERE `self` = 1 AND `uid` = %d LIMIT 1",
intval($uid));
}
// Don't create accounts of people who just comment something
$create_user = false;
- } else
+ } else {
$postarray['parent-uri'] = $postarray['uri'];
+ $postarray['object-type'] = ACTIVITY_OBJ_NOTE;
+ }
if ($contactid == 0) {
$contactid = statusnet_fetch_contact($uid, $post->user, $create_user);
$postarray['contact-id'] = $contactid;
$postarray['verb'] = ACTIVITY_POST;
- $postarray['author-name'] = $postarray['owner-name'];
- $postarray['author-link'] = $postarray['owner-link'];
- $postarray['author-avatar'] = $postarray['owner-avatar'];
+
+ $postarray['author-name'] = $content->user->name;
+ $postarray['author-link'] = $content->user->statusnet_profile_url;
+ $postarray['author-avatar'] = $content->user->profile_image_url;
// To-Do: Maybe unreliable? Can the api be entered without trailing "/"?
$hostname = str_replace("/api/", "/notice/", get_pconfig($uid, 'statusnet', 'baseapi'));
- $postarray['plink'] = $hostname.$post->id;
- $postarray['app'] = strip_tags($post->source);
+ $postarray['plink'] = $hostname.$content->id;
+ $postarray['app'] = strip_tags($content->source);
- if ($post->user->protected) {
+ if ($content->user->protected) {
$postarray['private'] = 1;
$postarray['allow_cid'] = '<' . $self['id'] . '>';
}
- $postarray['body'] = html2bbcode($post->statusnet_html);
+ $postarray['body'] = html2bbcode($content->statusnet_html);
$converted = statusnet_convertmsg($a, $postarray['body'], false);
$postarray['body'] = $converted["body"];
$postarray['tag'] = $converted["tags"];
- $postarray['created'] = datetime_convert('UTC','UTC',$post->created_at);
- $postarray['edited'] = datetime_convert('UTC','UTC',$post->created_at);
+ $postarray['created'] = datetime_convert('UTC','UTC',$content->created_at);
+ $postarray['edited'] = datetime_convert('UTC','UTC',$content->created_at);
- if (is_string($post->place->name))
- $postarray["location"] = $post->place->name;
+ if (is_string($content->place->name))
+ $postarray["location"] = $content->place->name;
- if (is_string($post->place->full_name))
- $postarray["location"] = $post->place->full_name;
+ if (is_string($content->place->full_name))
+ $postarray["location"] = $content->place->full_name;
- if (is_array($post->geo->coordinates))
- $postarray["coord"] = $post->geo->coordinates[0]." ".$post->geo->coordinates[1];
+ if (is_array($content->geo->coordinates))
+ $postarray["coord"] = $content->geo->coordinates[0]." ".$content->geo->coordinates[1];
- if (is_array($post->coordinates->coordinates))
- $postarray["coord"] = $post->coordinates->coordinates[1]." ".$post->coordinates->coordinates[0];
+ if (is_array($content->coordinates->coordinates))
+ $postarray["coord"] = $content->coordinates->coordinates[1]." ".$content->coordinates->coordinates[0];
- if (is_object($post->retweeted_status)) {
+ /*if (is_object($post->retweeted_status)) {
$postarray['body'] = html2bbcode($post->retweeted_status->statusnet_html);
$converted = statusnet_convertmsg($a, $postarray['body'], false);
$postarray['author-name'] = $post->retweeted_status->user->name;
$postarray['author-link'] = $post->retweeted_status->user->statusnet_profile_url;
$postarray['author-avatar'] = $post->retweeted_status->user->profile_image_url;
- }
+ }*/
+ logger("statusnet_createpost: end", LOGGER_DEBUG);
return($postarray);
}
function statusnet_checknotification($a, $uid, $own_url, $top_item, $postarray) {
+ // This function necer worked and need cleanup
+
$user = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` LIMIT 1",
intval($uid)
);
'to_email' => $user[0]['email'],
'uid' => $user[0]['uid'],
'item' => $postarray,
- 'link' => $a->get_baseurl() . '/display/' . $user[0]['nickname'] . '/' . $top_item,
+ 'link' => $a->get_baseurl().'/display/'.urlencode(get_item_guid($top_item)),
'source_name' => $postarray['author-name'],
'source_link' => $postarray['author-link'],
'source_photo' => $postarray['author-avatar'],
$items = $connection->get('statuses/home_timeline', $parameters);
if (!is_array($items)) {
- logger("statusnet_fetchhometimeline: Error fetching home timeline: ".print_r($items, true), LOGGER_DEBUG);
+ if (is_object($items) AND isset($items->error))
+ $errormsg = $items->error;
+ elseif (is_object($items))
+ $errormsg = print_r($items, true);
+ elseif (is_string($items) OR is_float($items) OR is_int($items))
+ $errormsg = $items;
+ else
+ $errormsg = "Unknown error";
+
+ logger("statusnet_fetchhometimeline: Error fetching home timeline: ".$errormsg, LOGGER_DEBUG);
return;
}
dbesc($postarray['uri']),
intval($uid)
);
- if (count($r))
+ if (count($r)) {
$item = $r[0]['id'];
+ $parent_id = $r[0]['parent'];
+ }
if ($item != 0) {
require_once('include/enotify.php');
'to_email' => $u[0]['email'],
'uid' => $u[0]['uid'],
'item' => $postarray,
- 'link' => $a->get_baseurl() . '/display/' . $u[0]['nickname'] . '/' . $item,
+ 'link' => $a->get_baseurl().'/display/'.urlencode(get_item_guid($item)),
'source_name' => $postarray['author-name'],
'source_link' => $postarray['author-link'],
'source_photo' => $postarray['author-avatar'],
'verb' => ACTIVITY_TAG,
- 'otype' => 'item'
+ 'otype' => 'item',
+ 'parent' => $parent_id,
));
}
}
require_once("include/items.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 = "^\[\]";
$links = preg_match_all("/[^!#@]\[url\=([$URLSearchString]*)\](.*?)\[\/url\]/ism", $body,$matches,PREG_SET_ORDER);
foreach ($matches AS $match) {
$search = "[url=".$match[1]."]".$match[2]."[/url]";
+ logger("statusnet_convertmsg: expanding url ".$match[1], LOGGER_DEBUG);
+
$expanded_url = original_url($match[1]);
+ logger("statusnet_convertmsg: fetching data for ".$expanded_url, LOGGER_DEBUG);
+
$oembed_data = oembed_fetch_url($expanded_url, true);
+ logger("statusnet_convertmsg: fetching data: done", LOGGER_DEBUG);
+
if ($type == "")
$type = $oembed_data->type;
if ($oembed_data->type == "video") {
if (($footerlink != "") AND (trim($footer) != "")) {
$removedlink = trim(str_replace($footerlink, "", $body));
- if (strstr($body, $removedlink))
+ if (($removedlink == "") OR strstr($body, $removedlink))
$body = $removedlink;
$body .= $footer;