Merge pull request #431 from fermionic/diaspora-relays-and-tags

Couple of Diaspora fixes
This commit is contained in:
friendica 2012-08-10 16:03:37 -07:00
commit f8b969e252
4 changed files with 92 additions and 16 deletions

View file

@ -196,6 +196,14 @@ function bb2diaspora($Text,$preserve_nl = false, $fordiaspora = true) {
// The bbcode parser now handles youtube-links (and the other stuff) correctly. // The bbcode parser now handles youtube-links (and the other stuff) correctly.
// Additionally the html code is now fixed so that lists are now working. // Additionally the html code is now fixed so that lists are now working.
/**
* Transform #tags, strip off the [url] and replace spaces with underscore
*/
$Text = preg_replace_callback('/#\[url\=(\w+.*?)\](\w+.*?)\[\/url\]/i', create_function('$match',
'return \'#\'. str_replace(\' \', \'_\', $match[2]);'
), $Text);
// Converting images with size parameters to simple images. Markdown doesn't know it. // Converting images with size parameters to simple images. Markdown doesn't know it.
$Text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $Text); $Text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $Text);

View file

@ -102,6 +102,37 @@ function diaspora_dispatch($importer,$msg) {
return $ret; return $ret;
} }
function diaspora_handle_from_contact($contact_id) {
$handle = False;
logger("diaspora_handle_from_contact: contact id is " . $contact_id, LOGGER_DEBUG);
$r = q("SELECT network, addr, self, url, nick FROM contact WHERE id = %d",
intval($contact_id)
);
if($r) {
$contact = $r[0];
logger("diaspora_handle_from_contact: contact 'self' = " . $contact['self'] . " 'url' = " . $contact['url'], LOGGER_DEBUG);
if($contact['network'] === NETWORK_DIASPORA) {
$handle = $contact['addr'];
// logger("diaspora_handle_from_contact: contact id is a Diaspora person, handle = " . $handle, LOGGER_DEBUG);
}
elseif(($contact['network'] === NETWORK_DFRN) || ($contact['self'] == 1)) {
$baseurl_start = strpos($contact['url'],'://') + 3;
$baseurl_length = strpos($contact['url'],'/profile') - $baseurl_start; // allows installations in a subdirectory--not sure how Diaspora will handle
$baseurl = substr($contact['url'], $baseurl_start, $baseurl_length);
$handle = $contact['nick'] . '@' . $baseurl;
// logger("diaspora_handle_from_contact: contact id is a DFRN person, handle = " . $handle, LOGGER_DEBUG);
}
}
return $handle;
}
function diaspora_get_contact_by_handle($uid,$handle) { function diaspora_get_contact_by_handle($uid,$handle) {
$r = q("SELECT * FROM `contact` WHERE `network` = '%s' AND `uid` = %d AND `addr` = '%s' LIMIT 1", $r = q("SELECT * FROM `contact` WHERE `network` = '%s' AND `uid` = %d AND `addr` = '%s' LIMIT 1",
dbesc(NETWORK_DIASPORA), dbesc(NETWORK_DIASPORA),
@ -1282,7 +1313,7 @@ function diaspora_comment($importer,$xml,$msg) {
// the existence of parent_author_signature means the parent_author or owner // the existence of parent_author_signature means the parent_author or owner
// is already relaying. // is already relaying.
proc_run('php','include/notifier.php','comment',$message_id); proc_run('php','include/notifier.php','comment-import',$message_id);
} }
$myconv = q("SELECT `author-link`, `author-avatar`, `parent` FROM `item` WHERE `parent-uri` = '%s' AND `uid` = %d AND `parent` != 0 AND `deleted` = 0 ", $myconv = q("SELECT `author-link`, `author-avatar`, `parent` FROM `item` WHERE `parent-uri` = '%s' AND `uid` = %d AND `parent` != 0 AND `deleted` = 0 ",
@ -1867,7 +1898,7 @@ EOT;
// is already relaying. The parent_item['origin'] indicates the message was created on our system // is already relaying. The parent_item['origin'] indicates the message was created on our system
if(($parent_item['origin']) && (! $parent_author_signature)) if(($parent_item['origin']) && (! $parent_author_signature))
proc_run('php','include/notifier.php','comment',$message_id); proc_run('php','include/notifier.php','comment-import',$message_id);
return; return;
} }
@ -1993,7 +2024,7 @@ function diaspora_signed_retraction($importer,$xml,$msg) {
// is already relaying. // is already relaying.
logger('diaspora_signed_retraction: relaying relayable_retraction'); logger('diaspora_signed_retraction: relaying relayable_retraction');
proc_run('php','include/notifier.php','relayable_retraction',$r[0]['id']); proc_run('php','include/notifier.php','drop',$r[0]['id']);
} }
} }
} }
@ -2153,12 +2184,6 @@ function diaspora_send_status($item,$owner,$contact,$public_batch = false) {
} }
} }
*/ */
/**
* Transform #tags, strip off the [url] and replace spaces with underscore
*/
$body = preg_replace_callback('/#\[url\=(\w+.*?)\](\w+.*?)\[\/url\]/i', create_function('$match',
'return \'#\'. str_replace(\' \', \'_\', $match[2]);'
), $body);
//if(strlen($title)) //if(strlen($title))
// $body = "[b]".html_entity_decode($title)."[/b]\n\n".$body; // $body = "[b]".html_entity_decode($title)."[/b]\n\n".$body;
@ -2344,8 +2369,8 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
// return the items ordered by `item`.`id`, in which case the wrong item is chosen as the parent. // return the items ordered by `item`.`id`, in which case the wrong item is chosen as the parent.
// The only item with `parent` and `id` as the parent id is the parent item. // The only item with `parent` and `id` as the parent id is the parent item.
$p = q("select guid, type, uri, `parent-uri` from item where parent = %d and id = %d limit 1", $p = q("select guid, type, uri, `parent-uri` from item where parent = %d and id = %d limit 1",
intval($item['parent']), intval($item['parent']),
intval($item['parent']) intval($item['parent'])
); );
//} //}
if(count($p)) if(count($p))
@ -2368,7 +2393,6 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
$like = true; $like = true;
$target_type = ( $parent['uri'] === $parent['parent-uri'] ? 'Post' : 'Comment'); $target_type = ( $parent['uri'] === $parent['parent-uri'] ? 'Post' : 'Comment');
// $target_type = (strpos($parent['type'], 'comment') ? 'Comment' : 'Post');
// $positive = (($item['deleted']) ? 'false' : 'true'); // $positive = (($item['deleted']) ? 'false' : 'true');
$positive = 'true'; $positive = 'true';
@ -2382,7 +2406,7 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
// fetch the original signature if the relayable was created by a Diaspora // fetch the original signature if the relayable was created by a Diaspora
// or DFRN user. Relayables for other networks are not supported. // or DFRN user. Relayables for other networks are not supported.
$r = q("select * from sign where " . $sql_sign_id . " = %d limit 1", /* $r = q("select * from sign where " . $sql_sign_id . " = %d limit 1",
intval($item['id']) intval($item['id'])
); );
if(count($r)) { if(count($r)) {
@ -2398,7 +2422,25 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
// function is called // function is called
logger('diaspora_send_relay: original author signature not found, cannot send relayable'); logger('diaspora_send_relay: original author signature not found, cannot send relayable');
return; return;
} }*/
/* Since the author signature is only checked by the parent, not by the relay recipients,
* I think it may not be necessary for us to do so much work to preserve all the original
* signatures. The important thing that Diaspora DOES need is the original creator's handle.
* Let's just generate that and forget about all the original author signature stuff.
*
* Note: this might be more of an problem if we want to support likes on comments for older
* versions of Diaspora (diaspora-pistos), but since there are a number of problems with
* doing that, let's ignore it for now.
*
* Currently, only DFRN contacts are supported. StatusNet shouldn't be hard, but it hasn't
* been done yet
*/
$handle = diaspora_handle_from_contact($item['contact-id']);
if(! $handle)
return;
if($relay_retract) if($relay_retract)
$sender_signed_text = $item['guid'] . ';' . $target_type; $sender_signed_text = $item['guid'] . ';' . $target_type;

View file

@ -2459,6 +2459,7 @@ function local_delivery($importer,$data) {
$is_a_remote_delete = false; $is_a_remote_delete = false;
// POSSIBLE CLEANUP --> Why select so many fields when only forum_mode and wall are used?
$r = q("select `item`.`id`, `item`.`uri`, `item`.`tag`, `item`.`forum_mode`,`item`.`origin`,`item`.`wall`, $r = q("select `item`.`id`, `item`.`uri`, `item`.`tag`, `item`.`forum_mode`,`item`.`origin`,`item`.`wall`,
`contact`.`name`, `contact`.`url`, `contact`.`thumb` from `item` `contact`.`name`, `contact`.`url`, `contact`.`thumb` from `item`
LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`

View file

@ -18,6 +18,31 @@ require_once('include/html2plain.php');
* us by hosting providers. * us by hosting providers.
*/ */
/*
* The notifier is typically called with:
*
* proc_run('php', "include/notifier.php", COMMAND, ITEM_ID);
*
* where COMMAND is one of the following:
*
* activity (in diaspora.php, dfrn_confirm.php, profiles.php)
* comment-import (in diaspora.php, items.php)
* comment-new (in item.php)
* drop (in diaspora.php, items.php, photos.php)
* edit_post (in item.php)
* event (in events.php)
* expire (in items.php)
* like (in like.php, poke.php)
* mail (in message.php)
* suggest (in fsuggest.php)
* tag (in photos.php, poke.php, tagger.php)
* tgroup (in items.php)
* wall-new (in photos.php, item.php)
*
* and ITEM_ID is the id of the item in the database that needs to be sent to others.
*/
function notifier_run($argv, $argc){ function notifier_run($argv, $argc){
global $a, $db; global $a, $db;