start to modularise the clone import and sync functions
This commit is contained in:
parent
69fc10d5ad
commit
c22da3da1c
@ -34,6 +34,11 @@ class AccessList {
|
|||||||
return $this->explicit;
|
return $this->explicit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set AccessList from strings such as those in already
|
||||||
|
* existing stored data items
|
||||||
|
*/
|
||||||
|
|
||||||
function set($arr,$explicit = true) {
|
function set($arr,$explicit = true) {
|
||||||
$this->allow_cid = $arr['allow_cid'];
|
$this->allow_cid = $arr['allow_cid'];
|
||||||
$this->allow_gid = $arr['allow_gid'];
|
$this->allow_gid = $arr['allow_gid'];
|
||||||
@ -43,6 +48,12 @@ class AccessList {
|
|||||||
$this->explicit = $explicit;
|
$this->explicit = $explicit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return an array consisting of the current
|
||||||
|
* access list components where the elements
|
||||||
|
* are directly storable.
|
||||||
|
*/
|
||||||
|
|
||||||
function get() {
|
function get() {
|
||||||
return array(
|
return array(
|
||||||
'allow_cid' => $this->allow_cid,
|
'allow_cid' => $this->allow_cid,
|
||||||
@ -52,6 +63,12 @@ class AccessList {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set AccessList from arrays, such as those provided by
|
||||||
|
* acl_selector(). For convenience, a string (or non-array) input is
|
||||||
|
* assumed to be a comma-separated list and auto-converted into an array.
|
||||||
|
*/
|
||||||
|
|
||||||
function set_from_array($arr,$explicit = true) {
|
function set_from_array($arr,$explicit = true) {
|
||||||
$this->allow_cid = perms2str((is_array($arr['contact_allow']))
|
$this->allow_cid = perms2str((is_array($arr['contact_allow']))
|
||||||
? $arr['contact_allow'] : explode(',',$arr['contact_allow']));
|
? $arr['contact_allow'] : explode(',',$arr['contact_allow']));
|
||||||
|
312
include/import.php
Normal file
312
include/import.php
Normal file
@ -0,0 +1,312 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
function import_channel($channel) {
|
||||||
|
|
||||||
|
if(! array_key_exists('channel_system',$channel)) {
|
||||||
|
$channel['channel_system'] = (($channel['channel_pageflags'] & 0x1000) ? 1 : 0);
|
||||||
|
$channel['channel_removed'] = (($channel['channel_pageflags'] & 0x8000) ? 1 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
$r = q("select * from channel where (channel_guid = '%s' or channel_hash = '%s' or channel_address = '%s' ) limit 1",
|
||||||
|
dbesc($channel['channel_guid']),
|
||||||
|
dbesc($channel['channel_hash']),
|
||||||
|
dbesc($channel['channel_address'])
|
||||||
|
);
|
||||||
|
|
||||||
|
// We should probably also verify the hash
|
||||||
|
|
||||||
|
if($r) {
|
||||||
|
if($r[0]['channel_guid'] === $channel['channel_guid'] || $r[0]['channel_hash'] === $channel['channel_hash']) {
|
||||||
|
logger('mod_import: duplicate channel. ', print_r($channel,true));
|
||||||
|
notice( t('Cannot create a duplicate channel identifier on this system. Import failed.') . EOL);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// try at most ten times to generate a unique address.
|
||||||
|
$x = 0;
|
||||||
|
$found_unique = false;
|
||||||
|
do {
|
||||||
|
$tmp = $channel['channel_address'] . mt_rand(1000,9999);
|
||||||
|
$r = q("select * from channel where channel_address = '%s' limit 1",
|
||||||
|
dbesc($tmp)
|
||||||
|
);
|
||||||
|
if(! $r) {
|
||||||
|
$channel['channel_address'] = $tmp;
|
||||||
|
$found_unique = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$x ++;
|
||||||
|
} while ($x < 10);
|
||||||
|
if(! $found_unique) {
|
||||||
|
logger('mod_import: duplicate channel. randomisation failed.', print_r($channel,true));
|
||||||
|
notice( t('Unable to create a unique channel address. Import failed.') . EOL);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unset($channel['channel_id']);
|
||||||
|
$channel['channel_account_id'] = get_account_id();
|
||||||
|
$channel['channel_primary'] = (($seize) ? 1 : 0);
|
||||||
|
|
||||||
|
dbesc_array($channel);
|
||||||
|
|
||||||
|
$r = dbq("INSERT INTO channel (`"
|
||||||
|
. implode("`, `", array_keys($channel))
|
||||||
|
. "`) VALUES ('"
|
||||||
|
. implode("', '", array_values($channel))
|
||||||
|
. "')"
|
||||||
|
);
|
||||||
|
|
||||||
|
if(! $r) {
|
||||||
|
logger('mod_import: channel clone failed. ', print_r($channel,true));
|
||||||
|
notice( t('Channel clone failed. Import failed.') . EOL);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$r = q("select * from channel where channel_account_id = %d and channel_guid = '%s' limit 1",
|
||||||
|
intval(get_account_id()),
|
||||||
|
$channel['channel_guid'] // Already dbesc'd
|
||||||
|
);
|
||||||
|
if(! $r) {
|
||||||
|
logger('mod_import: channel not found. ', print_r($channel,true));
|
||||||
|
notice( t('Cloned channel not found. Import failed.') . EOL);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// reset
|
||||||
|
$channel = $r[0];
|
||||||
|
|
||||||
|
set_default_login_identity(get_account_id(),$channel['channel_id'],false);
|
||||||
|
logger('import step 1');
|
||||||
|
$_SESSION['import_step'] = 1;
|
||||||
|
ref_session_write(session_id(), serialize($_SESSION));
|
||||||
|
return $channel;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function import_config($channel,$configs) {
|
||||||
|
|
||||||
|
if($channel && $configs) {
|
||||||
|
foreach($configs as $config) {
|
||||||
|
unset($config['id']);
|
||||||
|
$config['uid'] = $channel['channel_id'];
|
||||||
|
dbesc_array($config);
|
||||||
|
$r = dbq("INSERT INTO pconfig (`"
|
||||||
|
. implode("`, `", array_keys($config))
|
||||||
|
. "`) VALUES ('"
|
||||||
|
. implode("', '", array_values($config))
|
||||||
|
. "')" );
|
||||||
|
}
|
||||||
|
load_pconfig($channel['channel_id']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function import_profiles($channel,$profiles) {
|
||||||
|
|
||||||
|
if($channel && $profiles) {
|
||||||
|
foreach($profiles as $profile) {
|
||||||
|
unset($profile['id']);
|
||||||
|
$profile['aid'] = get_account_id();
|
||||||
|
$profile['uid'] = $channel['channel_id'];
|
||||||
|
|
||||||
|
// we are going to reset all profile photos to the original
|
||||||
|
// somebody will have to fix this later and put all the applicable photos into the export
|
||||||
|
|
||||||
|
$profile['photo'] = z_root() . '/photo/profile/l/' . $channel['channel_id'];
|
||||||
|
$profile['thumb'] = z_root() . '/photo/profile/m/' . $channel['channel_id'];
|
||||||
|
|
||||||
|
dbesc_array($profile);
|
||||||
|
$r = dbq("INSERT INTO profile (`"
|
||||||
|
. implode("`, `", array_keys($profile))
|
||||||
|
. "`) VALUES ('"
|
||||||
|
. implode("', '", array_values($profile))
|
||||||
|
. "')"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function import_hublocs($channel,$hublocs,$seize) {
|
||||||
|
|
||||||
|
if($channel && $hublocs) {
|
||||||
|
foreach($hublocs as $hubloc) {
|
||||||
|
|
||||||
|
$hash = make_xchan_hash($hubloc['hubloc_guid'],$hubloc['hubloc_guid_sig']);
|
||||||
|
if($hubloc['hubloc_network'] === 'zot' && $hash !== $hubloc['hubloc_hash']) {
|
||||||
|
logger('forged hubloc: ' . print_r($hubloc,true));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(! array_key_exists('hubloc_primary',$hubloc)) {
|
||||||
|
$hubloc['hubloc_primary'] = (($hubloc['hubloc_flags'] & 0x0001) ? 1 : 0);
|
||||||
|
$hubloc['hubloc_orphancheck'] = (($hubloc['hubloc_flags'] & 0x0004) ? 1 : 0);
|
||||||
|
$hubloc['hubloc_error'] = (($hubloc['hubloc_status'] & 0x0003) ? 1 : 0);
|
||||||
|
$hubloc['hubloc_deleted'] = (($hubloc['hubloc_flags'] & 0x1000) ? 1 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
$arr = array(
|
||||||
|
'guid' => $hubloc['hubloc_guid'],
|
||||||
|
'guid_sig' => $hubloc['hubloc_guid_sig'],
|
||||||
|
'url' => $hubloc['hubloc_url'],
|
||||||
|
'url_sig' => $hubloc['hubloc_url_sig']
|
||||||
|
);
|
||||||
|
if(($hubloc['hubloc_hash'] === $channel['channel_hash']) && intval($hubloc['hubloc_primary']) && ($seize))
|
||||||
|
$hubloc['hubloc_primary'] = 0;
|
||||||
|
|
||||||
|
if(! zot_gethub($arr)) {
|
||||||
|
unset($hubloc['hubloc_id']);
|
||||||
|
dbesc_array($hubloc);
|
||||||
|
|
||||||
|
$r = dbq("INSERT INTO hubloc (`"
|
||||||
|
. implode("`, `", array_keys($hubloc))
|
||||||
|
. "`) VALUES ('"
|
||||||
|
. implode("', '", array_values($hubloc))
|
||||||
|
. "')"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function import_objs($channel,$objs) {
|
||||||
|
|
||||||
|
if($channel && $objs) {
|
||||||
|
foreach($objs as $obj) {
|
||||||
|
|
||||||
|
// if it's the old term format - too hard to support
|
||||||
|
if(! $obj['obj_created'])
|
||||||
|
continue;
|
||||||
|
|
||||||
|
$baseurl = $obj['obj_baseurl'];
|
||||||
|
unset($obj['obj_id']);
|
||||||
|
unset($obj['obj_baseurl']);
|
||||||
|
|
||||||
|
$obj['obj_channel'] = $channel['channel_id'];
|
||||||
|
|
||||||
|
if($baseurl && (strpos($obj['obj_url'],$baseurl . '/thing/') !== false)) {
|
||||||
|
$obj['obj_url'] = str_replace($baseurl,z_root(),$obj['obj_url']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if($obj['obj_imgurl']) {
|
||||||
|
$x = import_xchan_photo($obj['obj_imgurl'],$channel['channel_hash'],true);
|
||||||
|
$obj['obj_imgurl'] = $x[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
dbesc_array($obj);
|
||||||
|
|
||||||
|
$r = dbq("INSERT INTO obj (`"
|
||||||
|
. implode("`, `", array_keys($obj))
|
||||||
|
. "`) VALUES ('"
|
||||||
|
. implode("', '", array_values($obj))
|
||||||
|
. "')"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function sync_objs($channel,$objs) {
|
||||||
|
|
||||||
|
if($channel && $objs) {
|
||||||
|
foreach($objs as $obj) {
|
||||||
|
|
||||||
|
if(array_key_exists('obj_deleted',$obj) && $obj['obj_deleted'] && $obj['obj_obj']) {
|
||||||
|
q("delete from obj where obj_obj = '%s' and obj_channel = %d limit 1",
|
||||||
|
dbesc($obj['obj_obj']),
|
||||||
|
intval($channel['channel_id'])
|
||||||
|
);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if it's the old term format - too hard to support
|
||||||
|
if(! $obj['obj_created'])
|
||||||
|
continue;
|
||||||
|
|
||||||
|
$baseurl = $obj['obj_baseurl'];
|
||||||
|
unset($obj['obj_id']);
|
||||||
|
unset($obj['obj_baseurl']);
|
||||||
|
|
||||||
|
$obj['obj_channel'] = $channel['channel_id'];
|
||||||
|
|
||||||
|
if($baseurl && (strpos($obj['obj_url'],$baseurl . '/thing/') !== false)) {
|
||||||
|
$obj['obj_url'] = str_replace($baseurl,z_root(),$obj['obj_url']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$exists = false;
|
||||||
|
|
||||||
|
$x = q("select * from obj where obj_obj = '%s' and obj_channel = %d limit 1",
|
||||||
|
dbesc($obj['obj_obj']),
|
||||||
|
intval($channel['channel_id'])
|
||||||
|
);
|
||||||
|
if($x) {
|
||||||
|
if($x[0]['obj_edited'] >= $obj['obj_edited'])
|
||||||
|
continue;
|
||||||
|
|
||||||
|
$exists = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($obj['obj_imgurl']) {
|
||||||
|
$x = import_xchan_photo($obj['obj_imgurl'],$channel['channel_hash'],true);
|
||||||
|
$obj['obj_imgurl'] = $x[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
$hash = $obj['obj_obj'];
|
||||||
|
|
||||||
|
if($exists) {
|
||||||
|
foreach($obj as $k => $v) {
|
||||||
|
$r = q("UPDATE obj SET `%s` = '%s' WHERE obj_obj = '%s' AND obj_channel = %d",
|
||||||
|
dbesc($k),
|
||||||
|
dbesc($v),
|
||||||
|
dbesc($hash),
|
||||||
|
intval($channel['channel_id'])
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
dbesc_array($obj);
|
||||||
|
|
||||||
|
$r = dbq("INSERT INTO obj (`"
|
||||||
|
. implode("`, `", array_keys($obj))
|
||||||
|
. "`) VALUES ('"
|
||||||
|
. implode("', '", array_values($obj))
|
||||||
|
. "')"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function import_apps($channel,$apps) {
|
||||||
|
|
||||||
|
if($channel && $apps) {
|
||||||
|
foreach($apps as $app) {
|
||||||
|
|
||||||
|
unset($app['id']);
|
||||||
|
unset($app['app_channel']);
|
||||||
|
|
||||||
|
$app['app_channel'] = $channel['channel_id'];
|
||||||
|
|
||||||
|
if($app['app_photo']) {
|
||||||
|
$x = import_xchan_photo($app['app_photo'],$channel['channel_hash'],true);
|
||||||
|
$app['app_photo'] = $x[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
dbesc_array($app);
|
||||||
|
$r = dbq("INSERT INTO app (`"
|
||||||
|
. implode("`, `", array_keys($app))
|
||||||
|
. "`) VALUES ('"
|
||||||
|
. implode("', '", array_values($app))
|
||||||
|
. "')"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -2841,6 +2841,8 @@ function build_sync_packet($uid = 0, $packet = null, $groups_changed = false) {
|
|||||||
*/
|
*/
|
||||||
function process_channel_sync_delivery($sender, $arr, $deliveries) {
|
function process_channel_sync_delivery($sender, $arr, $deliveries) {
|
||||||
|
|
||||||
|
require_once('include/import.php');
|
||||||
|
|
||||||
/** @FIXME this will sync red structures (channel, pconfig and abook). Eventually we need to make this application agnostic. */
|
/** @FIXME this will sync red structures (channel, pconfig and abook). Eventually we need to make this application agnostic. */
|
||||||
|
|
||||||
$result = array();
|
$result = array();
|
||||||
@ -2873,6 +2875,10 @@ function process_channel_sync_delivery($sender, $arr, $deliveries) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(array_key_exists('obj',$arr) && $arr['obj'])
|
||||||
|
sync_objs($channel,$arr['obj']);
|
||||||
|
|
||||||
|
|
||||||
if(array_key_exists('channel',$arr) && is_array($arr['channel']) && count($arr['channel'])) {
|
if(array_key_exists('channel',$arr) && is_array($arr['channel']) && count($arr['channel'])) {
|
||||||
if(array_key_exists('channel_page_flags',$arr['channel']) && intval($arr['channel']['channel_pageflags'])) {
|
if(array_key_exists('channel_page_flags',$arr['channel']) && intval($arr['channel']['channel_pageflags'])) {
|
||||||
$arr['channel']['channel_removed'] = (($arr['channel']['channel_pageflags'] & 0x8000) ? 1 : 0);
|
$arr['channel']['channel_removed'] = (($arr['channel']['channel_pageflags'] & 0x8000) ? 1 : 0);
|
||||||
|
234
mod/import.php
234
mod/import.php
@ -6,6 +6,8 @@
|
|||||||
require_once('include/Contact.php');
|
require_once('include/Contact.php');
|
||||||
require_once('include/zot.php');
|
require_once('include/zot.php');
|
||||||
require_once('include/identity.php');
|
require_once('include/identity.php');
|
||||||
|
require_once('include/import.php');
|
||||||
|
|
||||||
|
|
||||||
function import_post(&$a) {
|
function import_post(&$a) {
|
||||||
|
|
||||||
@ -118,118 +120,41 @@ function import_post(&$a) {
|
|||||||
// import channel
|
// import channel
|
||||||
|
|
||||||
if(array_key_exists('channel',$data)) {
|
if(array_key_exists('channel',$data)) {
|
||||||
$channel = $data['channel'];
|
|
||||||
|
|
||||||
if($completed < 1) {
|
if($completed < 1) {
|
||||||
|
$channel = import_channel($data['channel']);
|
||||||
|
|
||||||
if(! array_key_exists('channel_system',$channel)) {
|
}
|
||||||
$channel['channel_system'] = (($channel['channel_pageflags'] & 0x1000) ? 1 : 0);
|
else {
|
||||||
$channel['channel_removed'] = (($channel['channel_pageflags'] & 0x8000) ? 1 : 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
$r = q("select * from channel where (channel_guid = '%s' or channel_hash = '%s' or channel_address = '%s' ) limit 1",
|
|
||||||
dbesc($channel['channel_guid']),
|
|
||||||
dbesc($channel['channel_hash']),
|
|
||||||
dbesc($channel['channel_address'])
|
|
||||||
);
|
|
||||||
|
|
||||||
// We should probably also verify the hash
|
|
||||||
|
|
||||||
if($r) {
|
|
||||||
if($r[0]['channel_guid'] === $channel['channel_guid'] || $r[0]['channel_hash'] === $channel['channel_hash']) {
|
|
||||||
logger('mod_import: duplicate channel. ', print_r($channel,true));
|
|
||||||
notice( t('Cannot create a duplicate channel identifier on this system. Import failed.') . EOL);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// try at most ten times to generate a unique address.
|
|
||||||
$x = 0;
|
|
||||||
$found_unique = false;
|
|
||||||
do {
|
|
||||||
$tmp = $channel['channel_address'] . mt_rand(1000,9999);
|
|
||||||
$r = q("select * from channel where channel_address = '%s' limit 1",
|
|
||||||
dbesc($tmp)
|
|
||||||
);
|
|
||||||
if(! $r) {
|
|
||||||
$channel['channel_address'] = $tmp;
|
|
||||||
$found_unique = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
$x ++;
|
|
||||||
} while ($x < 10);
|
|
||||||
if(! $found_unique) {
|
|
||||||
logger('mod_import: duplicate channel. randomisation failed.', print_r($channel,true));
|
|
||||||
notice( t('Unable to create a unique channel address. Import failed.') . EOL);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
unset($channel['channel_id']);
|
|
||||||
$channel['channel_account_id'] = get_account_id();
|
|
||||||
$channel['channel_primary'] = (($seize) ? 1 : 0);
|
|
||||||
|
|
||||||
dbesc_array($channel);
|
|
||||||
|
|
||||||
$r = dbq("INSERT INTO channel (`"
|
|
||||||
. implode("`, `", array_keys($channel))
|
|
||||||
. "`) VALUES ('"
|
|
||||||
. implode("', '", array_values($channel))
|
|
||||||
. "')" );
|
|
||||||
|
|
||||||
if(! $r) {
|
|
||||||
logger('mod_import: channel clone failed. ', print_r($channel,true));
|
|
||||||
notice( t('Channel clone failed. Import failed.') . EOL);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$r = q("select * from channel where channel_account_id = %d and channel_guid = '%s' limit 1",
|
$r = q("select * from channel where channel_account_id = %d and channel_guid = '%s' limit 1",
|
||||||
intval(get_account_id()),
|
intval(get_account_id()),
|
||||||
$channel['channel_guid'] // Already dbesc'd
|
dbesc($channel['channel_guid'])
|
||||||
);
|
);
|
||||||
if(! $r) {
|
if($r)
|
||||||
logger('mod_import: channel not found. ', print_r($channel,true));
|
$channel = $r[0];
|
||||||
notice( t('Cloned channel not found. Import failed.') . EOL);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// reset
|
|
||||||
$channel = $r[0];
|
|
||||||
|
|
||||||
set_default_login_identity(get_account_id(),$channel['channel_id'],false);
|
|
||||||
logger('import step 1');
|
|
||||||
$_SESSION['import_step'] = 1;
|
|
||||||
ref_session_write(session_id(), serialize($_SESSION));
|
|
||||||
}
|
}
|
||||||
}
|
if(! $channel) {
|
||||||
else {
|
|
||||||
$r = q("select * from channel where channel_account_id = %d and channel_guid = '%s' limit 1",
|
|
||||||
intval(get_account_id()),
|
|
||||||
dbesc($channel['channel_guid'])
|
|
||||||
);
|
|
||||||
if($r)
|
|
||||||
$channel = $r[0];
|
|
||||||
else {
|
|
||||||
logger('mod_import: channel not found. ', print_r($channel,true));
|
logger('mod_import: channel not found. ', print_r($channel,true));
|
||||||
notice( t('Cloned channel not found. Import failed.') . EOL);
|
notice( t('Cloned channel not found. Import failed.') . EOL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if($completed < 2) {
|
if(! $channel)
|
||||||
|
$channel = $a->get_channel();
|
||||||
|
|
||||||
|
if(! $channel) {
|
||||||
|
logger('mod_import: channel not found. ', print_r($channel,true));
|
||||||
|
notice( t('No channel. Import failed.') . EOL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$configs = $data['config'];
|
|
||||||
if($configs) {
|
if($completed < 2) {
|
||||||
foreach($configs as $config) {
|
if(is_array($data['config'])) {
|
||||||
unset($config['id']);
|
import_config($channel,$data['config']);
|
||||||
$config['uid'] = $channel['channel_id'];
|
|
||||||
dbesc_array($config);
|
|
||||||
$r = dbq("INSERT INTO pconfig (`"
|
|
||||||
. implode("`, `", array_keys($config))
|
|
||||||
. "`) VALUES ('"
|
|
||||||
. implode("', '", array_values($config))
|
|
||||||
. "')" );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
logger('import step 2');
|
logger('import step 2');
|
||||||
$_SESSION['import_step'] = 2;
|
$_SESSION['import_step'] = 2;
|
||||||
ref_session_write(session_id(), serialize($_SESSION));
|
ref_session_write(session_id(), serialize($_SESSION));
|
||||||
@ -244,27 +169,9 @@ function import_post(&$a) {
|
|||||||
import_channel_photo(base64url_decode($data['photo']['data']),$data['photo']['type'],get_account_id(),$channel['channel_id']);
|
import_channel_photo(base64url_decode($data['photo']['data']),$data['photo']['type'],get_account_id(),$channel['channel_id']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$profiles = $data['profile'];
|
if(is_array($data['profiles']))
|
||||||
if($profiles) {
|
import_profiles($channel,$data['profiles']);
|
||||||
foreach($profiles as $profile) {
|
|
||||||
unset($profile['id']);
|
|
||||||
$profile['aid'] = get_account_id();
|
|
||||||
$profile['uid'] = $channel['channel_id'];
|
|
||||||
|
|
||||||
// we are going to reset all profile photos to the original
|
|
||||||
// somebody will have to fix this later and put all the applicable photos into the export
|
|
||||||
|
|
||||||
$profile['photo'] = z_root() . '/photo/profile/l/' . $channel['channel_id'];
|
|
||||||
$profile['thumb'] = z_root() . '/photo/profile/m/' . $channel['channel_id'];
|
|
||||||
|
|
||||||
dbesc_array($profile);
|
|
||||||
$r = dbq("INSERT INTO profile (`"
|
|
||||||
. implode("`, `", array_keys($profile))
|
|
||||||
. "`) VALUES ('"
|
|
||||||
. implode("', '", array_values($profile))
|
|
||||||
. "')" );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
logger('import step 3');
|
logger('import step 3');
|
||||||
$_SESSION['import_step'] = 3;
|
$_SESSION['import_step'] = 3;
|
||||||
ref_session_write(session_id(), serialize($_SESSION));
|
ref_session_write(session_id(), serialize($_SESSION));
|
||||||
@ -272,43 +179,10 @@ function import_post(&$a) {
|
|||||||
|
|
||||||
|
|
||||||
if($completed < 4) {
|
if($completed < 4) {
|
||||||
$hublocs = $data['hubloc'];
|
|
||||||
if($hublocs) {
|
|
||||||
foreach($hublocs as $hubloc) {
|
|
||||||
|
|
||||||
$hash = make_xchan_hash($hubloc['hubloc_guid'],$hubloc['hubloc_guid_sig']);
|
if(is_array($data['hubloc'])) {
|
||||||
if($hubloc['hubloc_network'] === 'zot' && $hash !== $hubloc['hubloc_hash']) {
|
import_hublocs($channel,$data['hubloc'],$seize);
|
||||||
logger('forged hubloc: ' . print_r($hubloc,true));
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(! array_key_exists('hubloc_primary',$hubloc)) {
|
|
||||||
$hubloc['hubloc_primary'] = (($hubloc['hubloc_flags'] & 0x0001) ? 1 : 0);
|
|
||||||
$hubloc['hubloc_orphancheck'] = (($hubloc['hubloc_flags'] & 0x0004) ? 1 : 0);
|
|
||||||
$hubloc['hubloc_error'] = (($hubloc['hubloc_status'] & 0x0003) ? 1 : 0);
|
|
||||||
$hubloc['hubloc_deleted'] = (($hubloc['hubloc_flags'] & 0x1000) ? 1 : 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
$arr = array(
|
|
||||||
'guid' => $hubloc['hubloc_guid'],
|
|
||||||
'guid_sig' => $hubloc['hubloc_guid_sig'],
|
|
||||||
'url' => $hubloc['hubloc_url'],
|
|
||||||
'url_sig' => $hubloc['hubloc_url_sig']
|
|
||||||
);
|
|
||||||
if(($hubloc['hubloc_hash'] === $channel['channel_hash']) && intval($hubloc['hubloc_primary']) && ($seize))
|
|
||||||
$hubloc['hubloc_primary'] = 0;
|
|
||||||
|
|
||||||
if(! zot_gethub($arr)) {
|
|
||||||
unset($hubloc['hubloc_id']);
|
|
||||||
dbesc_array($hubloc);
|
|
||||||
|
|
||||||
$r = dbq("INSERT INTO hubloc (`"
|
|
||||||
. implode("`, `", array_keys($hubloc))
|
|
||||||
. "`) VALUES ('"
|
|
||||||
. implode("', '", array_values($hubloc))
|
|
||||||
. "')" );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
logger('import step 4');
|
logger('import step 4');
|
||||||
$_SESSION['import_step'] = 4;
|
$_SESSION['import_step'] = 4;
|
||||||
@ -556,59 +430,11 @@ function import_post(&$a) {
|
|||||||
ref_session_write(session_id(), serialize($_SESSION));
|
ref_session_write(session_id(), serialize($_SESSION));
|
||||||
}
|
}
|
||||||
|
|
||||||
$objs = $data['obj'];
|
if(is_array($data['obj']))
|
||||||
if($objs) {
|
import_objs($channel,$data['obj']);
|
||||||
foreach($objs as $obj) {
|
|
||||||
// if it's the old term format - too hard to support
|
|
||||||
if(! $obj['obj_created'])
|
|
||||||
continue;
|
|
||||||
$baseurl = $obj['obj_baseurl'];
|
|
||||||
unset($obj['obj_id']);
|
|
||||||
unset($obj['obj_baseurl']);
|
|
||||||
|
|
||||||
$obj['obj_channel'] = $channel['channel_id'];
|
|
||||||
|
|
||||||
if($baseurl && (strpos($obj['obj_url'],$baseurl . '/thing/') !== false)) {
|
|
||||||
$obj['obj_url'] = str_replace($baseurl,z_root(),$obj['obj_url']);
|
|
||||||
}
|
|
||||||
|
|
||||||
if($obj['obj_imgurl']) {
|
|
||||||
$x = import_xchan_photo($obj['obj_imgurl'],get_observer_hash(),true);
|
|
||||||
$obj['obj_imgurl'] = $x[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
dbesc_array($obj);
|
|
||||||
$r = dbq("INSERT INTO obj (`"
|
|
||||||
. implode("`, `", array_keys($obj))
|
|
||||||
. "`) VALUES ('"
|
|
||||||
. implode("', '", array_values($obj))
|
|
||||||
. "')" );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$apps = $data['app'];
|
|
||||||
if($app) {
|
|
||||||
foreach($apps as $app) {
|
|
||||||
|
|
||||||
unset($app['id']);
|
|
||||||
unset($app['app_channel']);
|
|
||||||
|
|
||||||
$app['app_channel'] = $channel['channel_id'];
|
|
||||||
|
|
||||||
if($app['app_photo']) {
|
|
||||||
$x = import_xchan_photo($app['app_photo'],get_observer_hash(),true);
|
|
||||||
$app['app_photo'] = $x[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
dbesc_array($app);
|
|
||||||
$r = dbq("INSERT INTO app (`"
|
|
||||||
. implode("`, `", array_keys($obj))
|
|
||||||
. "`) VALUES ('"
|
|
||||||
. implode("', '", array_values($obj))
|
|
||||||
. "')" );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if(is_array($data['app']))
|
||||||
|
import_apps($channel,$data['app']);
|
||||||
|
|
||||||
$saved_notification_flags = notifications_off($channel['channel_id']);
|
$saved_notification_flags = notifications_off($channel['channel_id']);
|
||||||
|
|
||||||
|
@ -109,6 +109,15 @@ function thing_init(&$a) {
|
|||||||
);
|
);
|
||||||
|
|
||||||
info( t('Thing updated') . EOL);
|
info( t('Thing updated') . EOL);
|
||||||
|
|
||||||
|
$r = q("select * from obj where obj_channel = %d and obj_obj = '%s' limit 1",
|
||||||
|
intval(local_channel()),
|
||||||
|
dbesc($term_hash)
|
||||||
|
);
|
||||||
|
if($r) {
|
||||||
|
build_sync_packet(0, array('obj' => $r));
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,6 +166,14 @@ function thing_init(&$a) {
|
|||||||
|
|
||||||
info( t('Thing added'));
|
info( t('Thing added'));
|
||||||
|
|
||||||
|
$r = q("select * from obj where obj_channel = %d and obj_obj = '%s' limit 1",
|
||||||
|
intval(local_channel()),
|
||||||
|
dbesc($hash)
|
||||||
|
);
|
||||||
|
if($r) {
|
||||||
|
build_sync_packet(0, array('obj' => $r));
|
||||||
|
}
|
||||||
|
|
||||||
if($activity) {
|
if($activity) {
|
||||||
$arr = array();
|
$arr = array();
|
||||||
$links = array(array('rel' => 'alternate','type' => 'text/html', 'href' => $url));
|
$links = array(array('rel' => 'alternate','type' => 'text/html', 'href' => $url));
|
||||||
@ -310,6 +327,10 @@ function thing_content(&$a) {
|
|||||||
intval(local_channel())
|
intval(local_channel())
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$r[0]['obj_deleted'] = 1;
|
||||||
|
|
||||||
|
build_sync_packet(0,array('obj' => $r));
|
||||||
|
|
||||||
return $o;
|
return $o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user