diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/Photo.php | 13 | ||||
-rw-r--r-- | include/diaspora.php | 116 | ||||
-rw-r--r-- | include/group.php | 5 | ||||
-rw-r--r-- | include/poller.php | 8 |
4 files changed, 136 insertions, 6 deletions
diff --git a/include/Photo.php b/include/Photo.php index de4c3d9e0..1450374ff 100644 --- a/include/Photo.php +++ b/include/Photo.php @@ -185,11 +185,20 @@ class Photo { public function store($uid, $cid, $rid, $filename, $album, $scale, $profile = 0, $allow_cid = '', $allow_gid = '', $deny_cid = '', $deny_gid = '') { + $r = q("select `guid` from photo where `resource-id` = '%s' and `guid` != '' limit 1", + dbesc($rid) + ); + if(count($r)) + $guid = $r[0]['guid']; + else + $guid = get_guid(); + $r = q("INSERT INTO `photo` - ( `uid`, `contact-id`, `resource-id`, `created`, `edited`, `filename`, `album`, `height`, `width`, `data`, `scale`, `profile`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid` ) - VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', %d, %d, '%s', '%s', '%s', '%s' )", + ( `uid`, `contact-id`, `guid`, `resource-id`, `created`, `edited`, `filename`, `album`, `height`, `width`, `data`, `scale`, `profile`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid` ) + VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', %d, %d, '%s', '%s', '%s', '%s' )", intval($uid), intval($cid), + dbesc($guid), dbesc($rid), dbesc(datetime_convert()), dbesc(datetime_convert()), diff --git a/include/diaspora.php b/include/diaspora.php index 345ea5562..a1edd08a6 100644 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -597,6 +597,57 @@ function diaspora_comment($importer,$xml,$msg) { } +function diaspora_photo($importer,$xml,$msg) { + + $remote_photo_path = notags(unxmlify($xml->remote_photo_path)); + + $remote_photo_name = notags(unxmlify($xml->remote_photo_name)); + + $status_message_guid = notags(unxmlify($xml->status_message_guid)); + + $guid = notags(unxmlify($xml->guid)); + + $diaspora_handle = notags(unxmlify($xml->diaspora_handle)); + + $public = notags(unxmlify($xml->public)); + + $created_at = notags(unxmlify($xml_created_at)); + + + $contact = diaspora_get_contact_by_handle($importer['uid'],$msg['author']); + if(! $contact) + return; + + if(($contact['rel'] == CONTACT_IS_FOLLOWER) || ($contact['blocked']) || ($contact['readonly'])) { + logger('diaspora_photo: Ignoring this author.'); + http_status_exit(202); + // NOTREACHED + } + + $r = q("SELECT * FROM `item` WHERE `uid` = %d AND `guid` = '%s' LIMIT 1", + intval($importer['uid']), + dbesc($status_message_guid) + ); + if(! count($r)) { + logger('diaspora_photo: parent item not found: parent: ' . $parent_guid . ' item: ' . $guid); + return; + } + $parent_item = $r[0]; + + $link_text = '[img]' . $remote_photo_path . $remote_photo_name . '[/img]' . "\n"; + + $r = q("update item set `body` = '%s' where `id` = %d and `uid` = %d limit 1", + dbesc($link_text . $parent_item['body']), + intval($parent_item['id']), + intval($parent_item['uid']) + ); + + return; +} + + + + function diaspora_like($importer,$xml,$msg) { $a = get_app(); @@ -847,7 +898,25 @@ function diaspora_send_status($item,$owner,$contact) { $myaddr = $owner['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3); $theiraddr = $contact['addr']; - $body = xmlify(bb2diaspora($item['body'])); + $images = array(); + + $body = $item['body']; + + $cnt = preg_match_all('|\[img\](.*?)\[\/img\]|',$body,$matches,PREG_SET_ORDER); + if($cnt) { + foreach($matches as $mtch) { + $detail = array(); + $detail['str'] = $mtch[0]; + $detail['path'] = dirname($mtch[1]); + $detail['file'] = basename($mtch[1]); + $detail['guid'] = $item['guid']; + $detail['handle'] = $myaddr; + $images[] = $detail; + $body = str_replace($detail['str'],'',$body); + } + } + + $body = xmlify(bb2diaspora($body)); $public = (($item['private']) ? 'false' : 'true'); require_once('include/datetime.php'); @@ -869,10 +938,55 @@ function diaspora_send_status($item,$owner,$contact) { post_url($contact['notify'] . '/',$slap); $return_code = $a->get_curl_code(); logger('diaspora_send_status: returns: ' . $return_code); + + if(count($images)) { + diaspora_send_images($item,$owner,$contact,$images); + } + return $return_code; } +function diaspora_send_images($item,$owner,$contact,$images) { + $a = get_app(); + if(! count($images)) + return; + $mysite = substr($a->get_baseurl(),strpos($a->get_baseurl(),'://') + 3) . '/photo'; + + $tpl = get_markup_template('diaspora_photo.tpl'); + foreach($images as $image) { + if(! stristr($image['path'],$mysite)) + continue; + $resource = str_replace('.jpg','',$image['file']); + $resource = substr($resource,0,strpos($resource,'-')); + + $r = q("select * from photo where `resource-id` = '%s' and `uid` = %d limit 1", + dbesc($resource), + intval($owner['uid']) + ); + if(! count($r)) + continue; + $public = (($r[0]['allow_cid'] || $r[0]['allow_gid'] || $r[0]['deny_cid'] || $r[0]['deny_gid']) ? 'false' : 'true' ); + $msg = replace_macros($tpl,array( + '$path' => xmlify($image['path']), + '$filename' => xmlify($image['file']), + '$msg_guid' => xmlify($image['guid']), + '$guid' => xmlify($r[0]['guid']), + '$handle' => xmlify($image['handle']), + '$public' => xmlify($public), + '$created_at' => xmlify('UTC','UTC',$r[0]['created'],'Y-m-d h:i:s \U\T\C') + )); + + logger('diaspora_send_photo: base message: ' . $msg, LOGGER_DATA); + $slap = 'xml=' . urlencode(urlencode(diaspora_msg_build($msg,$owner,$contact,$owner['uprvkey'],$contact['pubkey']))); + + post_url($contact['notify'] . '/',$slap); + $return_code = $a->get_curl_code(); + logger('diaspora_send_photo: returns: ' . $return_code); + } + +} + function diaspora_send_followup($item,$owner,$contact) { $a = get_app(); diff --git a/include/group.php b/include/group.php index 1ebae7b7b..5e3a1511a 100644 --- a/include/group.php +++ b/include/group.php @@ -124,9 +124,10 @@ function group_public_members($gid) { $r = q("SELECT `contact`.`id` AS `contact-id` FROM `group_member` LEFT JOIN `contact` ON `contact`.`id` = `group_member`.`contact-id` WHERE `gid` = %d AND `group_member`.`uid` = %d - AND `contact`.`network` != 'dfrn' AND `contact`.`network` != 'mail' AND `contact`.`network` != 'face' ", + AND `contact`.`network` = '%' AND `contact`.`notify` != '' ", intval($gid), - intval(local_user()) + intval(local_user()), + dbesc(NETWORK_OSTATUS) ); if(count($r)) $ret = count($r); diff --git a/include/poller.php b/include/poller.php index 651736a99..e80b696bf 100644 --- a/include/poller.php +++ b/include/poller.php @@ -82,12 +82,18 @@ function poller_run($argv, $argc){ if(! $restart) proc_run('php','include/cronhooks.php'); + // Only poll from those with suitable relationships, + // and which have a polling address and ignore Diaspora since + // we are unable to match those posts with a Diaspora GUID and prevent duplicates. + $contacts = q("SELECT `id` FROM `contact` WHERE ( `rel` = %d OR `rel` = %d ) AND `poll` != '' + AND `network` != '%s' $sql_extra AND `self` = 0 AND `blocked` = 0 AND `readonly` = 0 ORDER BY RAND()", intval(CONTACT_IS_SHARING), - intval(CONTACT_IS_FRIEND) + intval(CONTACT_IS_FRIEND), + dbesc(NETWORK_DIASPORA) ); if(! count($contacts)) { |