Merge pull request #1881 from annando/1509-diaspora-import

Diaspora: Improved duplicate check, check if post should be imported
This commit is contained in:
Tobias Diekershoff 2015-09-06 10:21:28 +02:00
commit c9faec49c1
2 changed files with 32 additions and 19 deletions

View file

@ -22,6 +22,12 @@ function diaspora_dispatch_public($msg) {
return; return;
} }
// Use a dummy importer to import the data for the public copy
$importer = array("uid" => 0, "page-flags" => PAGE_FREELOVE);
$result = diaspora_dispatch($importer,$msg);
logger("Dispatcher reported ".$result, LOGGER_DEBUG);
// Now distribute it to the followers
$r = q("SELECT `user`.* FROM `user` WHERE `user`.`uid` IN $r = q("SELECT `user`.* FROM `user` WHERE `user`.`uid` IN
( SELECT `contact`.`uid` FROM `contact` WHERE `contact`.`network` = '%s' AND `contact`.`addr` = '%s' ) ( SELECT `contact`.`uid` FROM `contact` WHERE `contact`.`network` = '%s' AND `contact`.`addr` = '%s' )
AND `account_expired` = 0 AND `account_removed` = 0 ", AND `account_expired` = 0 AND `account_removed` = 0 ",
@ -34,15 +40,8 @@ function diaspora_dispatch_public($msg) {
diaspora_dispatch($rr,$msg); diaspora_dispatch($rr,$msg);
} }
} }
else { else
logger('diaspora_public: no subscribers for '.$msg["author"].' '.print_r($msg, true)); logger('diaspora_public: no subscribers for '.$msg["author"].' '.print_r($msg, true));
// Use a dummy importer
$importer = array("uid" => 0, "page-flags" => PAGE_FREELOVE);
$result = diaspora_dispatch($importer,$msg);
logger("Dispatcher reported ".$result, LOGGER_DEBUG);
}
} }
@ -846,9 +845,8 @@ function diaspora_post($importer,$xml,$msg) {
} }
$message_id = $diaspora_handle . ':' . $guid; $message_id = $diaspora_handle . ':' . $guid;
$r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `guid` = '%s' LIMIT 1", $r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `guid` = '%s' LIMIT 1",
intval($importer['uid']), intval($importer['uid']),
dbesc($message_id),
dbesc($guid) dbesc($guid)
); );
if(count($r)) { if(count($r)) {
@ -965,9 +963,8 @@ function diaspora_store_by_guid($guid, $server, $uid = 0) {
$objecttype = $item["object-type"]; $objecttype = $item["object-type"];
$message_id = $author.':'.$guid; $message_id = $author.':'.$guid;
$r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `guid` = '%s' LIMIT 1", $r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `guid` = '%s' LIMIT 1",
intval($uid), intval($uid),
dbesc($message_id),
dbesc($guid) dbesc($guid)
); );
if(count($r)) if(count($r))
@ -975,9 +972,21 @@ function diaspora_store_by_guid($guid, $server, $uid = 0) {
$person = find_diaspora_person_by_handle($author); $person = find_diaspora_person_by_handle($author);
$contact_id = get_contact($person['url'], $uid);
$contacts = q("SELECT * FROM `contact` WHERE `id` = %d", intval($contact_id));
$importers = q("SELECT * FROM `user` WHERE `uid` = %d", intval($uid));
if ($contacts AND $importers)
if(!diaspora_post_allow($importers[0],$contacts[0], false)) {
logger('Ignoring author '.$person['url'].' for uid '.$uid);
return false;
} else
logger('Author '.$person['url'].' is allowed for uid '.$uid);
$datarray = array(); $datarray = array();
$datarray['uid'] = $uid; $datarray['uid'] = $uid;
$datarray['contact-id'] = get_contact($person['url'], $uid); $datarray['contact-id'] = $contact_id;
$datarray['wall'] = 0; $datarray['wall'] = 0;
$datarray['network'] = NETWORK_DIASPORA; $datarray['network'] = NETWORK_DIASPORA;
$datarray['guid'] = $guid; $datarray['guid'] = $guid;
@ -1123,9 +1132,8 @@ function diaspora_reshare($importer,$xml,$msg) {
} }
$message_id = $diaspora_handle . ':' . $guid; $message_id = $diaspora_handle . ':' . $guid;
$r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `guid` = '%s' LIMIT 1", $r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `guid` = '%s' LIMIT 1",
intval($importer['uid']), intval($importer['uid']),
dbesc($message_id),
dbesc($guid) dbesc($guid)
); );
if(count($r)) { if(count($r)) {
@ -1309,9 +1317,8 @@ function diaspora_asphoto($importer,$xml,$msg) {
} }
$message_id = $diaspora_handle . ':' . $guid; $message_id = $diaspora_handle . ':' . $guid;
$r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `guid` = '%s' LIMIT 1", $r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `guid` = '%s' LIMIT 1",
intval($importer['uid']), intval($importer['uid']),
dbesc($message_id),
dbesc($guid) dbesc($guid)
); );
if(count($r)) { if(count($r)) {

View file

@ -19,7 +19,7 @@ function p_init($a){
$guid = strtolower(substr($guid, 0, -4)); $guid = strtolower(substr($guid, 0, -4));
$item = q("SELECT `body`, `guid`, `contact-id`, `private`, `created`, `app` FROM `item` WHERE `uid` = 0 AND `guid` = '%s' AND `network` IN ('%s', '%s') LIMIT 1", $item = q("SELECT `title`, `body`, `guid`, `contact-id`, `private`, `created`, `app` FROM `item` WHERE `uid` = 0 AND `guid` = '%s' AND `network` IN ('%s', '%s') LIMIT 1",
dbesc($guid), NETWORK_DFRN, NETWORK_DIASPORA); dbesc($guid), NETWORK_DFRN, NETWORK_DIASPORA);
if (!$item) { if (!$item) {
header($_SERVER["SERVER_PROTOCOL"].' 404 '.t('Not Found')); header($_SERVER["SERVER_PROTOCOL"].' 404 '.t('Not Found'));
@ -39,8 +39,14 @@ function p_init($a){
$post["public"] = (!$item[0]["private"] ? 'true':'false'); $post["public"] = (!$item[0]["private"] ? 'true':'false');
$post["created_at"] = datetime_convert('UTC','UTC',$item[0]["created"]); $post["created_at"] = datetime_convert('UTC','UTC',$item[0]["created"]);
} else { } else {
$body = bb2diaspora($item[0]["body"]);
if(strlen($item[0]["title"]))
$body = "## ".html_entity_decode($item[0]["title"])."\n\n".$body;
$nodename = "status_message"; $nodename = "status_message";
$post["raw_message"] = str_replace("&", "&", bb2diaspora($item[0]["body"])); $post["raw_message"] = str_replace("&", "&", $body);
$post["guid"] = $item[0]["guid"]; $post["guid"] = $item[0]["guid"];
$post["diaspora_handle"] = diaspora_handle_from_contact($item[0]["contact-id"]); $post["diaspora_handle"] = diaspora_handle_from_contact($item[0]["contact-id"]);
$post["public"] = (!$item[0]["private"] ? 'true':'false'); $post["public"] = (!$item[0]["private"] ? 'true':'false');