From: Fabrixxm <fabrix.xm@gmail.com>
Date: Wed, 13 Nov 2013 10:57:11 +0000 (-0500)
Subject: More "relocate":
X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=0414e0a3162ed3106067319b60b72f89f7f29941;p=friendica.git

More "relocate":
button in user's setting to resend relocate message to contacts
option in admin's site setting to relocate a server
---

diff --git a/include/notifier.php b/include/notifier.php
index 3f9c286ed7..ad0167e34b 100644
--- a/include/notifier.php
+++ b/include/notifier.php
@@ -38,6 +38,7 @@ require_once('include/html2plain.php');
  *		tgroup					(in items.php)
  *		wall-new				(in photos.php, item.php)
  *		removeme				(in Contact.php)
+ * 		relocate				(in uimport.php)
  *
  * and ITEM_ID is the id of the item in the database that needs to be sent to others.
  */
diff --git a/mod/admin.php b/mod/admin.php
index ad91ea72cf..174a9899f5 100644
--- a/mod/admin.php
+++ b/mod/admin.php
@@ -237,6 +237,70 @@ function admin_page_site_post(&$a){
 
 	check_form_security_token_redirectOnErr('/admin/site', 'admin_site');
 
+	// relocate
+	if (x($_POST,'relocate') && x($_POST,'relocate_url') && $_POST['relocate_url']!=""){
+		$new_url = $_POST['relocate_url'];
+		$new_url = rtrim($new_url,"/");
+		
+		$parsed = @parse_url($new_url);
+		if (!$parsed || (!x($parsed,'host') || !x($parsed,'scheme'))) {
+			notice(t("Can not parse base url. Must have at least <scheme>://<domain>"));
+			goaway($a->get_baseurl(true) . '/admin/site' );
+		}
+		
+		/* steps:
+		 * replace all "baseurl" to "new_url" in config, profile, term, items and contacts
+		 * send relocate for every local user
+		 * */
+		
+		$old_url = $a->get_baseurl(true);
+		
+		function update_table($table_name, $fields, $old_url, $new_url) {
+			global $db, $a;
+			
+			$dbold = dbesc($old_url);
+			$dbnew = dbesc($new_url);
+			
+			$upd = array();
+			foreach ($fields as $f) {
+				$upd[] = "`$f` = REPLACE(`$f`, '$dbold', '$dbnew')";
+			}
+			
+			$upds = implode(", ", $upd);
+			
+			
+			
+			$q = sprintf("UPDATE %s SET %s;", $table_name, $upds);
+			$r = q($q);
+			if (!$r) {
+				notice( "Falied updating '$table_name': " . $db->error );
+				goaway($a->get_baseurl(true) . '/admin/site' );
+			}
+		}
+		
+		// update tables
+		update_table("profile", array('photo', 'thumb'), $old_url, $new_url);
+		update_table("term", array('url'), $old_url, $new_url);
+		update_table("contact", array('photo','thumb','micro','url','nurl','request','notify','poll','confirm','poco'), $old_url, $new_url);
+		update_table("item", array('owner-link','owner-avatar','author-name','author-link','author-avatar','body','plink','tag'), $old_url, $new_url);
+
+		// update config
+		$a->set_baseurl($new_url);
+	 	set_config('system','url',$new_url);
+		
+		// send relocate
+		$users = q("SELECT uid FROM user WHERE account_removed = 0 AND account_expired = 0");
+		
+		foreach ($users as $user) {
+			proc_run('php', 'include/notifier.php', 'relocate', $user['uid']);
+		}
+
+		info("Relocation started. Could take a while to complete.");
+		
+		goaway($a->get_baseurl(true) . '/admin/site' );
+	}
+	// end relocate
+	
 	$sitename 		=	((x($_POST,'sitename'))			? notags(trim($_POST['sitename']))		: '');
 	$banner			=	((x($_POST,'banner'))      		? trim($_POST['banner'])			: false);
 	$info			=	((x($_POST,'info'))      		? trim($_POST['info'])			: false);
@@ -508,6 +572,7 @@ function admin_page_site(&$a) {
 		'$corporate' => t('Policies'),
 		'$advanced' => t('Advanced'),
 		'$performance' => t('Performance'),
+		'$relocate'=> t('Relocate - WARNING: advanced function. Could make this server unreachable.'),
 		
 		'$baseurl' => $a->get_baseurl(true),
 		// name, label, value, help string, extra data...
@@ -564,6 +629,9 @@ function admin_page_site(&$a) {
 		'$lockpath'		=> array('lockpath', t("Path for lock file"), get_config('system','lockpath'), "The lock file is used to avoid multiple pollers at one time. Only define a folder here."),
 		'$temppath'		=> array('temppath', t("Temp path"), get_config('system','temppath'), "If you have a restricted system where the webserver can't access the system temp path, enter another path here."),
 		'$basepath'		=> array('basepath', t("Base path to installation"), get_config('system','basepath'), "If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot."),
+		
+		'$relocate_url'     => array('relocate_url', t("New base url"), $a->get_baseurl(), "Change base url for this server. Sends relocate message to all DFRN contacts of all users."),
+		
         '$form_security_token' => get_form_security_token("admin_site"),
 
 	));
diff --git a/mod/settings.php b/mod/settings.php
index a75230f339..20a5c72684 100644
--- a/mod/settings.php
+++ b/mod/settings.php
@@ -306,6 +306,12 @@ function settings_post(&$a) {
 
 	check_form_security_token_redirectOnErr('/settings', 'settings');
 	
+	if (x($_POST,'resend_relocate')) {
+		proc_run('php', 'include/notifier.php', 'relocate', local_user());
+		info(t("Relocate message has been send to your contacts"));
+		goaway($a->get_baseurl(true) . '/settings');
+	}
+	
 	call_hooks('settings_post', $_POST);
 
 	if((x($_POST,'npassword')) || (x($_POST,'confirm'))) {
@@ -1148,6 +1154,10 @@ function settings_content(&$a) {
 		'$h_descadvn' => t('Change the behaviour of this account for special situations'),
 		'$pagetype' => $pagetype,
 		
+		'$relocate' => t('Relocate'),
+		'$relocate_text' => t("If you have moved this profile from another server, and some of your contacts don't receive your updates, try pushing this button."),
+		'$relocate_button' => t("Resend relocate message to contacts"),
+		
 	));
 
 	call_hooks('settings_form',$o);
diff --git a/view/templates/admin_site.tpl b/view/templates/admin_site.tpl
index 68ba5b32ce..7d0e6d8f46 100644
--- a/view/templates/admin_site.tpl
+++ b/view/templates/admin_site.tpl
@@ -1,8 +1,3 @@
-{{*
- *	AUTOMATICALLY GENERATED TEMPLATE
- *	DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
- *
- *}}
 <script>
 	$(function(){
 		
@@ -115,9 +110,17 @@
 	{{include file="field_checkbox.tpl" field=$use_fulltext_engine}}
 	{{include file="field_input.tpl" field=$itemcache}}
 	{{include file="field_input.tpl" field=$itemcache_duration}}
-
-	
 	<div class="submit"><input type="submit" name="page_site" value="{{$submit}}" /></div>
+
+	</form>
 	
+	{{* separate form for relocate... *}}
+	<form action="{{$baseurl}}/admin/site" method="post">
+	<input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
+	<h3>{{$relocate}}</h3>
+	{{include file="field_input.tpl" field=$relocate_url}}
+	<input type="hidden" name="page_site" value="{{$submit}}">
+	<div class="submit"><input type="submit" name="relocate" value="{{$submit}}" /></div>
 	</form>
+	
 </div>
diff --git a/view/templates/settings.tpl b/view/templates/settings.tpl
index 2ab4bd466c..5a964ae7a3 100644
--- a/view/templates/settings.tpl
+++ b/view/templates/settings.tpl
@@ -1,8 +1,3 @@
-{{*
- *	AUTOMATICALLY GENERATED TEMPLATE
- *	DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN
- *
- *}}
 <h1>{{$ptitle}}</h1>
 
 {{$nickname_block}}
@@ -149,4 +144,12 @@
 <input type="submit" name="submit" class="settings-submit" value="{{$submit}}" />
 </div>
 
+<h3 class="settings-heading">{{$relocate}}</h3>
+<div id="settings-pagetype-desc">{{$relocate_text}}</div>
+
+<div class="settings-submit-wrapper" >
+<input type="submit" name="resend_relocate" class="settings-submit" value="{{$relocate_button}}" />
+</div>
+
+