]> git.mxchange.org Git - friendica.git/blobdiff - mod/admin.php
Merge remote-tracking branch 'upstream/develop' into 1502-contacts-in-scrape
[friendica.git] / mod / admin.php
index 265397a20fd1f66c7aff0e9fac966aeb9463e703..0aa90237380980d474f99f3f2b761db5df52988e 100644 (file)
@@ -4,6 +4,8 @@
   * Friendica admin
   */
 require_once("include/remoteupdate.php");
+require_once("include/enotify.php");
+require_once("include/text.php");
 
 
 /**
@@ -33,7 +35,7 @@ function admin_post(&$a){
                                admin_page_users_post($a);
                                break;
                        case 'plugins':
-                               if ($a->argc > 2 && 
+                               if ($a->argc > 2 &&
                                        is_file("addon/".$a->argv[2]."/".$a->argv[2].".php")){
                                                @include_once("addon/".$a->argv[2]."/".$a->argv[2].".php");
                                                if(function_exists($a->argv[2].'_plugin_admin_post')) {
@@ -119,13 +121,16 @@ function admin_content(&$a) {
        }
 
        $aside['logs'] = Array($a->get_baseurl(true)."/admin/logs/", t("Logs"), "logs");
+       $aside['diagnostics_probe'] = Array($a->get_baseurl(true).'/probe/', t('probe address'), 'probe');
+       $aside['diagnostics_webfinger'] = Array($a->get_baseurl(true).'/webfinger/', t('check webfinger'), 'webfinger');
 
        $t = get_markup_template("admin_aside.tpl");
        $a->page['aside'] .= replace_macros( $t, array(
-                       '$admin' => $aside, 
+                       '$admin' => $aside,
                        '$admtxt' => t('Admin'),
                        '$plugadmtxt' => t('Plugin Features'),
                        '$logtxt' => t('Logs'),
+                       '$diagnosticstxt' => t('diagnostics'),
                        '$h_pending' => t('User registrations waiting for confirmation'),
                        '$admurl'=> $a->get_baseurl(true)."/admin/"
        ));
@@ -168,13 +173,13 @@ function admin_content(&$a) {
        }
 
        if(is_ajax()) {
-               echo $o; 
+               echo $o;
                killme();
                return '';
        } else {
                return $o;
        }
-} 
+}
 
 
 /**
@@ -221,6 +226,8 @@ function admin_page_summary(&$a) {
                '$accounts' => $accounts,
                '$pending' => Array( t('Pending registrations'), $pending),
                '$version' => Array( t('Version'), FRIENDICA_VERSION),
+               '$platform' => FRIENDICA_PLATFORM,
+               '$codename' => FRIENDICA_CODENAME,
                '$build' =>  get_config('system','build'),
                '$plugins' => Array( t('Active plugins'), $a->plugins )
        ));
@@ -242,68 +249,73 @@ function admin_page_site_post(&$a){
        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 );
+                               notice( "Failed 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("unique_contacts", array('url'), $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']))              : '');
+       $hostname               =       ((x($_POST,'hostname'))                 ? notags(trim($_POST['hostname']))              : '');
+       $sender_email           =       ((x($_POST,'sender_email'))             ? notags(trim($_POST['sender_email']))          : '');
        $banner                 =       ((x($_POST,'banner'))                   ? trim($_POST['banner'])                        : false);
+       $shortcut_icon          =       ((x($_POST,'shortcut_icon'))            ? notags(trim($_POST['shortcut_icon']))         : '');
+       $touch_icon             =       ((x($_POST,'touch_icon'))               ? notags(trim($_POST['touch_icon']))            : '');
        $info                   =       ((x($_POST,'info'))                     ? trim($_POST['info'])                  : false);
        $language               =       ((x($_POST,'language'))                 ? notags(trim($_POST['language']))              : '');
        $theme                  =       ((x($_POST,'theme'))                    ? notags(trim($_POST['theme']))                 : '');
@@ -335,7 +347,8 @@ function admin_page_site_post(&$a){
        $no_openid              =       !((x($_POST,'no_openid'))               ? True                                          : False);
        $no_regfullname         =       !((x($_POST,'no_regfullname'))          ? True                                          : False);
        $no_utf                 =       !((x($_POST,'no_utf'))                  ? True                                          : False);
-       $no_community_page      =       !((x($_POST,'no_community_page'))       ? True                                          : False);
+       $community_page_style   =       ((x($_POST,'community_page_style'))     ? intval(trim($_POST['community_page_style']))  : 0);
+       $max_author_posts_community_page        =       ((x($_POST,'max_author_posts_community_page'))  ? intval(trim($_POST['max_author_posts_community_page']))       : 0);
 
        $verifyssl              =       ((x($_POST,'verifyssl'))                ? True                                          : False);
        $proxyuser              =       ((x($_POST,'proxyuser'))                ? notags(trim($_POST['proxyuser']))             : '');
@@ -346,12 +359,14 @@ function admin_page_site_post(&$a){
        $maxloadavg             =       ((x($_POST,'maxloadavg'))               ? intval(trim($_POST['maxloadavg']))            : 50);
        $dfrn_only              =       ((x($_POST,'dfrn_only'))                ? True                                          : False);
        $ostatus_disabled       =       !((x($_POST,'ostatus_disabled'))        ? True                                          : False);
-       $ostatus_poll_interval  =       ((x($_POST,'ostatus_poll_interval'))    ? intval(trim($_POST['ostatus_poll_interval']))         :  0);
+       $ostatus_poll_interval  =       ((x($_POST,'ostatus_poll_interval'))    ? intval(trim($_POST['ostatus_poll_interval'])) :  0);
        $diaspora_enabled       =       ((x($_POST,'diaspora_enabled'))         ? True                                          : False);
        $ssl_policy             =       ((x($_POST,'ssl_policy'))               ? intval($_POST['ssl_policy'])                  : 0);
+       $force_ssl              =       ((x($_POST,'force_ssl'))                ? True                                          : False);
        $old_share              =       ((x($_POST,'old_share'))                ? True                                          : False);
        $hide_help              =       ((x($_POST,'hide_help'))                ? True                                          : False);
        $suppress_language      =       ((x($_POST,'suppress_language'))        ? True                                          : False);
+       $suppress_tags          =       ((x($_POST,'suppress_tags'))            ? True                                          : False);
        $use_fulltext_engine    =       ((x($_POST,'use_fulltext_engine'))      ? True                                          : False);
        $itemcache              =       ((x($_POST,'itemcache'))                ? notags(trim($_POST['itemcache']))             : '');
        $itemcache_duration     =       ((x($_POST,'itemcache_duration'))       ? intval($_POST['itemcache_duration'])          : 0);
@@ -360,7 +375,10 @@ function admin_page_site_post(&$a){
        $temppath               =       ((x($_POST,'temppath'))                 ? notags(trim($_POST['temppath']))              : '');
        $basepath               =       ((x($_POST,'basepath'))                 ? notags(trim($_POST['basepath']))              : '');
        $singleuser             =       ((x($_POST,'singleuser'))               ? notags(trim($_POST['singleuser']))            : '');
-       $enable_noscrape = ((x($_POST,'enable_noscrape')) ? true : false);
+       $proxy_disabled         =       ((x($_POST,'proxy_disabled'))           ? True                                          : False);
+       $old_pager              =       ((x($_POST,'old_pager'))                ? True                                          : False);
+       $only_tag_search        =       ((x($_POST,'only_tag_search'))          ? True                                          : False);
+
        if($ssl_policy != intval(get_config('system','ssl_policy'))) {
                if($ssl_policy == SSL_POLICY_FULL) {
                        q("update `contact` set
@@ -375,14 +393,14 @@ function admin_page_site_post(&$a){
                                `poco`    = replace(`poco`   , 'http:' , 'https:')
                                where `self` = 1"
                        );
-                       q("update `profile` set 
+                       q("update `profile` set
                                `photo`   = replace(`photo`  , 'http:' , 'https:'),
                                `thumb`   = replace(`thumb`  , 'http:' , 'https:')
                                where 1 "
                        );
                }
                elseif($ssl_policy == SSL_POLICY_SELFSIGN) {
-                       q("update `contact` set 
+                       q("update `contact` set
                                `url`     = replace(`url`    , 'https:' , 'http:'),
                                `photo`   = replace(`photo`  , 'https:' , 'http:'),
                                `thumb`   = replace(`thumb`  , 'https:' , 'http:'),
@@ -394,7 +412,7 @@ function admin_page_site_post(&$a){
                                `poco`    = replace(`poco`   , 'https:' , 'http:')
                                where `self` = 1"
                        );
-                       q("update `profile` set 
+                       q("update `profile` set
                                `photo`   = replace(`photo`  , 'https:' , 'http:'),
                                `thumb`   = replace(`thumb`  , 'https:' , 'http:')
                                where 1 "
@@ -406,7 +424,12 @@ function admin_page_site_post(&$a){
        set_config('system','poll_interval',$poll_interval);
        set_config('system','maxloadavg',$maxloadavg);
        set_config('config','sitename',$sitename);
+       set_config('config','hostname',$hostname);
+       set_config('config','sender_email', $sender_email);
        set_config('system','suppress_language',$suppress_language);
+       set_config('system','suppress_tags',$suppress_tags);
+       set_config('system','shortcut_icon',$shortcut_icon);
+       set_config('system','touch_icon',$touch_icon);
        if ($banner==""){
                // don't know why, but del_config doesn't work...
                q("DELETE FROM `config` WHERE `cat` = '%s' AND `k` = '%s' LIMIT 1",
@@ -417,9 +440,9 @@ function admin_page_site_post(&$a){
                set_config('system','banner', $banner);
        }
        if ($info=="") {
-           del_config('config','info');
+               del_config('config','info');
        } else {
-           set_config('config','info',$info);
+               set_config('config','info',$info);
        }
        set_config('system','language', $language);
        set_config('system','theme', $theme);
@@ -427,12 +450,12 @@ function admin_page_site_post(&$a){
                del_config('system','mobile-theme');
        } else {
                set_config('system','mobile-theme', $theme_mobile);
-        }
-        if ( $singleuser === '---' ) {
-            del_config('system','singleuser');
-        } else {
-            set_config('system','singleuser', $singleuser);
-        }
+               }
+               if ( $singleuser === '---' ) {
+                       del_config('system','singleuser');
+               } else {
+                       set_config('system','singleuser', $singleuser);
+               }
        set_config('system','maximagesize', $maximagesize);
        set_config('system','max_image_length', $maximagelength);
        set_config('system','jpeg_quality', $jpegimagequality);
@@ -463,7 +486,8 @@ function admin_page_site_post(&$a){
        set_config('system','block_extended_register', $no_multi_reg);
        set_config('system','no_openid', $no_openid);
        set_config('system','no_regfullname', $no_regfullname);
-       set_config('system','no_community_page', $no_community_page);
+       set_config('system','community_page_style', $community_page_style);
+       set_config('system','max_author_posts_community_page', $max_author_posts_community_page);
        set_config('system','no_utf', $no_utf);
        set_config('system','verifyssl', $verifyssl);
        set_config('system','proxyuser', $proxyuser);
@@ -471,10 +495,11 @@ function admin_page_site_post(&$a){
        set_config('system','curl_timeout', $timeout);
        set_config('system','dfrn_only', $dfrn_only);
        set_config('system','ostatus_disabled', $ostatus_disabled);
-        set_config('system','ostatus_poll_interval', $ostatus_poll_interval);
+       set_config('system','ostatus_poll_interval', $ostatus_poll_interval);
        set_config('system','diaspora_enabled', $diaspora_enabled);
        set_config('config','private_addons', $private_addons);
 
+       set_config('system','force_ssl', $force_ssl);
        set_config('system','old_share', $old_share);
        set_config('system','hide_help', $hide_help);
        set_config('system','use_fulltext_engine', $use_fulltext_engine);
@@ -484,7 +509,9 @@ function admin_page_site_post(&$a){
        set_config('system','lockpath', $lockpath);
        set_config('system','temppath', $temppath);
        set_config('system','basepath', $basepath);
-       set_config('system','enable_noscrape', $enable_noscrape);
+       set_config('system','proxy_disabled', $proxy_disabled);
+       set_config('system','old_pager', $old_pager);
+       set_config('system','only_tag_search', $only_tag_search);
 
        info( t('Site settings updated.') . EOL);
        goaway($a->get_baseurl(true) . '/admin/site' );
@@ -521,32 +548,39 @@ function admin_page_site(&$a) {
                foreach($files as $file) {
                        $f = basename($file);
                        $theme_name = ((file_exists($file . '/experimental')) ?  sprintf("%s - \x28Experimental\x29", $f) : $f);
-            if (file_exists($file . '/mobile')) {
-                $theme_choices_mobile[$f] = $theme_name;
-            }
+                       if (file_exists($file . '/mobile')) {
+                               $theme_choices_mobile[$f] = $theme_name;
+                       }
                else {
-                $theme_choices[$f] = $theme_name;
+                               $theme_choices[$f] = $theme_name;
                        }
                }
-        }
-
-        /* OStatus conversation poll choices */
-        $ostatus_poll_choices = array(
-               "-2" => t("Never"),
-               "-1" => t("At post arrival"),
-               "0" => t("Frequently"),
-               "60" => t("Hourly"),
-               "720" => t("Twice daily"),
-               "1440" => t("Daily")
-            );
-
-        /* get user names to make the install a personal install of X */
-        $user_names = array();
-        $user_names['---'] = t('Multi user instance');
-        $users = q("SELECT username, nickname FROM `user`");
-        foreach ($users as $user) {
-            $user_names[$user['nickname']] = $user['username'];
-        }
+               }
+
+               /* Community page style */
+               $community_page_style_choices = array(
+                       CP_NO_COMMUNITY_PAGE => t("No community page"),
+                       CP_USERS_ON_SERVER => t("Public postings from users of this site"),
+                       CP_GLOBAL_COMMUNITY => t("Global community page")
+                       );
+
+               /* OStatus conversation poll choices */
+               $ostatus_poll_choices = array(
+                       "-2" => t("Never"),
+                       "-1" => t("At post arrival"),
+                       "0" => t("Frequently"),
+                       "60" => t("Hourly"),
+                       "720" => t("Twice daily"),
+                       "1440" => t("Daily")
+                       );
+
+               /* get user names to make the install a personal install of X */
+               $user_names = array();
+               $user_names['---'] = t('Multi user instance');
+               $users = q("SELECT username, nickname FROM `user`");
+               foreach ($users as $user) {
+                       $user_names[$user['nickname']] = $user['username'];
+               }
 
        /* Banner */
        $banner = get_config('system','banner');
