diff options
author | redmatrix <git@macgirvin.com> | 2016-03-09 15:56:51 -0800 |
---|---|---|
committer | redmatrix <git@macgirvin.com> | 2016-03-09 15:56:51 -0800 |
commit | 7732532964cfa43c371ee70418fea0279846c7b6 (patch) | |
tree | b32b6dfacd3dc3d25cc5c8a17103a9fc7e8df232 | |
parent | b9b46a3f88d56f9ed6a89b34557abc27a7461449 (diff) | |
download | volse-hubzilla-7732532964cfa43c371ee70418fea0279846c7b6.tar.gz volse-hubzilla-7732532964cfa43c371ee70418fea0279846c7b6.tar.bz2 volse-hubzilla-7732532964cfa43c371ee70418fea0279846c7b6.zip |
handle UNO move channel operation
-rw-r--r-- | include/hubloc.php | 15 | ||||
-rw-r--r-- | include/zot.php | 54 | ||||
-rw-r--r-- | mod/import.php | 20 |
3 files changed, 74 insertions, 15 deletions
diff --git a/include/hubloc.php b/include/hubloc.php index a1171b0e2..695cada3c 100644 --- a/include/hubloc.php +++ b/include/hubloc.php @@ -134,10 +134,17 @@ function hubloc_change_primary($hubloc) { $r = q("select channel_id, channel_primary from channel where channel_hash = '%s' limit 1", dbesc($hubloc['hubloc_hash']) ); - if(($r) && (! $r[0]['channel_primary'])) { - q("update channel set channel_primary = 1 where channel_id = %d", - intval($r[0]['channel_id']) - ); + if($r) { + if(! $r[0]['channel_primary']) { + q("update channel set channel_primary = 1 where channel_id = %d", + intval($r[0]['channel_id']) + ); + } + else { + q("update channel set channel_primary = 0 where channel_id = %d", + intval($r[0]['channel_id']) + ); + } } // do we even have an xchan for this hubloc and if so is it already set as primary? diff --git a/include/zot.php b/include/zot.php index a60a50d8f..cff9e1810 100644 --- a/include/zot.php +++ b/include/zot.php @@ -2234,6 +2234,56 @@ function process_location_delivery($sender,$arr,$deliveries) { } /** + * @brief checks for a moved UNO channel and sets the channel_moved flag + * + * Currently the effect of this flag is to turn the channel into 'read-only' mode. + * New content will not be processed (there was still an issue with blocking the + * ability to post comments as of 10-Mar-2016). + * We do not physically remove the channel at this time. The hub admin may choose + * to do so, but is encouraged to allow a grace period of several days in case there + * are any issues migrating content. This packet will generally be received by the + * original site when the basic channel import has been processed. + * + * This will only be executed on the UNO system which is the old location + * if a new location is reported and there is only one location record. + * The rest of the hubloc syncronisation will be handled within + * sync_locations + */ + + + +function check_location_move($sender_hash,$locations) { + + if(! $locations) + return; + + if(! UNO) + return; + + if(count($locations) != 1) + return; + + $loc = $locations[0]; + + $r = q("select * from channel where channel_hash = '%s' limit 1", + dbesc($sender_hash) + ); + + if(! $r) + return; + + if($loc['url'] !== z_root()) { + $x = q("update channel set channel_moved = '%s' where channel_hash = '%s' limit 1", + dbesc($loc['url']), + dbesc($sender_hash) + ); + + } + +} + + +/** * @brief Synchronises locations. * * @param array $sender @@ -2247,6 +2297,10 @@ function sync_locations($sender, $arr, $absolute = false) { if($arr['locations']) { + if($absolute) + check_location_move($sender['hash'],$arr['locations']); + + $xisting = q("select hubloc_id, hubloc_url, hubloc_sitekey from hubloc where hubloc_hash = '%s'", dbesc($sender['hash']) ); diff --git a/mod/import.php b/mod/import.php index 0b239d822..f91f261a5 100644 --- a/mod/import.php +++ b/mod/import.php @@ -108,10 +108,9 @@ function import_account(&$a, $account_id) { import_diaspora($data); return; } - - if(UNO) - return; - + + $moving = false; + if(array_key_exists('compatibility',$data) && array_key_exists('database',$data['compatibility'])) { $v1 = substr($data['compatibility']['database'],-4); $v2 = substr(DB_UPDATE_VERSION,-4); @@ -119,14 +118,13 @@ function import_account(&$a, $account_id) { $t = sprintf( t('Warning: Database versions differ by %1$d updates.'), $v2 - $v1 ); notice($t); } - if(array_key_exists('server_role',$data['compatibility']) - && $data['compatibility']['server_role'] != Zotlabs\Project\System::get_server_role()) { - notice( t('Server platform is not compatible. Operation not permitted.') . EOL); - return; - } - + if(array_key_exists('server_role',$data['compatibility']) && $data['compatibility']['server_role'] == 'basic') + $moving = true; } + if($moving) + $seize = 1; + // import channel if(array_key_exists('channel',$data)) { @@ -189,7 +187,7 @@ function import_account(&$a, $account_id) { if($completed < 4) { - if(is_array($data['hubloc'])) { + if(is_array($data['hubloc']) && (! $moving)) { import_hublocs($channel,$data['hubloc'],$seize); } |