diff options
Diffstat (limited to 'include/items.php')
-rwxr-xr-x | include/items.php | 83 |
1 files changed, 69 insertions, 14 deletions
diff --git a/include/items.php b/include/items.php index 0373dcb0d..ba39fd7ac 100755 --- a/include/items.php +++ b/include/items.php @@ -113,6 +113,26 @@ function collect_recipients($item, &$private_envelope) { // if($policy === 'pub') // $recipients[] = $sys['xchan_hash']; } + + // Add the authors of any posts in this thread, if they are known to us. + // This is specifically designed to forward wall-to-wall posts to the original author, + // in case they aren't a connection but have permission to write on our wall. + // This is important for issue tracker channels. It should be a no-op for most channels. + // Whether or not they will accept the delivery is not determined here, but should + // be taken into account by zot:process_delivery() + + $r = q("select author_xchan from item where parent = %d", + intval($item['parent']) + ); + if($r) { + foreach($r as $rv) { + if(! in_array($rv['author_xchan'],$recipients)) { + $recipients[] = $rv['author_xchan']; + } + } + } + + } // This is a somewhat expensive operation but important. @@ -214,11 +234,10 @@ function can_comment_on_post($observer_xchan, $item) { return true; break; case 'public': - // We don't allow public comments yet, until a policy - // for dealing with anonymous comments is in place with - // a means to moderate comments. Until that time, return - // false. - return false; + // We don't really allow or support public comments yet, but anonymous + // folks won't ever reach this point (as $observer_xchan will be empty). + // This means the viewer has an xchan and we can identify them. + return true; break; case 'any connections': case 'contacts': @@ -695,8 +714,9 @@ function get_item_elements($x,$allow_code = false) { // hub and verify that they are legit - or else we're going to toss the post. We only need to do this // once, and after that your hub knows them. Sure some info is in the post, but it's only a transit identifier // and not enough info to be able to look you up from your hash - which is the only thing stored with the post. - - if(($xchan_hash = import_author_xchan($x['author'])) !== false) + + $xchan_hash = import_author_xchan($x['author']); + if($xchan_hash) $arr['author_xchan'] = $xchan_hash; else return array(); @@ -705,7 +725,8 @@ function get_item_elements($x,$allow_code = false) { if($arr['author_xchan'] === make_xchan_hash($x['owner']['guid'],$x['owner']['guid_sig'])) $arr['owner_xchan'] = $arr['author_xchan']; else { - if(($xchan_hash = import_author_xchan($x['owner'])) !== false) + $xchan_hash = import_author_xchan($x['owner']); + if($xchan_hash) $arr['owner_xchan'] = $xchan_hash; else return array(); @@ -1166,7 +1187,7 @@ function encode_item_xchan($xchan) { $ret['name'] = $xchan['xchan_name']; $ret['address'] = $xchan['xchan_addr']; - $ret['url'] = (($xchan['hubloc_url']) ? $xchan['hubloc_url'] : $xchan['xchan_url']); + $ret['url'] = $xchan['xchan_url']; $ret['network'] = $xchan['xchan_network']; $ret['photo'] = array('mimetype' => $xchan['xchan_photo_mimetype'], 'src' => $xchan['xchan_photo_m']); $ret['guid'] = $xchan['xchan_guid']; @@ -1624,9 +1645,23 @@ function item_store($arr, $allow_exec = false, $deliver = true) { $arr['expires'] = ((x($arr,'expires') !== false) ? datetime_convert('UTC','UTC',$arr['expires']) : NULL_DATE); $arr['commented'] = ((x($arr,'commented') !== false) ? datetime_convert('UTC','UTC',$arr['commented']) : datetime_convert()); $arr['comments_closed'] = ((x($arr,'comments_closed') !== false) ? datetime_convert('UTC','UTC',$arr['comments_closed']) : NULL_DATE); + $arr['html'] = ((array_key_exists('html',$arr)) ? $arr['html'] : ''); + + if($deliver) { + $arr['received'] = datetime_convert(); + $arr['changed'] = datetime_convert(); + } + else { + + // When deliver flag is false, we are *probably* performing an import or bulk migration. + // If one updates the changed timestamp it will be made available to zotfeed and delivery + // will still take place through backdoor methods. Since these fields are rarely used + // otherwise, just preserve the original timestamp. + + $arr['received'] = ((x($arr,'received') !== false) ? datetime_convert('UTC','UTC',$arr['received']) : datetime_convert()); + $arr['changed'] = ((x($arr,'changed') !== false) ? datetime_convert('UTC','UTC',$arr['changed']) : datetime_convert()); + } - $arr['received'] = datetime_convert(); - $arr['changed'] = datetime_convert(); $arr['location'] = ((x($arr,'location')) ? notags(trim($arr['location'])) : ''); $arr['coord'] = ((x($arr,'coord')) ? notags(trim($arr['coord'])) : ''); $arr['parent_mid'] = ((x($arr,'parent_mid')) ? notags(trim($arr['parent_mid'])) : ''); @@ -2033,8 +2068,22 @@ function item_store_update($arr,$allow_exec = false, $deliver = true) { $arr['comments_closed'] = $orig[0]['comments_closed']; $arr['commented'] = $orig[0]['commented']; - $arr['received'] = datetime_convert(); - $arr['changed'] = datetime_convert(); + + if($deliver) { + $arr['received'] = datetime_convert(); + $arr['changed'] = datetime_convert(); + } + else { + + // When deliver flag is false, we are *probably* performing an import or bulk migration. + // If one updates the changed timestamp it will be made available to zotfeed and delivery + // will still take place through backdoor methods. Since these fields are rarely used + // otherwise, just preserve the original timestamp. + + $arr['received'] = $orig[0]['received']; + $arr['changed'] = $orig[0]['changed']; + } + $arr['route'] = ((array_key_exists('route',$arr)) ? trim($arr['route']) : $orig[0]['route']); $arr['diaspora_meta'] = ((x($arr,'diaspora_meta')) ? $arr['diaspora_meta'] : $orig[0]['diaspora_meta']); $arr['location'] = ((x($arr,'location')) ? notags(trim($arr['location'])) : $orig[0]['location']); @@ -2213,7 +2262,7 @@ function store_diaspora_comment_sig($datarray, $channel, $parent_item, $post_id, logger('storing diaspora comment signature',LOGGER_DEBUG); - $diaspora_handle = $channel['channel_address'] . '@' . App::get_hostname(); + $diaspora_handle = channel_reddress($channel); $signed_text = $datarray['mid'] . ';' . $parent_item['mid'] . ';' . $signed_body . ';' . $diaspora_handle; @@ -2243,6 +2292,11 @@ function store_diaspora_comment_sig($datarray, $channel, $parent_item, $post_id, function send_status_notifications($post_id,$item) { + // only send notifications for comments + + if($item['mid'] == $item['parent_mid']) + return; + $notify = false; $unfollowed = false; @@ -2258,6 +2312,7 @@ function send_status_notifications($post_id,$item) { if($item['author_xchan'] === $r[0]['channel_hash']) return; + // I'm the owner - notify me if($item['owner_hash'] === $r[0]['channel_hash']) |