@@ -568,7 +602,7 @@ function admin_page_site(&$a) {
                REGISTER_CLOSED => t("Closed"),
                REGISTER_APPROVE => t("Requires approval"),
                REGISTER_OPEN => t("Open")
-       ); 
+       );
 
        $ssl_choices = array(
                SSL_POLICY_NONE => t("No SSL policy, links will track page SSL state"),
@@ -576,6 +610,9 @@ function admin_page_site(&$a) {
                SSL_POLICY_SELFSIGN => t("Self-signed certificate, use SSL for local links only (discouraged)")
        );
 
+       if ($a->config['hostname'] == "")
+               $a->config['hostname'] = $a->get_hostname();
+
        $t = get_markup_template("admin_site.tpl");
        return replace_macros($t, array(
                '$title' => t('Administration'),
@@ -590,12 +627,17 @@ function admin_page_site(&$a) {
                '$baseurl' => $a->get_baseurl(true),
                // name, label, value, help string, extra data...
                '$sitename'             => array('sitename', t("Site name"), htmlentities($a->config['sitename'], ENT_QUOTES), 'UTF-8'),
+               '$hostname'             => array('hostname', t("Host name"), $a->config['hostname'], ""),
+               '$sender_email'         => array('sender_email', t("Sender Email"), $a->config['sender_email'], "The email address your server shall use to send notification emails from.", "", "", "email"),
                '$banner'               => array('banner', t("Banner/Logo"), $banner, ""),
+               '$shortcut_icon'        => array('shortcut_icon', t("Shortcut icon"), get_config('system','shortcut_icon'),  "Link to an icon that will be used for browsers."),
+               '$touch_icon'           => array('touch_icon', t("Touch icon"), get_config('system','touch_icon'),  "Link to an icon that will be used for tablets and mobiles."),
                '$info' => array('info',t('Additional Info'), $info, t('For public servers: you can add additional information here that will be listed at dir.friendica.com/siteinfo.')),
                '$language'             => array('language', t("System language"), get_config('system','language'), "", $lang_choices),
                '$theme'                => array('theme', t("System theme"), get_config('system','theme'), t("Default system theme - may be over-ridden by user profiles - <a href='#' id='cnftheme'>change theme settings</a>"), $theme_choices),
                '$theme_mobile'         => array('theme_mobile', t("Mobile system theme"), get_config('system','mobile-theme'), t("Theme for mobile devices"), $theme_choices_mobile),
                '$ssl_policy'           => array('ssl_policy', t("SSL link policy"), (string) intval(get_config('system','ssl_policy')), t("Determines whether generated links should be forced to use SSL"), $ssl_choices),
+               '$force_ssl'            => array('force_ssl', t("Force SSL"), get_config('system','force_ssl'), t("Force all Non-SSL requests to SSL - Attention: on some systems it could lead to endless loops.")),
                '$old_share'            => array('old_share', t("Old style 'Share'"), get_config('system','old_share'), t("Deactivates the bbcode element 'share' for repeating items.")),
                '$hide_help'            => array('hide_help', t("Hide help entry from navigation menu"), get_config('system','hide_help'), t("Hides the menu entry for the Help pages from the navigation menu. You can still access it calling /help directly.")),
                '$singleuser'           => array('singleuser', t("Single user instance"), get_config('system','singleuser'), t("Make this instance multi-user or single-user for the named user"), $user_names),
@@ -622,10 +664,11 @@ function admin_page_site(&$a) {
                '$no_openid'            => array('no_openid', t("OpenID support"), !get_config('system','no_openid'), t("OpenID support for registration and logins.")),
                '$no_regfullname'       => array('no_regfullname', t("Fullname check"), !get_config('system','no_regfullname'), t("Force users to register with a space between firstname and lastname in Full name, as an antispam measure")),
                '$no_utf'               => array('no_utf', t("UTF-8 Regular expressions"), !get_config('system','no_utf'), t("Use PHP UTF8 regular expressions")),
-               '$no_community_page'    => array('no_community_page', t("Show Community Page"), !get_config('system','no_community_page'), t("Display a Community page showing all recent public postings on this site.")),
-               '$ostatus_disabled'     => array('ostatus_disabled', t("Enable OStatus support"), !get_config('system','ostatus_disabled'), t("Provide built-in OStatus \x28StatusNet, GNU Social etc.\x29 compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed.")),     
+               '$community_page_style' => array('community_page_style', t("Community Page Style"), get_config('system','community_page_style'), t("Type of community page to show. 'Global community' shows every public posting from an open distributed network that arrived on this server."), $community_page_style_choices),
+               '$max_author_posts_community_page' => array('max_author_posts_community_page', t("Posts per user on community page"), get_config('system','max_author_posts_community_page'), t("The maximum number of posts per user on the community page. (Not valid for 'Global Community')")),
+               '$ostatus_disabled'     => array('ostatus_disabled', t("Enable OStatus support"), !get_config('system','ostatus_disabled'), t("Provide built-in OStatus \x28StatusNet, GNU Social etc.\x29 compatibility. All communications in OStatus are public, so privacy warnings will be occasionally displayed.")),
                '$ostatus_poll_interval'        => array('ostatus_poll_interval', t("OStatus conversation completion interval"), (string) intval(get_config('system','ostatus_poll_interval')), t("How often shall the poller check for new entries in OStatus conversations? This can be a very ressource task."), $ostatus_poll_choices),
-               '$diaspora_enabled'     => array('diaspora_enabled', t("Enable Diaspora support"), get_config('system','diaspora_enabled'), t("Provide built-in Diaspora network compatibility.")),     
+               '$diaspora_enabled'     => array('diaspora_enabled', t("Enable Diaspora support"), get_config('system','diaspora_enabled'), t("Provide built-in Diaspora network compatibility.")),
                '$dfrn_only'            => array('dfrn_only', t('Only allow Friendica contacts'), get_config('system','dfrn_only'), t("All contacts must use Friendica protocols. All other built-in communication protocols disabled.")),
                '$verifyssl'            => array('verifyssl', t("Verify SSL"), get_config('system','verifyssl'), t("If you wish, you can turn on strict certificate checking. This will mean you cannot connect (at all) to self-signed SSL sites.")),
                '$proxyuser'            => array('proxyuser', t("Proxy user"), get_config('system','proxyuser'), ""),
@@ -637,17 +680,19 @@ function admin_page_site(&$a) {
 
                '$use_fulltext_engine'  => array('use_fulltext_engine', t("Use MySQL full text engine"), get_config('system','use_fulltext_engine'), t("Activates the full text engine. Speeds up search - but can only search for four and more characters.")),
                '$suppress_language'    => array('suppress_language', t("Suppress Language"), get_config('system','suppress_language'), t("Suppress language information in meta information about a posting.")),
+               '$suppress_tags'        => array('suppress_tags', t("Suppress Tags"), get_config('system','suppress_tags'), t("Suppress showing a list of hashtags at the end of the posting.")),
                '$itemcache'            => array('itemcache', t("Path to item cache"), get_config('system','itemcache'), "The item caches buffers generated bbcode and external images."),
                '$itemcache_duration'   => array('itemcache_duration', t("Cache duration in seconds"), get_config('system','itemcache_duration'), t("How long should the cache files be hold? Default value is 86400 seconds (One day). To disable the item cache, set the value to -1.")),
                '$max_comments'         => array('max_comments', t("Maximum numbers of comments per post"), get_config('system','max_comments'), t("How much comments should be shown for each post? Default value is 100.")),
                '$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."),
+               '$proxy_disabled'       => array('proxy_disabled', t("Disable picture proxy"), get_config('system','proxy_disabled'), t("The picture proxy increases performance and privacy. It shouldn't be used on systems with very low bandwith.")),
+               '$old_pager'            => array('old_pager', t("Enable old style pager"), get_config('system','old_pager'), t("The old style pager has page numbers but slows down massively the page speed.")),
+               '$only_tag_search'      => array('only_tag_search', t("Only search in tags"), get_config('system','only_tag_search'), t("On large systems the text search can slow down the system extremely.")),
 
                '$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."),
-               
-               '$enable_noscrape'=> array('enable_noscrape', t("Enable noscrape"), get_config('system','enable_noscrape'), t("The noscrape feature speeds up directory submissions by using JSON data instead of HTML scraping.")),
-    '$form_security_token' => get_form_security_token("admin_site")
+       '$form_security_token' => get_form_security_token("admin_site")
 
        ));
 
@@ -667,23 +712,37 @@ function admin_page_dbsync(&$a) {
                goaway($a->get_baseurl(true) . '/admin/dbsync');
        }
 
-       if($a->argc > 2 && intval($a->argv[2])) {
+       if(($a->argc > 2) AND (intval($a->argv[2]) OR ($a->argv[2] === 'check'))) {
+               require_once("include/dbstructure.php");
+               $retval = update_structure(false, true);
+               if (!$retval) {
+                       $o .= sprintf(t("Database structure update %s was successfully applied."), DB_UPDATE_VERSION)."<br />";
+                       set_config('database', 'dbupdate_'.DB_UPDATE_VERSION, 'success');
+               } else
+                       $o .= sprintf(t("Executing of database structure update %s failed with error: %s"),
+                                       DB_UPDATE_VERSION, $retval)."<br />";
+               if ($a->argv[2] === 'check')
+                       return $o;
+       }
+
+       if ($a->argc > 2 && intval($a->argv[2])) {
                require_once('update.php');
                $func = 'update_' . intval($a->argv[2]);
                if(function_exists($func)) {
                        $retval = $func();
                        if($retval === UPDATE_FAILED) {
-                               $o .= sprintf( t('Executing %s failed. Check system logs.'), $func); 
+                               $o .= sprintf(t("Executing %s failed with error: %s"), $func, $retval);
                        }
                        elseif($retval === UPDATE_SUCCESS) {
-                               $o .= sprintf( t('Update %s was successfully applied.', $func));
+                               $o .= sprintf(t('Update %s was successfully applied.', $func));
                                set_config('database',$func, 'success');
                        }
                        else
-                               $o .= sprintf( t('Update %s did not return a status. Unknown if it succeeded.'), $func);
+                               $o .= sprintf(t('Update %s did not return a status. Unknown if it succeeded.'), $func);
+               } else {
+                       $o .= sprintf(t('There was no additional update function %s that needed to be called.'), $func)."<br />";
+                       set_config('database',$func, 'success');
                }
-               else
-                       $o .= sprintf( t('Update function %s could not be found.'), $func);
                return $o;
        }
 
@@ -697,17 +756,22 @@ function admin_page_dbsync(&$a) {
                        $failed[] = $upd;
                }
        }
-       if(! count($failed))
-               return '<h3>' . t('No failed updates.') . '</h3>';
-
-       $o = replace_macros(get_markup_template('failed_updates.tpl'),array(
-               '$base' => $a->get_baseurl(true),
-               '$banner' => t('Failed Updates'),
-               '$desc' => t('This does not include updates prior to 1139, which did not return a status.'),
-               '$mark' => t('Mark success (if update was manually applied)'),
-               '$apply' => t('Attempt to execute this update step automatically'),
-               '$failed' => $failed
-       ));
+       if(! count($failed)) {
+               $o = replace_macros(get_markup_template('structure_check.tpl'),array(
+                       '$base' => $a->get_baseurl(true),
+                       '$banner' => t('No failed updates.'),
+                       '$check' => t('Check database structure'),
+               ));
+       } else {
+               $o = replace_macros(get_markup_template('failed_updates.tpl'),array(
+                       '$base' => $a->get_baseurl(true),
+                       '$banner' => t('Failed Updates'),
+                       '$desc' => t('This does not include updates prior to 1139, which did not return a status.'),
+                       '$mark' => t('Mark success (if update was manually applied)'),
+                       '$apply' => t('Attempt to execute this update step automatically'),
+                       '$failed' => $failed
+               ));
+       }
 
        return $o;
 
@@ -721,39 +785,61 @@ function admin_page_dbsync(&$a) {
 function admin_page_users_post(&$a){
        $pending = ( x($_POST, 'pending') ? $_POST['pending'] : Array() );
        $users = ( x($_POST, 'user') ? $_POST['user'] : Array() );
-       $nu_name = ( x($_POST, 'new_user_name') ? $_POST['new_user_name'] : ''); 
-  $nu_nickname = ( x($_POST, 'new_user_nickname') ? $_POST['new_user_nickname'] : ''); 
-  $nu_email = ( x($_POST, 'new_user_email') ? $_POST['new_user_email'] : '');
-
-  check_form_security_token_redirectOnErr('/admin/users', 'admin_users');
-
-  if (!($nu_name==="") && !($nu_email==="") && !($nu_nickname==="")) { 
-      require_once('include/user.php'); 
-      require_once('include/email.php'); 
-      $result = create_user( array('username'=>$nu_name, 'email'=>$nu_email, 'nickname'=>$nu_nickname, 'verified'=>1)  ); 
-      if(! $result['success']) { 
-                   notice($result['message']); 
-                   return; 
-      } 
-      $nu = $result['user']; 
-      $email_tpl = get_intltext_template("register_adminadd_eml.tpl"); 
-      $email_tpl = replace_macros($email_tpl, array( 
-                   '$sitename' => $a->config['sitename'], 
-                   '$siteurl' =>  $a->get_baseurl(), 
-                   '$username' => $nu['username'], 
-                   '$email' => $nu['email'], 
-                   '$password' => $result['password'], 
-                   '$uid' => $nu['uid'] )); 
-      $res = mail($nu['email'], email_header_encode( sprintf( t('Registration details for %s'), $a->config['sitename']),'UTF-8'), 
-                   $email_tpl,  
-                   'From: ' . 'Administrator' . '@' . $_SERVER['SERVER_NAME'] . "\n" 
-                   . 'Content-type: text/plain; charset=UTF-8' . "\n" 
-                   . 'Content-transfer-encoding: 8bit' ); 
-      if ($res) { 
-                   info( t('Registration successful. Email send to user').EOL ); 
-      } 
-  }
+       $nu_name = ( x($_POST, 'new_user_name') ? $_POST['new_user_name'] : '');
+       $nu_nickname = ( x($_POST, 'new_user_nickname') ? $_POST['new_user_nickname'] : '');
+       $nu_email = ( x($_POST, 'new_user_email') ? $_POST['new_user_email'] : '');
+
+       check_form_security_token_redirectOnErr('/admin/users', 'admin_users');
+
+       if (!($nu_name==="") && !($nu_email==="") && !($nu_nickname==="")) {
+               require_once('include/user.php');
+
+               $result = create_user( array('username'=>$nu_name, 'email'=>$nu_email, 'nickname'=>$nu_nickname, 'verified'=>1)  );
+               if(! $result['success']) {
+                       notice($result['message']);
+                       return;
+               }
+               $nu = $result['user'];
+               $preamble = deindent(t('
+                       Dear %1$s,
+                               the administrator of %2$s has set up an account for you.'));
+               $body = deindent(t('
+                       The login details are as follows:
+
+                       Site Location:  %1$s
+                       Login Name:             %2$s
+                       Password:               %3$s
+
+                       You may change your password from your account "Settings" page after logging
+                       in.
+
+                       Please take a few moments to review the other account settings on that page.
+
+                       You may also wish to add some basic information to your default profile
+                       (on the "Profiles" page) so that other people can easily find you.
+
+                       We recommend setting your full name, adding a profile photo,
+                       adding some profile "keywords" (very useful in making new friends) - and
+                       perhaps what country you live in; if you do not wish to be more specific
+                       than that.
+
+                       We fully respect your right to privacy, and none of these items are necessary.
+                       If you are new and do not know anybody here, they may help
+                       you to make some new and interesting friends.
+
+                       Thank you and welcome to %4$s.'));
+
+               $preamble = sprintf($preamble, $nu['username'], $a->config['sitename']);
+               $body = sprintf($body, $a->get_baseurl(), $nu['email'], $result['password'], $a->config['sitename']);
+
+               notification(array(
+                       'type' => "SYSTEM_EMAIL",
+                       'to_email' => $nu['email'],
+                       'subject'=> sprintf( t('Registration details for %s'), $a->config['sitename']),
+                       'preamble'=> $preamble,
+                       'body' => $body));
+
+       }
 
        if (x($_POST,'page_users_block')){
                foreach($users as $uid){
@@ -802,7 +888,7 @@ function admin_page_users(&$a){
                }
                switch($a->argv[2]){
                        case "delete":{
-                check_form_security_token_redirectOnErr('/admin/users', 'admin_users', 't');
+                               check_form_security_token_redirectOnErr('/admin/users', 'admin_users', 't');
                                // delete user
                                require_once("include/Contact.php");
                                user_remove($uid);
@@ -810,7 +896,7 @@ function admin_page_users(&$a){
                                notice( sprintf(t("User '%s' deleted"), $user[0]['username']) . EOL);
                        }; break;
                        case "block":{
-                check_form_security_token_redirectOnErr('/admin/users', 'admin_users', 't');
+                               check_form_security_token_redirectOnErr('/admin/users', 'admin_users', 't');
                                q("UPDATE `user` SET `blocked`=%d WHERE `uid`=%s",
                                        intval( 1-$user[0]['blocked'] ),
                                        intval( $uid )
@@ -866,7 +952,7 @@ function admin_page_users(&$a){
                        t('Normal Account'),
                        t('Soapbox Account'),
                        t('Community/Celebrity Account'),
-                        t('Automatic Friend Account')
+                                               t('Automatic Friend Account')
                );
                $e['page-flags'] = $accounts[$e['page-flags']];
                $e['register_date'] = relative_date($e['register_date']);
@@ -921,9 +1007,9 @@ function admin_page_users(&$a){
                '$delete' => t('Delete'),
                '$block' => t('Block'),
                '$unblock' => t('Unblock'),
-        '$siteadmin' => t('Site admin'),
-        '$accountexpired' => t('Account expired'),
-               
+               '$siteadmin' => t('Site admin'),
+               '$accountexpired' => t('Account expired'),
+
                '$h_users' => t('Users'),
                '$h_newuser' => t('New User'),
                '$th_deleted' => array( t('Name'), t('Email'), t('Register date'), t('Last login'), t('Last item'), t('Deleted since') ),
@@ -932,7 +1018,7 @@ function admin_page_users(&$a){
                '$confirm_delete_multi' => t('Selected users will be deleted!\n\nEverything these users had posted on this site will be permanently deleted!\n\nAre you sure?'),
                '$confirm_delete' => t('The user {0} will be deleted!\n\nEverything this user has posted on this site will be permanently deleted!\n\nAre you sure?'),
 
-        '$form_security_token' => get_form_security_token("admin_users"),
+               '$form_security_token' => get_form_security_token("admin_users"),
 
                // values //
                '$baseurl' => $a->get_baseurl(true),
@@ -940,9 +1026,9 @@ function admin_page_users(&$a){
                '$pending' => $pending,
                'deleted' => $deleted,
                '$users' => $users,
-               '$newusername'  => array('new_user_name', t("Name"), '', t("Name of the new user.")), 
-    '$newusernickname'  => array('new_user_nickname', t("Nickname"), '', t("Nickname of the new user.")), 
-    '$newuseremail'  => array('new_user_email', t("Email"), '', t("Email address of the new user.")),
+               '$newusername'  => array('new_user_name', t("Name"), '', t("Name of the new user.")),
+               '$newusernickname'  => array('new_user_nickname', t("Nickname"), '', t("Nickname of the new user.")),
+               '$newuseremail'  => array('new_user_email', t("Email"), '', t("Email address of the new user."), '', '', 'email'),
        ));
        $o .= paginate($a);
        return $o;
@@ -1071,7 +1157,7 @@ function admin_page_plugins(&$a){
                '$baseurl' => $a->get_baseurl(true),
                '$function' => 'plugins',
                '$plugins' => $plugins,
-        '$form_security_token' => get_form_security_token("admin_themes"),
+               '$form_security_token' => get_form_security_token("admin_themes"),
        ));
 }
 
@@ -1156,9 +1242,11 @@ function admin_page_themes(&$a){
                foreach($files as $file) {
                        $f = basename($file);
                        $is_experimental = intval(file_exists($file . '/experimental'));
-                       $is_supported = 1-(intval(file_exists($file . '/unsupported'))); // Is not used yet
+                       $is_supported = 1-(intval(file_exists($file . '/unsupported')));
                        $is_allowed = intval(in_array($f,$allowed_themes));
-                       $themes[] = array('name' => $f, 'experimental' => $is_experimental, 'supported' => $is_supported, 'allowed' => $is_allowed);
+
+                       if ($is_allowed OR $is_supported OR get_config("system", "show_unsupported_themes"))
+                               $themes[] = array('name' => $f, 'experimental' => $is_experimental, 'supported' => $is_supported, 'allowed' => $is_allowed);
                }
        }
 
@@ -1273,7 +1361,7 @@ function admin_page_themes(&$a){
                '$plugins' => $xthemes,
                '$experimental' => t('[Experimental]'),
                '$unsupported' => t('[Unsupported]'),
-        '$form_security_token' => get_form_security_token("admin_themes"),
+               '$form_security_token' => get_form_security_token("admin_themes"),
        ));
 }
 
@@ -1283,10 +1371,10 @@ function admin_page_themes(&$a){
  *
  * @param App $a
  */
+
 function admin_page_logs_post(&$a) {
        if (x($_POST,"page_logs")) {
-        check_form_security_token_redirectOnErr('/admin/logs', 'admin_logs');
+               check_form_security_token_redirectOnErr('/admin/logs', 'admin_logs');
 
                $logfile                =       ((x($_POST,'logfile'))          ? notags(trim($_POST['logfile']))       : '');
                $debugging              =       ((x($_POST,'debugging'))        ? true                                                          : false);
@@ -1325,7 +1413,7 @@ function admin_page_logs(&$a){
        $data = '';
 
        if(!file_exists($f)) {
-               $data = t("Error trying to open <strong>$f</strong> log file.\r\n<br/>Check to see if file $f exist and is 
+               $data = t("Error trying to open <strong>$f</strong> log file.\r\n<br/>Check to see if file $f exist and is
 readable.");
        }
        else {
@@ -1365,7 +1453,7 @@ readable.");
                '$logfile'                      => array('logfile', t("Log file"), get_config('system','logfile'), t("Must be writable by web server. Relative to your Friendica top-level directory.")),
                '$loglevel'             => array('loglevel', t("Log level"), get_config('system','loglevel'), "", $log_choices),
 
-        '$form_security_token' => get_form_security_token("admin_logs"),
+               '$form_security_token' => get_form_security_token("admin_logs"),
        ));
 }