diff options
Diffstat (limited to 'include/Import/import_diaspora.php')
-rw-r--r-- | include/Import/import_diaspora.php | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/include/Import/import_diaspora.php b/include/Import/import_diaspora.php new file mode 100644 index 000000000..fca9fa4f2 --- /dev/null +++ b/include/Import/import_diaspora.php @@ -0,0 +1,146 @@ +<?php + +require_once('include/bb2diaspora.php'); +require_once('include/group.php'); +require_once('include/follow.php'); +require_once('include/photo/photo_driver.php'); + +function import_diaspora($data) { + $a = get_app(); + + $account = $a->get_account(); + if(! $account) + return false; + + $address = escape_tags($data['user']['username']); + if(! $address) { + notice( t('No username found in import file.') . EOL); + return false; + } + + $r = q("select * from channel where channel_address = '%s' limit 1", + dbesc($address) + ); + if($r) { + // try at most ten times to generate a unique address. + $x = 0; + $found_unique = false; + do { + $tmp = $address . mt_rand(1000,9999); + $r = q("select * from channel where channel_address = '%s' limit 1", + dbesc($tmp) + ); + if(! $r) { + $address = $tmp; + $found_unique = true; + break; + } + $x ++; + } while ($x < 10); + if(! $found_unique) { + logger('import_diaspora: duplicate channel address. randomisation failed.'); + notice( t('Unable to create a unique channel address. Import failed.') . EOL); + return; + } + } + + + $c = create_identity(array( + 'name' => escape_tags($data['user']['name']), + 'nickname' => $address, + 'account_id' => $account['account_id'], + 'permissions_role' => 'social' + )); + + if(! $c['success']) + return; + + $channel_id = $c['channel']['channel_id']; + + // todo - add auto follow settings, (and strip exif in hubzilla) + + $location = escape_tags($data['user']['profile']['location']); + if(! $location) + $location = ''; + + + q("update channel set channel_location = '%s' where channel_id = %d", + dbesc($location), + intval($channel_id) + ); + + if($data['user']['profile']['nsfw']) { + // fixme for hubzilla which doesn't use pageflags any more + q("update channel set channel_pageflags = (channel_pageflags | %d) where channel_id = %d", + intval(PAGE_ADULT), + intval($channel_id) + ); + } + + if($data['user']['profile']['image_url']) { + $p = z_fetch_url($data['user']['profile']['image_url'],true); + if($p['success']) { + $rawbytes = $p['body']; + $type = guess_image_type('dummyfile',$p['header']); + import_channel_photo($rawbytes,$type,$c['channel']['channel_account_id'],$channel_id); + } + } + + $gender = escape_tags($data['user']['profile']['gender']); + $about = diaspora2bb($data['user']['profile']['bio']); + $publish = intval($data['user']['profile']['searchable']); + if($data['user']['profile']['birthday']) + $dob = datetime_convert('UTC','UTC',$data['user']['profile']['birthday'],'Y-m-d'); + else + $dob = '0000-00-00'; + + // we're relying on the fact that this channel was just created and will only + // have the default profile currently + + $r = q("update profile set gender = '%s', about = '%s', dob = '%s', publish = %d where uid = %d", + dbesc($gender), + dbesc($about), + dbesc($dob), + dbesc($publish), + intval($channel_id) + ); + + if($data['user']['aspects']) { + foreach($data['user']['aspects'] as $aspect) { + group_add($channel_id,escape_tags($aspect['name']),intval($aspect['contacts_visible'])); + } + } + + // now add connections and send friend requests + + + if($data['user']['contacts']) { + foreach($data['user']['contacts'] as $contact) { + $result = new_contact($channel_id, $contact['person_diaspora_handle'], $c['channel']); + if($result['success']) { + if($contact['aspects']) { + foreach($contact['aspects'] as $aspect) { + group_add_member($channel_id,$aspect['name'],$result['abook']['xchan_hash']); + } + } + } + } + } + + + // Then add items - note this can't be done until Diaspora adds guids to exported + // items and comments + + + + // This will indirectly perform a refresh_all *and* update the directory + + proc_run('php', 'include/directory.php', $channel_id); + + notice( t('Import completed.') . EOL); + + change_channel($channel_id); + + goaway(z_root() . '/network' ); + +}
\ No newline at end of file |