$a->set_baseurl(get_config('system','url'));
+ logger('notifier: invoked: ' . print_r($argv,true));
+
$cmd = $argv[1];
switch($cmd) {
// If this is a public conversation, notify the feed hub
$notify_hub = true;
- // fill this in with a salmon slap if applicable
+ // fill this in with a single salmon slap if applicable
$slap = '';
if($cmd != 'mail') {
logger('notifier: url_recipients' . print_r($url_recipients,true));
- $conversants = array_unique($conversants,SORT_NUMERIC);
+ $conversants = array_unique($conversants);
- $recipients = array_unique(array_merge($recipients,$allow_people,$allow_groups),SORT_NUMERIC);
- $deny = array_unique(array_merge($deny_people,$deny_groups),SORT_NUMERIC);
+ $recipients = array_unique(array_merge($recipients,$allow_people,$allow_groups));
+ $deny = array_unique(array_merge($deny_people,$deny_groups));
$recipients = array_diff($recipients,$deny);
$conversant_str = dbesc(implode(', ',$conversants));
killme();
$contacts = $r;
-
- $tomb_template = load_view_file('view/atom_tomb.tpl');
- $item_template = load_view_file('view/atom_item.tpl');
- $cmnt_template = load_view_file('view/atom_cmnt.tpl');
}
$feed_template = load_view_file('view/atom_feed.tpl');
}
$atom .= replace_macros($feed_template, array(
+ '$version' => xmlify(FRIENDIKA_VERSION),
'$feed_id' => xmlify($a->get_baseurl() . '/profile/' . $owner['nickname'] ),
'$feed_title' => xmlify($owner['name']),
'$feed_updated' => xmlify(datetime_convert('UTC', 'UTC', $updated . '+00:00' , ATOM_TIME)) ,
'$hub' => $hubxml,
- '$salmon' => '', // private feed, we don't use salmon here
+ '$salmon' => '', // private feed, we don't use salmon here
'$name' => xmlify($owner['name']),
'$profile_page' => xmlify($owner['url']),
'$photo' => xmlify($owner['photo']),
'$thumb' => xmlify($owner['thumb']),
'$picdate' => xmlify(datetime_convert('UTC','UTC',$owner['avatar-date'] . '+00:00' , ATOM_TIME)) ,
'$uridate' => xmlify(datetime_convert('UTC','UTC',$owner['uri-date'] . '+00:00' , ATOM_TIME)) ,
- '$namdate' => xmlify(datetime_convert('UTC','UTC',$owner['name-date'] . '+00:00' , ATOM_TIME))
+ '$namdate' => xmlify(datetime_convert('UTC','UTC',$owner['name-date'] . '+00:00' , ATOM_TIME)) ,
+ '$birthday' => ''
));
if($cmd === 'mail') {
));
}
else {
-
if($followup) {
foreach($items as $item) { // there is only one item
-
- $verb = construct_verb($item);
- $actobj = construct_activity($item);
- $mentioned = get_mentions($item);
-
if($item['id'] == $item_id) {
- $slap = replace_macros($cmnt_template, array(
- '$name' => xmlify($owner['name']),
- '$profile_page' => xmlify($owner['url']),
- '$thumb' => xmlify($owner['thumb']),
- '$owner_name' => xmlify($item['owner-name']),
- '$owner_profile_page' => xmlify($item['owner-link']),
- '$owner_thumb' => xmlify($item['owner-avatar']),
- '$item_id' => xmlify($item['uri']),
- '$title' => xmlify($item['title']),
- '$published' => xmlify(datetime_convert('UTC', 'UTC', $item['created'] . '+00:00' , ATOM_TIME)),
- '$updated' => xmlify(datetime_convert('UTC', 'UTC', $item['edited'] . '+00:00' , ATOM_TIME)),
- '$location' => xmlify($item['location']),
- '$coord' => xmlify($item['coord']),
- '$type' => 'html',
- '$verb' => xmlify($verb),
- '$actobj' => $actobj,
- '$mentioned' => $mentioned,
- '$alt' => xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id']),
- '$content' => xmlify(bbcode($item['body'])),
- '$parent_id' => xmlify($item['parent-uri']),
- '$comment_allow' => 0
- ));
-
- $atom .= replace_macros($cmnt_template, array(
- '$name' => xmlify($owner['name']),
- '$profile_page' => xmlify($owner['url']),
- '$thumb' => xmlify($owner['thumb']),
- '$owner_name' => xmlify($item['owner-name']),
- '$owner_profile_page' => xmlify($item['owner-link']),
- '$owner_thumb' => xmlify($item['owner-avatar']),
- '$item_id' => xmlify($item['uri']),
- '$title' => xmlify($item['title']),
- '$published' => xmlify(datetime_convert('UTC', 'UTC', $item['created'] . '+00:00' , ATOM_TIME)),
- '$updated' => xmlify(datetime_convert('UTC', 'UTC', $item['edited'] . '+00:00' , ATOM_TIME)),
- '$location' => xmlify($item['location']),
- '$coord' => xmlify($item['coord']),
- '$type' => 'text',
- '$verb' => xmlify($verb),
- '$actobj' => $actobj,
- '$mentioned' => $mentioned,
- '$alt' => xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id']),
- '$content' => xmlify($item['body']),
- '$parent_id' => xmlify($item['parent-uri']),
- '$comment_allow' => 0
- ));
-
+ logger('notifier: followup: item: ' . print_r($item,true), LOGGER_DATA);
+ $slap = atom_entry($item,'html',$owner,$owner,false);
+ $atom .= atom_entry($item,'text',$owner,$owner,false);
}
-
-
}
}
else {
foreach($items as $item) {
- if($item['deleted']) {
- $atom .= replace_macros($tomb_template, array(
- '$id' => xmlify($item['uri']),
- '$updated' => xmlify(datetime_convert('UTC', 'UTC', $item['edited'] . '+00:00' , ATOM_TIME))
- ));
- $slaps[] = replace_macros($tomb_template, array(
- '$id' => xmlify($item['uri']),
- '$updated' => xmlify(datetime_convert('UTC', 'UTC', $item['edited'] . '+00:00' , ATOM_TIME))
- ));
- }
- else {
- $contact = get_item_contact($item,$contacts);
- if(! $contact)
- continue;
-
- $verb = construct_verb($item);
- $actobj = construct_activity($item);
- $mentioned = get_mentions($item);
-
- if($item['parent'] == $item['id']) {
- $atom .= replace_macros($item_template, array(
- '$name' => xmlify($contact['name']),
- '$profile_page' => xmlify($contact['url']),
- '$thumb' => xmlify($contact['thumb']),
- '$owner_name' => xmlify($item['owner-name']),
- '$owner_profile_page' => xmlify($item['owner-link']),
- '$owner_thumb' => xmlify($item['owner-avatar']),
- '$item_id' => xmlify($item['uri']),
- '$title' => xmlify($item['title']),
- '$published' => xmlify(datetime_convert('UTC', 'UTC', $item['created'] . '+00:00' , ATOM_TIME)),
- '$updated' => xmlify(datetime_convert('UTC', 'UTC', $item['edited'] . '+00:00' , ATOM_TIME)),
- '$location' => xmlify($item['location']),
- '$coord' => xmlify($item['coord']),
- '$type' => 'text',
- '$verb' => xmlify($verb),
- '$actobj' => $actobj,
- '$mentioned' => $mentioned,
- '$content' => xmlify($item['body']),
- '$alt' => xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id']),
- '$comment_allow' => (($item['last-child']) ? 1 : 0)
- ));
- $slaps[] = replace_macros($item_template, array(
- '$name' => xmlify($contact['name']),
- '$profile_page' => xmlify($contact['url']),
- '$thumb' => xmlify($contact['thumb']),
- '$owner_name' => xmlify($item['owner-name']),
- '$owner_profile_page' => xmlify($item['owner-link']),
- '$owner_thumb' => xmlify($item['owner-avatar']),
- '$item_id' => xmlify($item['uri']),
- '$title' => xmlify($item['title']),
- '$published' => xmlify(datetime_convert('UTC', 'UTC', $item['created'] . '+00:00' , ATOM_TIME)),
- '$updated' => xmlify(datetime_convert('UTC', 'UTC', $item['edited'] . '+00:00' , ATOM_TIME)),
- '$location' => xmlify($item['location']),
- '$coord' => xmlify($item['coord']),
- '$type' => 'html',
- '$verb' => xmlify($verb),
- '$actobj' => $actobj,
- '$mentioned' => $mentioned,
- '$content' => xmlify(bbcode($item['body'])),
- '$alt' => xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id']),
- '$comment_allow' => (($item['last-child']) ? 1 : 0)
- ));
+ $contact = get_item_contact($item,$contacts);
+ if(! $contact)
+ continue;
- }
- else {
- $atom .= replace_macros($cmnt_template, array(
- '$name' => xmlify($contact['name']),
- '$profile_page' => xmlify($contact['url']),
- '$thumb' => xmlify($contact['thumb']),
- '$item_id' => xmlify($item['uri']),
- '$title' => xmlify($item['title']),
- '$published' => xmlify(datetime_convert('UTC', 'UTC', $item['created'] . '+00:00' , ATOM_TIME)),
- '$updated' => xmlify(datetime_convert('UTC', 'UTC', $item['edited'] . '+00:00' , ATOM_TIME)),
- '$content' => xmlify($item['body']),
- '$alt' => xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id']),
- '$location' => xmlify($item['location']),
- '$coord' => xmlify($item['coord']),
- '$type' => 'text',
- '$verb' => xmlify($verb),
- '$actobj' => $actobj,
- '$mentioned' => $mentioned,
- '$parent_id' => xmlify($item['parent-uri']),
- '$comment_allow' => (($item['last-child']) ? 1 : 0)
- ));
- $slaps[] = replace_macros($cmnt_template, array(
- '$name' => xmlify($contact['name']),
- '$profile_page' => xmlify($contact['url']),
- '$thumb' => xmlify($contact['thumb']),
- '$item_id' => xmlify($item['uri']),
- '$title' => xmlify($item['title']),
- '$published' => xmlify(datetime_convert('UTC', 'UTC', $item['created'] . '+00:00' , ATOM_TIME)),
- '$updated' => xmlify(datetime_convert('UTC', 'UTC', $item['edited'] . '+00:00' , ATOM_TIME)),
- '$content' => xmlify(bbcode($item['body'])),
- '$alt' => xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id']),
- '$location' => xmlify($item['location']),
- '$coord' => xmlify($item['coord']),
- '$type' => 'html',
- '$verb' => xmlify($verb),
- '$actobj' => $actobj,
- '$mentioned' => $mentioned,
- '$parent_id' => xmlify($item['parent-uri']),
- '$comment_allow' => (($item['last-child']) ? 1 : 0)
- ));
- }
- }
+ $atom .= atom_entry($item,'text',$contact,$owner,true);
+
+ // There's a problem here - we *were* going to use salmon to provide semi-authenticated
+ // communication to OStatus, but unless we're the item author they won't verify.
+ // commented out for now, though we'll still send local replies (and any mentions
+ // that they contain) upstream. Rethinking the problem space.
+
+// $slaps[] = atom_entry($item,'html',$contact,$owner,true);
}
}
}
$atom .= '</feed>' . "\r\n";
- logger('notifier: ' . $atom);
+ logger('notifier: ' . $atom, LOGGER_DATA);
- logger('notifier: slaps: ' . print_r($slaps,true));
+// logger('notifier: slaps: ' . print_r($slaps,true), LOGGER_DATA);
if($followup)
$recip_str = $parent['contact-id'];
switch($contact['network']) {
case 'dfrn':
+ logger('notifier: dfrndelivery: ' . $contact['name']);
$deliver_status = dfrn_deliver($owner,$contact,$atom);
- logger('notifier: delivery: ' . $contact['name']);
+
+ logger('notifier: dfrn_delivery returns ' . $deliver_status);
+
+ if($deliver_status == (-1)) {
+ logger('notifier: delivery failed: queuing message');
+ // queue message for redelivery
+ q("INSERT INTO `queue` ( `cid`, `created`, `last`, `content`)
+ VALUES ( %d, '%s', '%s', '%s') ",
+ intval($contact['id']),
+ dbesc(datetime_convert()),
+ dbesc(datetime_convert()),
+ dbesc($atom)
+ );
+ }
break;
default:
- if($followup) {
- slapper($owner,$contact['notify'],$slap);
+ if($followup && $contact['notify']) {
+ logger('notifier: slapdelivery: ' . $contact['name']);
+ $deliver_status = slapper($owner,$contact['notify'],$slap);
+
+ if($deliver_status == (-1)) {
+ // queue message for redelivery
+ q("INSERT INTO `queue` ( `cid`, `created`, `last`, `content`)
+ VALUES ( %d, '%s', '%s', '%s') ",
+ intval($contact['id']),
+ dbesc(datetime_convert()),
+ dbesc(datetime_convert()),
+ dbesc($slap)
+ );
+
+ }
+
+
}
else {
// a public hub, it's ok to send a salmon
if(count($slaps) && $notify_hub) {
+ logger('notifier: slapdelivery: ' . $contact['name']);
foreach($slaps as $slappy) {
- slapper($owner,$contact['notify'],$slappy);
+ if($contact['notify']) {
+ $deliver_status = slapper($owner,$contact['notify'],$slappy);
+ if($deliver_status == (-1)) {
+ // queue message for redelivery
+ q("INSERT INTO `queue` ( `cid`, `created`, `last`, `content`)
+ VALUES ( %d, '%s', '%s', '%s') ",
+ intval($contact['id']),
+ dbesc(datetime_convert()),
+ dbesc(datetime_convert()),
+ dbesc($slappy)
+ );
+ }
+ }
}
- logger('notifier: slapdelivery: ' . $contact['name']);
}
}
break;
}
-
- if(($cmd === 'mail') && ($deliver_status == 0)) {
- $r = q("UPDATE `mail` SET `delivered` = 1 WHERE `id` = %d LIMIT 1",
- intval($item_id)
- );
- }
-
}
// send additional slaps to mentioned remote tags (@foo@example.com)
- if(count($slaps) && count($url_recipients) && $notify_hub) {
+ if($slap && count($url_recipients) && $followup && $notify_hub) {
foreach($url_recipients as $url) {
- foreach($slaps as $slappy) {
- slapper($owner,$url,$slappy);
+ if($url) {
+ logger('notifier: urldelivery: ' . $url);
+ $deliver_status = slapper($owner,$url,$slap);
+ // TODO: redeliver/queue these items on failure, though there is no contact record
}
- logger('notifier: urldelivery: ' . $url);
}
}