rework remote deletion

This commit is contained in:
Friendika 2011-02-08 04:25:27 -08:00
parent d280184b87
commit d8cd693f11
2 changed files with 95 additions and 77 deletions

View file

@ -1031,25 +1031,18 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0) {
} }
// Now process the feed
if($feed->get_item_quantity()) {
// in inverse date order // process any deleted entries
if ($datedir)
$items = array_reverse($feed->get_items());
else
$items = $feed->get_items();
foreach($items as $item) {
$del_entries = $feed->get_feed_tags(NAMESPACE_TOMB, 'deleted-entry');
if(is_array($del_entries) && count($del_entries)) {
foreach($del_entries as $dentry) {
$deleted = false; $deleted = false;
if(isset($dentry['attribs']['']['ref'])) {
$rawdelete = $item->get_item_tags( NAMESPACE_TOMB, 'deleted-entry'); $uri = $dentry['attribs']['']['ref'];
if(isset($rawdelete[0]['attribs']['']['ref'])) {
$uri = $rawthread[0]['attribs']['']['ref'];
$deleted = true; $deleted = true;
if(isset($rawdelete[0]['attribs']['']['when'])) { if(isset($dentry['attribs']['']['when'])) {
$when = $rawthread[0]['attribs']['']['when']; $when = $dentry['attribs']['']['when'];
$when = datetime_convert('UTC','UTC', $when, 'Y-m-d H:i:s'); $when = datetime_convert('UTC','UTC', $when, 'Y-m-d H:i:s');
} }
else else
@ -1063,6 +1056,10 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0) {
); );
if(count($r)) { if(count($r)) {
$item = $r[0]; $item = $r[0];
if(! $item['deleted'])
logger('dfrn_notify: deleting item ' . $item['id'] . ' uri=' . $item['uri'], LOGGER_DEBUG);
if($item['uri'] == $item['parent-uri']) { if($item['uri'] == $item['parent-uri']) {
$r = q("UPDATE `item` SET `deleted` = 1, `edited` = '%s', `changed` = '%s', $r = q("UPDATE `item` SET `deleted` = 1, `edited` = '%s', `changed` = '%s',
`body` = '', `title` = '' `body` = '', `title` = ''
@ -1103,9 +1100,24 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0) {
} }
} }
} }
continue;
} }
}
}
// Now process the feed
if($feed->get_item_quantity()) {
logger('consume_feed: feed item count = ' . $feed->get_item_quantity());
// in inverse date order
if ($datedir)
$items = array_reverse($feed->get_items());
else
$items = $feed->get_items();
foreach($items as $item) {
$is_reply = false; $is_reply = false;
$item_id = $item->get_id(); $item_id = $item->get_id();
@ -1115,7 +1127,6 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0) {
$parent_uri = $rawthread[0]['attribs']['']['ref']; $parent_uri = $rawthread[0]['attribs']['']['ref'];
} }
if(($is_reply) && is_array($contact)) { if(($is_reply) && is_array($contact)) {
// Have we seen it? If not, import it. // Have we seen it? If not, import it.

View file

@ -200,68 +200,77 @@ function dfrn_notify_post(&$a) {
logger('dfrn_notify: feed item count = ' . $feed->get_item_quantity()); logger('dfrn_notify: feed item count = ' . $feed->get_item_quantity());
foreach($feed->get_items() as $item) { // process any deleted entries
$deleted = false; $del_entries = $feed->get_feed_tags(NAMESPACE_TOMB, 'deleted-entry');
if(is_array($del_entries) && count($del_entries)) {
$rawdelete = $item->get_item_tags( NAMESPACE_TOMB , 'deleted-entry'); foreach($del_entries as $dentry) {
if(isset($rawdelete[0]['attribs']['']['ref'])) { $deleted = false;
$uri = $rawthread[0]['attribs']['']['ref']; if(isset($dentry['attribs']['']['ref'])) {
$deleted = true; $uri = $dentry['attribs']['']['ref'];
if(isset($rawdelete[0]['attribs']['']['when'])) { $deleted = true;
$when = $rawthread[0]['attribs']['']['when']; if(isset($dentry['attribs']['']['when'])) {
$when = datetime_convert('UTC','UTC', $when, 'Y-m-d H:i:s'); $when = $dentry['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');
} }
else if($deleted) {
$when = datetime_convert('UTC','UTC','now','Y-m-d H:i:s'); $r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
} dbesc($uri),
if($deleted) { intval($importer['importer_uid'])
$r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", );
dbesc($uri), if(count($r)) {
intval($importer['importer_uid']) $item = $r[0];
);
if(count($r)) { if(! $item['deleted'])
$item = $r[0]; logger('dfrn_notify: deleting item ' . $item['id'] . ' uri=' . $item['uri'], LOGGER_DEBUG);
if($item['uri'] == $item['parent-uri']) {
$r = q("UPDATE `item` SET `deleted` = 1, `edited` = '%s', `changed` = '%s' if($item['uri'] == $item['parent-uri']) {
WHERE `parent-uri` = '%s' AND `uid` = %d", $r = q("UPDATE `item` SET `deleted` = 1, `edited` = '%s', `changed` = '%s'
dbesc($when), WHERE `parent-uri` = '%s' AND `uid` = %d",
dbesc(datetime_convert()), dbesc($when),
dbesc($item['uri']),
intval($importer['importer_uid'])
);
}
else {
$r = q("UPDATE `item` SET `deleted` = 1, `edited` = '%s', `changed` = '%s'
WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
dbesc($when),
dbesc(datetime_convert()),
dbesc($uri),
intval($importer['importer_uid'])
);
if($item['last-child']) {
// ensure that last-child is set in case the comment that had it just got wiped.
$q("UPDATE `item` SET `last-child` = 0, `changed` = '%s' WHERE `parent-uri` = '%s' AND `uid` = %d ",
dbesc(datetime_convert()), dbesc(datetime_convert()),
dbesc($item['parent-uri']), dbesc($item['uri']),
intval($item['uid']) intval($importer['importer_uid'])
); );
// who is the last child now?
$r = q("SELECT `id` FROM `item` WHERE `parent-uri` = '%s' AND `type` != 'activity' AND `deleted` = 0 AND `uid` = %d
ORDER BY `created` DESC LIMIT 1",
dbesc($item['parent-uri']),
intval($importer['importer_uid'])
);
if(count($r)) {
q("UPDATE `item` SET `last-child` = 1 WHERE `id` = %d LIMIT 1",
intval($r[0]['id'])
);
}
} }
else {
$r = q("UPDATE `item` SET `deleted` = 1, `edited` = '%s', `changed` = '%s'
WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
dbesc($when),
dbesc(datetime_convert()),
dbesc($uri),
intval($importer['importer_uid'])
);
if($item['last-child']) {
// ensure that last-child is set in case the comment that had it just got wiped.
$q("UPDATE `item` SET `last-child` = 0, `changed` = '%s' WHERE `parent-uri` = '%s' AND `uid` = %d ",
dbesc(datetime_convert()),
dbesc($item['parent-uri']),
intval($item['uid'])
);
// who is the last child now?
$r = q("SELECT `id` FROM `item` WHERE `parent-uri` = '%s' AND `type` != 'activity' AND `deleted` = 0 AND `uid` = %d
ORDER BY `created` DESC LIMIT 1",
dbesc($item['parent-uri']),
intval($importer['importer_uid'])
);
if(count($r)) {
q("UPDATE `item` SET `last-child` = 1 WHERE `id` = %d LIMIT 1",
intval($r[0]['id'])
);
}
}
}
} }
} }
continue;
} }
}
foreach($feed->get_items() as $item) {
$is_reply = false; $is_reply = false;
$item_id = $item->get_id(); $item_id = $item->get_id();
@ -298,7 +307,7 @@ function dfrn_notify_post(&$a) {
); );
if(count($r)) if(count($r))
$parent = $r[0]['parent']; $parent = $r[0]['parent'];
if(! $is_like) { if(! $is_like) {
$r1 = q("UPDATE `item` SET `last-child` = 0, `changed` = '%s' WHERE `uid` = %d AND `parent` = %d", $r1 = q("UPDATE `item` SET `last-child` = 0, `changed` = '%s' WHERE `uid` = %d AND `parent` = %d",
dbesc(datetime_convert()), dbesc(datetime_convert()),
@ -332,12 +341,11 @@ function dfrn_notify_post(&$a) {
'$from' => $from, '$from' => $from,
'$body' => strip_tags(bbcode(stripslashes($datarray['body']))) '$body' => strip_tags(bbcode(stripslashes($datarray['body'])))
)); ));
$res = mail($importer['email'], $from . t(' commented on an item at ') . $a->config['sitename'], $res = mail($importer['email'], $from . t(' commented on an item at ') . $a->config['sitename'],
$email_tpl, "From: " . t('Administrator') . '@' . $a->get_hostname() ); $email_tpl, "From: " . t('Administrator') . '@' . $a->get_hostname() );
} }
} }
xml_status(0); xml_status(0);
// NOTREACHED // NOTREACHED
} }
@ -372,7 +380,6 @@ function dfrn_notify_post(&$a) {
$datarray['type'] = 'activity'; $datarray['type'] = 'activity';
$datarray['gravity'] = GRAVITY_LIKE; $datarray['gravity'] = GRAVITY_LIKE;
} }
$r = item_store($datarray); $r = item_store($datarray);
// find out if our user is involved in this conversation and wants to be notified. // find out if our user is involved in this conversation and wants to be notified.
@ -389,7 +396,7 @@ function dfrn_notify_post(&$a) {
continue; continue;
require_once('bbcode.php'); require_once('bbcode.php');
$from = stripslashes($datarray['author-name']); $from = stripslashes($datarray['author-name']);
$tpl = load_view_file('view/cmnt_received_eml.tpl'); $tpl = load_view_file('view/cmnt_received_eml.tpl');
$email_tpl = replace_macros($tpl, array( $email_tpl = replace_macros($tpl, array(
'$sitename' => $a->config['sitename'], '$sitename' => $a->config['sitename'],
'$siteurl' => $a->get_baseurl(), '$siteurl' => $a->get_baseurl(),