more progress on notifier cleanup and encoding items for transit.
This commit is contained in:
parent
ef192a3c14
commit
5d4c9f5617
@ -89,8 +89,6 @@ function localize_item(&$item){
|
|||||||
if($extracted['images'])
|
if($extracted['images'])
|
||||||
$item['body'] = item_redir_and_replace_images($extracted['body'], $extracted['images'], $item['contact-id']);
|
$item['body'] = item_redir_and_replace_images($extracted['body'], $extracted['images'], $item['contact-id']);
|
||||||
|
|
||||||
logger('localize');
|
|
||||||
|
|
||||||
if (activity_match($item['verb'],ACTIVITY_LIKE) || activity_match($item['verb'],ACTIVITY_DISLIKE)){
|
if (activity_match($item['verb'],ACTIVITY_LIKE) || activity_match($item['verb'],ACTIVITY_DISLIKE)){
|
||||||
|
|
||||||
$obj= json_decode($item['object'],true);
|
$obj= json_decode($item['object'],true);
|
||||||
|
@ -6,6 +6,36 @@ require_once('include/crypto.php');
|
|||||||
require_once('include/Photo.php');
|
require_once('include/Photo.php');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function collect_recipients($item) {
|
||||||
|
|
||||||
|
if($item['allow_cid'] || $item['allow_gid'] || $item['deny_cid'] || $item['deny_gid']) {
|
||||||
|
$allow_people = expand_acl($item['allow_cid']);
|
||||||
|
$allow_groups = expand_groups(expand_acl($item['allow_gid']));
|
||||||
|
$deny_people = expand_acl($item['deny_cid']);
|
||||||
|
$deny_groups = expand_groups(expand_acl($item['deny_gid']));
|
||||||
|
|
||||||
|
$recipients = array_unique(array_merge($allow_people,$allow_groups));
|
||||||
|
$deny = array_unique(array_merge($deny_people,$deny_groups));
|
||||||
|
$recipients = array_diff($recipients,$deny);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$recipients = array();
|
||||||
|
$r = q("select * from abook where abook_channel = %d and not (abook_flags & %d) ",
|
||||||
|
intval($item['uid']),
|
||||||
|
intval(ABOOK_FLAG_SELF)
|
||||||
|
);
|
||||||
|
if($r) {
|
||||||
|
foreach($r as $rr) {
|
||||||
|
// FIXME check permissions of each
|
||||||
|
$recipients[] = $rr['abook_xchan'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $recipients;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function get_public_feed($channel,$params) {
|
function get_public_feed($channel,$params) {
|
||||||
|
|
||||||
$type = 'xml';
|
$type = 'xml';
|
||||||
@ -472,6 +502,8 @@ function get_item_elements($j) {
|
|||||||
function encode_item($item) {
|
function encode_item($item) {
|
||||||
$x = array();
|
$x = array();
|
||||||
|
|
||||||
|
logger('encode_item: ' . print_r($item,true));
|
||||||
|
|
||||||
$x['message_id'] = $item['uri'];
|
$x['message_id'] = $item['uri'];
|
||||||
$x['message_top'] = $item['parent_uri'];
|
$x['message_top'] = $item['parent_uri'];
|
||||||
$x['message_parent'] = $item['thr_parent'];
|
$x['message_parent'] = $item['thr_parent'];
|
||||||
@ -487,21 +519,54 @@ function encode_item($item) {
|
|||||||
$x['location'] = $item['location'];
|
$x['location'] = $item['location'];
|
||||||
$x['longlat'] = $item['coord'];
|
$x['longlat'] = $item['coord'];
|
||||||
|
|
||||||
$x['owner'] = array();
|
$x['owner'] = encode_item_xchan($item['owner']);
|
||||||
$x['author'] = array();
|
$x['author'] = encode_item_xchan($item['author']);
|
||||||
$x['object'] = array();
|
if($item['object'])
|
||||||
$x['target'] = array();
|
$x['object'] = json_decode($item['object'],true);
|
||||||
$x['attach'] = array();
|
if($item['target'])
|
||||||
|
$x['target'] = json_decode($item['target'],true);
|
||||||
|
if($item['attach'])
|
||||||
|
$x['attach'] = json_decode($item['attach'],true);
|
||||||
|
|
||||||
$x['restrictions'] = array();
|
$x['restrictions'] = array();
|
||||||
$x['flags'] = array();
|
$x['flags'] = array();
|
||||||
$x['tags'] = array();
|
if($item['term'])
|
||||||
|
$x['tags'] = encode_item_terms($item['term']);
|
||||||
|
|
||||||
return $x;
|
return $x;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function encode_item_xchan($xchan) {
|
||||||
|
|
||||||
|
$ret = array();
|
||||||
|
$ret['name'] = $xchan['xchan_name'];
|
||||||
|
$ret['address'] = $xchan['xchan_addr'];
|
||||||
|
$ret['url'] = $xchan['hubloc_url'];
|
||||||
|
$ret['photo'] = array('mimetype' => $xchan['xchan_photo_mimetype'], 'src' => $xchan['xchan_photo_m']);
|
||||||
|
$ret['guid'] = $xchan['xchan_guid'];
|
||||||
|
$ret['guid_sig'] = $xchan['xchan_guid_sig'];
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
function encode_item_terms($terms) {
|
||||||
|
$ret = array();
|
||||||
|
|
||||||
|
$allowed_export_terms = array( TERM_UNKNOWN, TERM_HASHTAG, TERM_MENTION, TERM_CATEGORY );
|
||||||
|
|
||||||
|
if($terms) {
|
||||||
|
foreach($terms as $term) {
|
||||||
|
if(in_array($term['type'],$allowed_export_terms))
|
||||||
|
$ret = array('tag' => $term['term'], 'url' => $term['url'], 'type' => termtype($term['type']));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
function termtype($t) {
|
||||||
|
$types = array('unknown','hashtag','mention','category','private_category','file','search');
|
||||||
|
return(($types[$t]) ? $types[$t] : 'unknown');
|
||||||
|
}
|
||||||
|
|
||||||
function get_atom_elements($feed,$item) {
|
function get_atom_elements($feed,$item) {
|
||||||
|
|
||||||
@ -3838,12 +3903,21 @@ function posted_date_widget($url,$uid,$wall) {
|
|||||||
function fetch_post_tags($items) {
|
function fetch_post_tags($items) {
|
||||||
|
|
||||||
$tag_finder = array();
|
$tag_finder = array();
|
||||||
if($items && count($items))
|
if($items) {
|
||||||
foreach($items as $item)
|
foreach($items as $item) {
|
||||||
if(! in_array($item['item_id'],$tag_finder))
|
if(array_key_exists('item_id',$item)) {
|
||||||
$tag_finder[] = $item['item_id'];
|
if(! in_array($item['item_id'],$tag_finder))
|
||||||
|
$tag_finder[] = $item['item_id'];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(! in_array($item['id'],$tag_finder))
|
||||||
|
$tag_finder[] = $item['id'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
$tag_finder_str = implode(', ', $tag_finder);
|
$tag_finder_str = implode(', ', $tag_finder);
|
||||||
|
|
||||||
|
|
||||||
if(strlen($tag_finder_str)) {
|
if(strlen($tag_finder_str)) {
|
||||||
$tags = q("select * from term where oid in ( %s ) and otype = %d",
|
$tags = q("select * from term where oid in ( %s ) and otype = %d",
|
||||||
dbesc($tag_finder_str),
|
dbesc($tag_finder_str),
|
||||||
@ -3851,13 +3925,23 @@ function fetch_post_tags($items) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
for($x = 0; $x < count($items); $x ++) {
|
for($x = 0; $x < count($items); $x ++) {
|
||||||
if(count($tags)) {
|
if(count($tags)) {
|
||||||
foreach($tags as $t) {
|
foreach($tags as $t) {
|
||||||
if($t['oid'] == $items[$x]['item_id']) {
|
if(array_key_exists('item_id',$items[$x])) {
|
||||||
if(! is_array($items[$x]['term']))
|
if($t['oid'] == $items[$x]['item_id']) {
|
||||||
$items[$x]['term'] = array();
|
if(! is_array($items[$x]['term']))
|
||||||
$items[$x]['term'][] = $t;
|
$items[$x]['term'] = array();
|
||||||
|
$items[$x]['term'][] = $t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if($t['oid'] == $items[$x]['id']) {
|
||||||
|
if(! is_array($items[$x]['term']))
|
||||||
|
$items[$x]['term'] = array();
|
||||||
|
$items[$x]['term'][] = $t;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -96,12 +96,19 @@ function notifier_run($argv, $argc){
|
|||||||
);
|
);
|
||||||
if($h) {
|
if($h) {
|
||||||
foreach($h as $hh) {
|
foreach($h as $hh) {
|
||||||
$result = zot_notify($s[0],$hh['hubloc_callback'],'refresh',array(array(
|
$data = zot_build_packet($s[0],'refresh',array(array(
|
||||||
'guid' => $hh['hubloc_guid'],
|
'guid' => $hh['hubloc_guid'],
|
||||||
'guid_sig' => $hh['hubloc_guid_sig'],
|
'guid_sig' => $hh['hubloc_guid_sig'],
|
||||||
'url' => $hh['hubloc_url'])
|
'url' => $hh['hubloc_url'])
|
||||||
));
|
));
|
||||||
// should probably queue these
|
if($data) {
|
||||||
|
$result = zot_zot($hh['hubloc_callback'],$data);
|
||||||
|
|
||||||
|
// if(! $result['success']
|
||||||
|
// zot_queue_item();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -158,19 +165,77 @@ function notifier_run($argv, $argc){
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
// Normal items - find ancestors
|
// Normal items
|
||||||
|
|
||||||
$r = q("SELECT * FROM `item` WHERE `id` = %d and item_restrict = 0 LIMIT 1",
|
// Fetch the target item
|
||||||
|
|
||||||
|
$r = q("SELECT * FROM item WHERE id = %d and parent != 0 LIMIT 1",
|
||||||
intval($item_id)
|
intval($item_id)
|
||||||
);
|
);
|
||||||
|
|
||||||
if((! $r) || (! intval($r[0]['parent']))) {
|
if(! $r)
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
xchan_query($r);
|
xchan_query($r);
|
||||||
|
$r = fetch_post_tags($r);
|
||||||
|
|
||||||
$target_item = $r[0];
|
$target_item = $r[0];
|
||||||
|
|
||||||
|
if($target_item['id'] == $target_item['parent']) {
|
||||||
|
$parent_item = $target_item;
|
||||||
|
$top_level_post = true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// fetch the parent item
|
||||||
|
$r = q("SELECT * from item where id = %d order by id asc",
|
||||||
|
intval($parent_id)
|
||||||
|
);
|
||||||
|
if(! $r)
|
||||||
|
return;
|
||||||
|
xchan_query($r);
|
||||||
|
$r = fetch_post_tags($r);
|
||||||
|
|
||||||
|
$parent_item = $r[0];
|
||||||
|
$top_level_post = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$relay_to_owner = (((! $top_level_post) && ($target_item['item_flags'] & ITEM_ORIGIN)) ? true : false);
|
||||||
|
if($relay_to_owner) {
|
||||||
|
logger('notifier: followup relay', LOGGER_DEBUG);
|
||||||
|
$recipients = array($parent_item['owner_xchan']);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
logger('notifier: normal distribution', LOGGER_DEBUG);
|
||||||
|
$recipients = collect_recipients($parent_item);
|
||||||
|
|
||||||
|
// FIXME add any additional recipients such as mentions, etc.
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$encoded_item = encode_item($target_item);
|
||||||
|
|
||||||
|
logger('notifier: encoded item: ' . print_r($encoded_item,true));
|
||||||
|
|
||||||
|
stringify_array_elms($recipients);
|
||||||
|
|
||||||
|
logger('notifier: recipients: ' . print_r($recipients,true));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// get all hubs we need to talk to.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$parent_id = intval($r[0]['parent']);
|
$parent_id = intval($r[0]['parent']);
|
||||||
$uid = $r[0]['uid'];
|
$uid = $r[0]['uid'];
|
||||||
$updated = $r[0]['edited'];
|
$updated = $r[0]['edited'];
|
||||||
@ -290,8 +355,6 @@ function notifier_run($argv, $argc){
|
|||||||
$public_message = false; // private recipients, not public
|
$public_message = false; // private recipients, not public
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME - expand_acl now takes xchan_hashes
|
|
||||||
|
|
||||||
$allow_people = expand_acl($parent['allow_cid']);
|
$allow_people = expand_acl($parent['allow_cid']);
|
||||||
$allow_groups = expand_groups(expand_acl($parent['allow_gid']));
|
$allow_groups = expand_groups(expand_acl($parent['allow_gid']));
|
||||||
$deny_people = expand_acl($parent['deny_cid']);
|
$deny_people = expand_acl($parent['deny_cid']);
|
||||||
@ -304,6 +367,10 @@ function notifier_run($argv, $argc){
|
|||||||
// proc_run('php','include/notifier.php','uplink',$item_id);
|
// proc_run('php','include/notifier.php','uplink',$item_id);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$conversants = array();
|
$conversants = array();
|
||||||
|
|
||||||
foreach($items as $item) {
|
foreach($items as $item) {
|
||||||
|
@ -1710,7 +1710,8 @@ function xchan_query(&$items) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(count($arr)) {
|
if(count($arr)) {
|
||||||
$chans = q("select * from xchan where xchan_hash in (" . implode(',', $arr) . ")");
|
$chans = q("select xchan.*,hubloc.* from xchan left join hubloc on hubloc_hash = xchan_hash
|
||||||
|
where xchan_hash in (" . implode(',', $arr) . ") and ( hubloc_flags & " . intval(HUBLOC_FLAGS_PRIMARY) . " )");
|
||||||
}
|
}
|
||||||
if($items && count($items) && $chans && count($chans)) {
|
if($items && count($items) && $chans && count($chans)) {
|
||||||
for($x = 0; $x < count($items); $x ++) {
|
for($x = 0; $x < count($items); $x ++) {
|
||||||
|
@ -91,7 +91,7 @@ function acl_init(&$a){
|
|||||||
|
|
||||||
if ($type=='' || $type=='g'){
|
if ($type=='' || $type=='g'){
|
||||||
|
|
||||||
$r = q("SELECT `group`.`id`, `group`.`name`, GROUP_CONCAT(DISTINCT `group_member`.`contact-id` SEPARATOR ',') as uids
|
$r = q("SELECT `group`.`id`, `group`.`name`, GROUP_CONCAT(DISTINCT `group_member`.`xchan` SEPARATOR ',') as uids
|
||||||
FROM `group`,`group_member`
|
FROM `group`,`group_member`
|
||||||
WHERE `group`.`deleted` = 0 AND `group`.`uid` = %d
|
WHERE `group`.`deleted` = 0 AND `group`.`uid` = %d
|
||||||
AND `group_member`.`gid`=`group`.`id`
|
AND `group_member`.`gid`=`group`.`id`
|
||||||
|
@ -1 +1 @@
|
|||||||
2012-11-14.138
|
2012-11-15.139
|
||||||
|
Reference in New Issue
Block a user