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 ://")); + 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 - * - *}}