}
// Is it a repeated post?
- if ($repeat_of != "") {
+ if (($repeat_of != "") OR ($item["verb"] == ACTIVITY_SHARE)) {
$activityobjects = $xpath->query('activity:object', $entry)->item(0);
if (is_object($activityobjects)) {
$r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s'",
intval($importer["uid"]), dbesc($item["parent-uri"]));
- if (!$r AND ($related != "")) {
+ // Only fetch missing stuff if it is a comment or reshare.
+ if (in_array($item["verb"], array(ACTIVITY_POST, ACTIVITY_SHARE)) AND
+ !dbm::is_result($r) AND ($related != "")) {
$reply_path = str_replace("/notice/", "/api/statuses/show/", $related).".atom";
if ($reply_path != $related) {
$last = get_config('system','ostatus_last_poll');
$poll_interval = intval(get_config('system','ostatus_poll_interval'));
- if(! $poll_interval)
- $poll_interval = OSTATUS_DEFAULT_POLL_INTERVAL;
+ if (!$poll_interval) {
+ $poll_interval = self::OSTATUS_DEFAULT_POLL_INTERVAL;
+ }
// Don't poll if the interval is set negative
- if (($poll_interval < 0) AND !$override)
+ if (($poll_interval < 0) AND !$override) {
return;
+ }
if (!$mentions) {
$poll_timeframe = intval(get_config('system','ostatus_poll_timeframe'));
- if (!$poll_timeframe)
- $poll_timeframe = OSTATUS_DEFAULT_POLL_TIMEFRAME;
+ if (!$poll_timeframe) {
+ $poll_timeframe = self::OSTATUS_DEFAULT_POLL_TIMEFRAME;
+ }
} else {
$poll_timeframe = intval(get_config('system','ostatus_poll_timeframe'));
- if (!$poll_timeframe)
- $poll_timeframe = OSTATUS_DEFAULT_POLL_TIMEFRAME_MENTIONS;
+ if (!$poll_timeframe) {
+ $poll_timeframe = self::OSTATUS_DEFAULT_POLL_TIMEFRAME_MENTIONS;
+ }
}
$start = date("Y-m-d H:i:s", time() - ($poll_timeframe * 60));
- if ($mentions)
+ if ($mentions) {
$conversations = q("SELECT `term`.`oid`, `term`.`url`, `term`.`uid` FROM `term`
STRAIGHT_JOIN `thread` ON `thread`.`iid` = `term`.`oid` AND `thread`.`uid` = `term`.`uid`
WHERE `term`.`type` = 7 AND `term`.`term` > '%s' AND `thread`.`mention`
GROUP BY `term`.`url`, `term`.`uid` ORDER BY `term`.`term` DESC", dbesc($start));
- else
+ } else {
$conversations = q("SELECT `oid`, `url`, `uid` FROM `term`
WHERE `type` = 7 AND `term` > '%s'
GROUP BY `url`, `uid` ORDER BY `term` DESC", dbesc($start));
+ }
foreach ($conversations AS $conversation) {
self::completion($conversation['url'], $conversation['uid']);
private function follow_entry($doc, $item, $owner, $toplevel) {
$item["id"] = $item["parent"] = 0;
- $item['guid'] = get_guid(32);
- $item["uri"] = $item['parent-uri'] = $item['thr-parent'] = 'urn:X-dfrn:'.get_app()->get_hostname() . ':follow:'.$item['guid'];
- $item["created"] = $item["edited"] = datetime_convert('UTC','UTC', 'now', ATOM_TIME);
- $item["app"] = "activity";
+ $item["created"] = $item["edited"] = date("c");
+ $item["private"] = true;
$contact = Probe::uri($item['follow']);
$item['follow'] = $contact['alias'];
}
+ $r = q("SELECT `id` FROM `contact` WHERE `uid` = %d AND `nurl` = '%s'",
+ intval($owner['uid']), dbesc(normalise_link($contact["url"])));
+
+ if (dbm::is_result($r)) {
+ $connect_id = $r[0]['id'];
+ } else {
+ $connect_id = 0;
+ }
+
if ($item['verb'] == ACTIVITY_FOLLOW) {
- $message = t('<a href="%s">%s</> is now following <a href="%s">%s</>.');
+ $message = t('%s is now following %s.');
+ $title = t('following');
+ $action = "subscription";
} else {
- $message = t('<a href="%s">%s</> stopped following <a href="%s">%s</>.');
+ $message = t('%s stopped following %s.');
+ $title = t('stopped following');
+ $action = "unfollow";
}
- $item["body"] = sprintf($message, $owner["url"], $owner["nick"], $contact["url"], $contact["nick"]);
+ $item["uri"] = $item['parent-uri'] = $item['thr-parent'] =
+ 'tag:'.get_app()->get_hostname().
+ ','.date('Y-m-d').':'.$action.':'.$owner['uid'].
+ ':person:'.$connect_id.':'.$item['created'];
- $title = self::entry_header($doc, $entry, $owner, $toplevel);
+ $item["body"] = sprintf($message, $owner["nick"], $contact["nick"]);
- self::entry_content($doc, $entry, $item, $owner, "");
+ self::entry_header($doc, $entry, $owner, $toplevel);
+
+ self::entry_content($doc, $entry, $item, $owner, $title);
$object = self::add_person_object($doc, $owner, $contact);
$entry->appendChild($object);
xml::add_element($doc, $entry, "link", "", array("rel" => "alternate", "type" => "text/html",
"href" => App::get_baseurl()."/display/".$item["guid"]));
- if ($complete)
+ if ($complete AND ($item["id"] > 0))
xml::add_element($doc, $entry, "status_net", "", array("notice_id" => $item["id"]));
xml::add_element($doc, $entry, "activity:verb", $verb);
if (intval($item["parent"]) > 0) {
$conversation = App::get_baseurl()."/display/".$owner["nick"]."/".$item["parent"];
- } else {
- $conversation = "urn:X-dfrn:".App::get_baseurl().":conversation:".$item["guid"];
+ xml::add_element($doc, $entry, "link", "", array("rel" => "ostatus:conversation", "href" => $conversation));
+ xml::add_element($doc, $entry, "ostatus:conversation", $conversation);
}
- xml::add_element($doc, $entry, "link", "", array("rel" => "ostatus:conversation", "href" => $conversation));
- xml::add_element($doc, $entry, "ostatus:conversation", $conversation);
-
$tags = item_getfeedtags($item);
if(count($tags))
if ($t[0] == "@")
$mentioned[$t[1]] = $t[1];
- if (isset($item['follow'])) {
- $mentioned[$item['follow']] = $item['follow'];
- }
-
// Make sure that mentions are accepted (GNU Social has problems with mixing HTTP and HTTPS)
$newmentions = array();
foreach ($mentioned AS $mention) {
self::get_attachment($doc, $entry, $item);
- if ($complete) {
+ if ($complete AND ($item["id"] > 0)) {
$app = $item["app"];
if ($app == "")
$app = "web";
*
* @return string XML feed
*/
- public static function feed(&$a, $owner_nick, $last_update) {
+ public static function feed(App $a, $owner_nick, $last_update) {
$r = q("SELECT `contact`.*, `user`.`nickname`, `user`.`timezone`, `user`.`page-flags`
FROM `contact` INNER JOIN `user` ON `user`.`uid` = `contact`.`uid`