diff --git a/include/delivery.php b/include/delivery.php
index 62c9f9202..235b766c5 100644
--- a/include/delivery.php
+++ b/include/delivery.php
@@ -509,13 +509,13 @@ function delivery_run($argv, $argc){
// unsupported
break;
}
- elseif(($target_item['deleted']) && ($top_level) && ($target_item['verb'] !== ACTIVITY_LIKE)) {
+ elseif(($target_item['deleted']) && ($target_item['uri'] === $target_item['parent-uri']) && ($target_item['verb'] !== ACTIVITY_LIKE)) {
logger('delivery: diaspora retract: ' . $loc);
// diaspora delete,
diaspora_send_retraction($target_item,$owner,$contact,$public_message);
break;
}
- elseif($target_item['parent'] != $target_item['id']) {
+ elseif($target_item['uri'] !== $target_item['parent-uri']) {
logger('delivery: diaspora relay: ' . $loc);
diff --git a/include/diaspora.php b/include/diaspora.php
index 584be5ef2..10c56564b 100644
--- a/include/diaspora.php
+++ b/include/diaspora.php
@@ -1168,22 +1168,7 @@ function diaspora_comment($importer,$xml,$msg) {
);
}
- if(($parent_item['origin']) && (! $parent_author_signature)) { if(($parent_item['origin']) && (! $parent_author_signature)) {
- q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
- intval($message_id),
- dbesc($author_signed_data),
- dbesc(base64_encode($author_signature)),
- dbesc($diaspora_handle)
- );
-
- // if the message isn't already being relayed, notify others
- // the existence of parent_author_signature means the parent_author or owner
- // is already relaying.
-
- proc_run('php','include/notifier.php','comment',$message_id);
- }
-
-
+ if(($parent_item['origin']) && (! $parent_author_signature)) {
q("insert into sign (`iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
intval($message_id),
dbesc($author_signed_data),
@@ -1846,7 +1831,7 @@ function diaspora_signed_retraction($importer,$xml,$msg) {
}
- if($type === 'StatusMessage' || $type === 'Comment') {
+ if($type === 'StatusMessage' || $type === 'Comment' || $type === 'Like') {
$r = q("select * from item where guid = '%s' and uid = %d and not file like '%%[%%' limit 1",
dbesc($guid),
intval($importer['uid'])
@@ -1854,6 +1839,7 @@ function diaspora_signed_retraction($importer,$xml,$msg) {
if(count($r)) {
if(link_compare($r[0]['author-link'],$contact['url'])) {
q("update item set `deleted` = 1, `edited` = '%s', `changed` = '%s', `body` = '' , `title` = '' where `id` = %d limit 1",
+ dbesc(datetime_convert()),
dbesc(datetime_convert()),
intval($r[0]['id'])
);
@@ -2184,16 +2170,6 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
// I'm assuming for now that "$owner" will be the user of the top-level post for retractions too. Be
// aware that another reasonable possibility is that it's the "$owner" of the deleted comment.
-// TODO
-// CHECK 1. If we receive a retraction from Diaspora to be relayed by us, we need to insert the signature
-// into the DB and call notifier.php
-// CHECK 2. diaspora_send_retraction() needs to be modified to send
-// Diaspora a retraction for it to relay when appropriate
-// CHECK 3. notifier.php (and delivery.php?) need to be modified to call the right functions for the right
-// retraction situation
-// 4. If possible, modify notifier.php (and delivery.php?) to remove the relayable retraction's signature
-// from the DB after finishing with relaying retractions
-
$a = get_app();
@@ -2216,20 +2192,20 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
$like = false;
$relay_retract = false;
$sql_sign_id = 'iid';
- if($item['verb'] === ACTIVITY_LIKE) {
+ if( $item['deleted']) {
+ $tpl = get_markup_template('diaspora_relayable_retraction.tpl');
+ $relay_retract = true;
+ $sql_sign_id = 'retract_iid';
+ $target_type = ( ($item['verb'] === ACTIVITY_LIKE) ? 'Like' : 'Comment');
+ }
+ elseif($item['verb'] === ACTIVITY_LIKE) {
$tpl = get_markup_template('diaspora_like_relay.tpl');
$like = true;
$target_type = 'Post';
$positive = (($item['deleted']) ? 'false' : 'true');
}
- elseif(! $item['deleted']) {
- $tpl = get_markup_template('diaspora_comment_relay.tpl');
- }
else {
- $tpl = get_markup_template('diaspora_relayable_retraction.tpl');
- $relay_retract = true;
- $sql_sign_id = 'retract_iid';
- $target_type = 'Comment';
+ $tpl = get_markup_template('diaspora_comment_relay.tpl');
}
$body = $item['body'];
diff --git a/include/items.php b/include/items.php
index 8858ca64f..897036c26 100644
--- a/include/items.php
+++ b/include/items.php
@@ -3281,33 +3281,33 @@ function drop_item($id,$interactive = true) {
}
// Add a relayable_retraction signature for Diaspora. Note that we can't add a target_author_signature
- // if the comment was deleted by a remote user. That should be ok, because if a remote user is deleting
- // the comment, that means we're the home of the post, and Diaspora will only
+ // if the comment/like was deleted by a remote user. That should be ok, because if a remote user is deleting
+ // the comment/like, that means we're the home of the post, and Diaspora will only
// check the parent_author_signature of retractions that it doesn't have to relay further
- if( strcmp($item['type'], 'activity') != 0) {
- $signed_text = $item['guid'] . ';' . 'Comment';
+ $signed_text = $item['guid'] . ';' . ( ($item['verb'] === ACTIVITY_LIKE) ? 'Like' : 'Comment');
- if(local_user() == $item['uid']) {
+ if(local_user() == $item['uid']) {
- $handle = $a->user['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
- $authorsig = base64_encode(rsa_sign($signed_text,$a->user['prvkey'],'sha256'));
- }
- else {
- $r = q("SELECT `nick`, `url` FROM `contact` WHERE `id` = '%d' LIMIT 1",
- $item['contact-id']
- );
- if(count($r))
- $handle = $r['nick'] . '@' . substr($r['url'], strpos($r['url'],'://') + 3, strpos($r['url'],'/profile') - 1);
- }
-
- if(isset($handle)
- q("insert into sign (`retract_iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
- intval($item['id']),
- dbesc($signed_text),
- dbesc($authorsig),
- dbesc($handle)
- );
+ $handle = $a->user['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3);
+ $authorsig = base64_encode(rsa_sign($signed_text,$a->user['prvkey'],'sha256'));
}
+ else {
+ $r = q("SELECT `nick`, `url` FROM `contact` WHERE `id` = '%d' LIMIT 1",
+ $item['contact-id']
+ );
+ if(count($r)) {
+ $handle = $r['nick'] . '@' . substr($r['url'], strpos($r['url'],'://') + 3, strpos($r['url'],'/profile') - 1);
+ $authorsig = '';
+ }
+ }
+
+ if(isset($handle))
+ q("insert into sign (`retract_iid`,`signed_text`,`signature`,`signer`) values (%d,'%s','%s','%s') ",
+ intval($item['id']),
+ dbesc($signed_text),
+ dbesc($authorsig),
+ dbesc($handle)
+ );
}
$drop_id = intval($item['id']);
diff --git a/include/notifier.php b/include/notifier.php
index 68f230a05..be50366d5 100644
--- a/include/notifier.php
+++ b/include/notifier.php
@@ -738,7 +738,7 @@ function notifier_run($argv, $argc){
// unsupported
break;
}
- elseif(($target_item['deleted']) && ($top_level || $followup) && ($target_item['verb'] !== ACTIVITY_LIKE)) {
+ elseif(($target_item['deleted']) && (($target_item['uri'] === $target_item['parent-uri']) || $followup) && ($target_item['verb'] !== ACTIVITY_LIKE)) {
// diaspora delete, including relayable_retractions that need to be relayed
diaspora_send_retraction($target_item,$owner,$contact);
break;
@@ -748,7 +748,7 @@ function notifier_run($argv, $argc){
diaspora_send_followup($target_item,$owner,$contact);
break;
}
- elseif($target_item['parent'] != $target_item['id']) {
+ elseif($target_item['uri'] !== $target_item['parent-uri']) {
// we are the relay - send comments, likes, unlikes and relayable_retractions to our conversants
diaspora_send_relay($target_item,$owner,$contact);
break;
diff --git a/update.php b/update.php
index 9d534a127..b542d75ba 100644
--- a/update.php
+++ b/update.php
@@ -1276,7 +1276,7 @@ function update_1146() {
/*
function update_xxxx() {
- $r1 = q("ALTER TABLE `sign` MODIFY `iid` SET DEFAULT '0'");
+ $r1 = q("ALTER TABLE `sign` ALTER `iid` SET DEFAULT '0'");
$r2 = q("ALTER TABLE `sign` ADD `retract_iid` INT(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `iid`");
$r3 = q("ALTER TABLE `sign` ADD INDEX ( `retract_iid` )");
if((! $r1) || (! $r2) || (! $r3))
diff --git a/view/diaspora_like_relay.tpl b/view/diaspora_like_relay.tpl
old mode 100644
new mode 100755
index 65559b05b..8b67f4de3
--- a/view/diaspora_like_relay.tpl
+++ b/view/diaspora_like_relay.tpl
@@ -5,9 +5,9 @@
$target_type
$parent_guid
$parentsig
- $authrosig
+ $authorsig
$positive
$handle
-
\ No newline at end of file
+
diff --git a/view/diaspora_relayable_retraction.tpl b/view/diaspora_relayable_retraction.tpl
old mode 100644
new mode 100755
index 27936f7f3..73cff8343
--- a/view/diaspora_relayable_retraction.tpl
+++ b/view/diaspora_relayable_retraction.tpl
@@ -3,7 +3,7 @@
$target_type
$guid
- $parentauthorsig
+ $parentsig
$authorsig
$handle