aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorredmatrix <git@macgirvin.com>2016-03-09 15:56:51 -0800
committerredmatrix <git@macgirvin.com>2016-03-09 15:56:51 -0800
commit7732532964cfa43c371ee70418fea0279846c7b6 (patch)
treeb32b6dfacd3dc3d25cc5c8a17103a9fc7e8df232
parentb9b46a3f88d56f9ed6a89b34557abc27a7461449 (diff)
downloadvolse-hubzilla-7732532964cfa43c371ee70418fea0279846c7b6.tar.gz
volse-hubzilla-7732532964cfa43c371ee70418fea0279846c7b6.tar.bz2
volse-hubzilla-7732532964cfa43c371ee70418fea0279846c7b6.zip
handle UNO move channel operation
-rw-r--r--include/hubloc.php15
-rw-r--r--include/zot.php54
-rw-r--r--mod/import.php20
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);
}