diff options
Diffstat (limited to 'include/follow.php')
-rw-r--r-- | include/follow.php | 59 |
1 files changed, 41 insertions, 18 deletions
diff --git a/include/follow.php b/include/follow.php index 3d5785f89..6eac2d465 100644 --- a/include/follow.php +++ b/include/follow.php @@ -42,8 +42,6 @@ function new_contact($uid,$url,$channel,$interactive = false) { } logger('follow: ' . $url . ' ' . print_r($j,true)); -// killme(); - if(! ($j->success && $j->guid)) { $result['message'] = t('Unable to communicate with requested channel.'); @@ -61,7 +59,7 @@ function new_contact($uid,$url,$channel,$interactive = false) { $total_channels = $r[0]['total']; if(! service_class_allows($uid,'total_channels',$total_channels)) { - $result['message'] .= upgrade_message(); + $result['message'] = upgrade_message(); return $result; } @@ -75,8 +73,6 @@ function new_contact($uid,$url,$channel,$interactive = false) { $xchan_hash = $x['hash']; - // Do we already have an abook entry? - // go directly to the abook edit page. $their_perms = 0; @@ -101,28 +97,55 @@ function new_contact($uid,$url,$channel,$interactive = false) { } } + if((local_user()) && $uid == local_user()) { + $aid = get_account_id(); + $hash = $a->observer['xchan_hash']; + } + else { + $r = q("select * from channel where uid = %d limit 1", + intval($uid) + ); + if(! $r) { + $result['message'] = t('local account not found.'); + return $result; + } + $aid = $r[0]['channel_account_id']; + $hash = $r[0]['channel_hash']; + } + + if($hash == $xchan_hash) { + $result['message'] = t('Cannot connect to yourself.'); + return $result; + } - $r = q("insert into abook ( abook_account, abook_channel, abook_xchan, abook_their_perms, abook_created, abook_updated ) - values( %d, %d, '%s', %d, '%s', '%s' ) ", - intval(get_account_id()), - intval(local_user()), + $r = q("select abook_xchan from abook_id where abook_xchan = '%s' and abook_channel = %d limit 1", dbesc($xchan_hash), - intval($their_perms), - dbesc(datetime_convert()), - dbesc(datetime_convert()) + intval($uid) ); + if($r) { + $x = q("update abook set abook_their_perms = %d where abook_id = %d limit 1", + intval($their_perms), + intval($r[0]['abook_id']) + ); + } + else { + $r = q("insert into abook ( abook_account, abook_channel, abook_xchan, abook_their_perms, abook_created, abook_updated ) + values( %d, %d, '%s', %d, '%s', '%s' ) ", + intval($aid), + intval($uid), + dbesc($xchan_hash), + intval($their_perms), + dbesc(datetime_convert()), + dbesc(datetime_convert()) + ); + } + if(! $r) logger('mod_follow: abook creation failed'); - - - - // Then send a ping/message to the other side - - /* $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `nurl`, `addr`, `alias`, `batch`, `notify`, `poll`, `poco`, `name`, `nick`, `photo`, `network`, `pubkey`, `rel`, `priority`, |