X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=mod%2Fdfrn_notify.php;h=ecab9ea72a9515a46863feb21f9e0f2869982e7b;hb=557ebe4700c477aeba043594f7b929b1129be191;hp=c078afe38b9c58715afed854fcc457bb30ec6b9f;hpb=766b31707037a82ffd9140bfe599c27f4ef01495;p=friendica.git diff --git a/mod/dfrn_notify.php b/mod/dfrn_notify.php index c078afe38b..ecab9ea72a 100644 --- a/mod/dfrn_notify.php +++ b/mod/dfrn_notify.php @@ -1,7 +1,7 @@ set_raw_data($data); + $feed->enable_order_by_date(false); + $feed->init(); + + foreach($feed->get_items() as $item) { + + $deleted = false; + + $rawdelete = $item->get_item_tags("http://purl.org/atompub/tombstones/1.0", 'deleted-entry'); + if(isset($rawdelete[0]['attribs']['']['ref'])) { + $uri = $rawthread[0]['attribs']['']['ref']; + $deleted = true; + if(isset($rawdelete[0]['attribs']['']['when'])) { + $when = $rawthread[0]['attribs']['']['when']; + $when = datetime_convert('UTC','UTC', $when, 'Y-m-d H:i:s'); + } + else + $when = datetime_convert('UTC','UTC','now','Y-m-d H:i:s'); + } + if($deleted) { + $r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", + dbesc($uri), + intval($importer['uid']) + ); + if(count($r)) { + if($r[0]['uri'] == $r[0]['parent-uri']) { + $r = q("UPDATE `item` SET `deleted` = 1, `edited` = '%s' + WHERE `parent-uri` = '%s'" + dbesc($when), + dbesc($r[0]['uri']) + ); + } + else { + $r = q("UPDATE `item` SET `deleted` = 1, `edited` = '%s' + WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", + dbesc($when), + dbesc($uri), + intval($importer['uid']) + ); + } + } + continue; + } + + $is_reply = false; + $item_id = $item->get_id(); + $rawthread = $item->get_item_tags("http://purl.org/syndication/thread/1.0",'in-reply-to'); + if(isset($rawthread[0]['attribs']['']['ref'])) { + $is_reply = true; + $parent_uri = $rawthread[0]['attribs']['']['ref']; + } + + + if($is_reply) { + if($feed->get_item_quantity() == 1) { + // remote reply to our post. Import and then notify everybody else. + $datarray = get_atom_elements($item); + $urn = explode(':',$parent_urn); + $datarray['type'] = 'remote-comment'; + $datarray['parent-uri'] = $parent_uri; + $datarray['uid'] = $importer['uid']; + $datarray['contact-id'] = $importer['id']; + $posted_id = post_remote($a,$datarray); + + $r = q("SELECT `parent` FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1", + intval($posted_id), + intval($importer['uid']) + ); + if(count($r)) { + $r1 = q("UPDATE `item` SET `last-child` = 0 WHERE `uid` = %d AND `parent` = %d", + intval($importer['uid']), + intval($r[0]['parent']) + ); + } + $r2 = q("UPDATE `item` SET `last-child` = 1 WHERE `uid` = %d AND `id` = %d LIMIT 1", + intval($importer['uid']), + intval($posted_id) + ); + + $url = $a->get_baseurl(); + + proc_close(proc_open("php include/notifier.php $url comment-import $posted_id > remote-notify.log &", array(),$foo)); + + xml_status(0); + return; + + } + else { + // regular comment that is part of this total conversation. Have we seen it? If not, import it. + + $item_id = $item->get_id(); + + $r = q("SELECT `uid`, `last-child`, `edited` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", + dbesc($item_id), + intval($importer['uid']) + ); + // FIXME update content if 'updated' changes + if(count($r)) { + $allow = $item->get_item_tags('http://purl.org/macgirvin/dfrn/1.0','comment-allow'); + if($allow && $allow[0]['data'] != $r[0]['last-child']) { + $r = q("UPDATE `item` SET `last-child` = %d WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", + intval($allow[0]['data']), + dbesc($item_id), + intval($importer['uid']) + ); + } + continue; + } + $datarray = get_atom_elements($item); + $datarray['parent-uri'] = $parent_uri; + $datarray['uid'] = $importer['uid']; + $datarray['contact-id'] = $importer['id']; + $r = post_remote($a,$datarray); + continue; + } + } + else { + // Head post of a conversation. Have we seen it? If not, import it. + + $item_id = $item->get_id(); + $r = q("SELECT `uid`, `last-child`, `edited` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", + dbesc($item_id), + intval($importer['uid']) + ); + if(count($r)) { + $allow = $item->get_item_tags('http://purl.org/macgirvin/dfrn/1.0','comment-allow'); + if($allow && $allow[0]['data'] != $r[0]['last-child']) { + $r = q("UPDATE `item` SET `last-child` = %d WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", + intval($allow[0]['data']), + dbesc($item_id), + intval($importer['uid']) + ); + } + continue; + } + + + $datarray = get_atom_elements($item); + $datarray['parent-uri'] = $item_id; + $datarray['uid'] = $importer['uid']; + $datarray['contact-id'] = $importer['id']; + $r = post_remote($a,$datarray); + continue; + + } + + } - + xml_status(0); + killme(); } - - - - - - - - - - function dfrn_notify_content(&$a) { if(x($_GET,'dfrn_id')) { @@ -58,7 +204,7 @@ function dfrn_notify_content(&$a) { intval(time() + 60 ) ); - $r = q("SELECT * FROM `contact` WHERE `issued-id` = '%s' AND `blocked` = 0 LIMIT 1", + $r = q("SELECT * FROM `contact` WHERE `issued-id` = '%s' AND `blocked` = 0 AND `pending` = 0 LIMIT 1", dbesc($_GET['dfrn_id'])); if((! count($r)) || (! strlen($r[0]['prvkey']))) $status = 1; @@ -66,8 +212,8 @@ function dfrn_notify_content(&$a) { $challenge = ''; openssl_private_encrypt($hash,$challenge,$r[0]['prvkey']); - - echo '' .$status . '' . $_GET['dfrn_id'] . '' + $challenge = bin2hex($challenge); + echo '' .$status . '' . $_GET['dfrn_id'] . '' . '' . $challenge . '' . "\r\n" ; session_write_close(); exit;