]> git.mxchange.org Git - friendica.git/blobdiff - mod/admin.php
More "relocate":
[friendica.git] / mod / admin.php
index ad91ea72cf2ac21d8b87e3e351d84d4e7146cb6e..174a9899f5d67a659067ed9ae0ffc743d60a7ccb 100644 (file)
@@ -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"),
 
        ));