Example #1
0
function settings_post(&$a)
{
    if (!local_user()) {
        return;
    }
    if (x($_SESSION, 'submanage') && intval($_SESSION['submanage'])) {
        return;
    }
    if (count($a->user) && x($a->user, 'uid') && $a->user['uid'] != local_user()) {
        notice(t('Permission denied.') . EOL);
        return;
    }
    $old_page_flags = $a->user['page-flags'];
    if ($a->argc > 1 && $a->argv[1] === 'oauth' && x($_POST, 'remove')) {
        check_form_security_token_redirectOnErr('/settings/oauth', 'settings_oauth');
        $key = $_POST['remove'];
        q("DELETE FROM tokens WHERE id='%s' AND uid=%d", dbesc($key), local_user());
        goaway($a->get_baseurl(true) . "/settings/oauth/");
        return;
    }
    if ($a->argc > 2 && $a->argv[1] === 'oauth' && ($a->argv[2] === 'edit' || $a->argv[2] === 'add') && x($_POST, 'submit')) {
        check_form_security_token_redirectOnErr('/settings/oauth', 'settings_oauth');
        $name = x($_POST, 'name') ? $_POST['name'] : '';
        $key = x($_POST, 'key') ? $_POST['key'] : '';
        $secret = x($_POST, 'secret') ? $_POST['secret'] : '';
        $redirect = x($_POST, 'redirect') ? $_POST['redirect'] : '';
        $icon = x($_POST, 'icon') ? $_POST['icon'] : '';
        if ($name == "" || $key == "" || $secret == "") {
            notice(t("Missing some important data!"));
        } else {
            if ($_POST['submit'] == t("Update")) {
                $r = q("UPDATE clients SET\n\t\t\t\t\t\t\tclient_id='%s',\n\t\t\t\t\t\t\tpw='%s',\n\t\t\t\t\t\t\tname='%s',\n\t\t\t\t\t\t\tredirect_uri='%s',\n\t\t\t\t\t\t\ticon='%s',\n\t\t\t\t\t\t\tuid=%d\n\t\t\t\t\t\tWHERE client_id='%s'", dbesc($key), dbesc($secret), dbesc($name), dbesc($redirect), dbesc($icon), local_user(), dbesc($key));
            } else {
                $r = q("INSERT INTO clients\n\t\t\t\t\t\t\t(client_id, pw, name, redirect_uri, icon, uid)\n\t\t\t\t\t\tVALUES ('%s','%s','%s','%s','%s',%d)", dbesc($key), dbesc($secret), dbesc($name), dbesc($redirect), dbesc($icon), local_user());
            }
        }
        goaway($a->get_baseurl(true) . "/settings/oauth/");
        return;
    }
    if ($a->argc > 1 && $a->argv[1] == 'addon') {
        check_form_security_token_redirectOnErr('/settings/addon', 'settings_addon');
        call_hooks('plugin_settings_post', $_POST);
        return;
    }
    if ($a->argc > 1 && $a->argv[1] == 'connectors') {
        check_form_security_token_redirectOnErr('/settings/connectors', 'settings_connectors');
        if (x($_POST, 'imap-submit')) {
            $mail_server = x($_POST, 'mail_server') ? $_POST['mail_server'] : '';
            $mail_port = x($_POST, 'mail_port') ? $_POST['mail_port'] : '';
            $mail_ssl = x($_POST, 'mail_ssl') ? strtolower(trim($_POST['mail_ssl'])) : '';
            $mail_user = x($_POST, 'mail_user') ? $_POST['mail_user'] : '';
            $mail_pass = x($_POST, 'mail_pass') ? trim($_POST['mail_pass']) : '';
            $mail_action = x($_POST, 'mail_action') ? trim($_POST['mail_action']) : '';
            $mail_movetofolder = x($_POST, 'mail_movetofolder') ? trim($_POST['mail_movetofolder']) : '';
            $mail_replyto = x($_POST, 'mail_replyto') ? $_POST['mail_replyto'] : '';
            $mail_pubmail = x($_POST, 'mail_pubmail') ? $_POST['mail_pubmail'] : '';
            $mail_disabled = function_exists('imap_open') && !get_config('system', 'imap_disabled') ? 0 : 1;
            if (get_config('system', 'dfrn_only')) {
                $mail_disabled = 1;
            }
            if (!$mail_disabled) {
                $failed = false;
                $r = q("SELECT * FROM `mailacct` WHERE `uid` = %d LIMIT 1", intval(local_user()));
                if (!count($r)) {
                    q("INSERT INTO `mailacct` (`uid`) VALUES (%d)", intval(local_user()));
                }
                if (strlen($mail_pass)) {
                    $pass = '';
                    openssl_public_encrypt($mail_pass, $pass, $a->user['pubkey']);
                    q("UPDATE `mailacct` SET `pass` = '%s' WHERE `uid` = %d", dbesc(bin2hex($pass)), intval(local_user()));
                }
                $r = q("UPDATE `mailacct` SET `server` = '%s', `port` = %d, `ssltype` = '%s', `user` = '%s',\n\t\t\t\t\t`action` = %d, `movetofolder` = '%s',\n\t\t\t\t\t`mailbox` = 'INBOX', `reply_to` = '%s', `pubmail` = %d WHERE `uid` = %d", dbesc($mail_server), intval($mail_port), dbesc($mail_ssl), dbesc($mail_user), intval($mail_action), dbesc($mail_movetofolder), dbesc($mail_replyto), intval($mail_pubmail), intval(local_user()));
                logger("mail: updating mailaccount. Response: " . print_r($r, true));
                $r = q("SELECT * FROM `mailacct` WHERE `uid` = %d LIMIT 1", intval(local_user()));
                if (count($r)) {
                    $eacct = $r[0];
                    require_once 'include/email.php';
                    $mb = construct_mailbox_name($eacct);
                    if (strlen($eacct['server'])) {
                        $dcrpass = '';
                        openssl_private_decrypt(hex2bin($eacct['pass']), $dcrpass, $a->user['prvkey']);
                        $mbox = email_connect($mb, $mail_user, $dcrpass);
                        unset($dcrpass);
                        if (!$mbox) {
                            $failed = true;
                            notice(t('Failed to connect with email account using the settings provided.') . EOL);
                        }
                    }
                }
                if (!$failed) {
                    info(t('Email settings updated.') . EOL);
                }
            }
        }
        call_hooks('connector_settings_post', $_POST);
        return;
    }
    if ($a->argc > 1 && $a->argv[1] === 'features') {
        check_form_security_token_redirectOnErr('/settings/features', 'settings_features');
        foreach ($_POST as $k => $v) {
            if (strpos($k, 'feature_') === 0) {
                set_pconfig(local_user(), 'feature', substr($k, 8), intval($v) ? 1 : 0);
            }
        }
        info(t('Features updated') . EOL);
        return;
    }
    if ($a->argc > 1 && $a->argv[1] === 'display') {
        check_form_security_token_redirectOnErr('/settings/display', 'settings_display');
        $theme = x($_POST, 'theme') ? notags(trim($_POST['theme'])) : $a->user['theme'];
        $mobile_theme = x($_POST, 'mobile_theme') ? notags(trim($_POST['mobile_theme'])) : '';
        $nosmile = x($_POST, 'nosmile') ? intval($_POST['nosmile']) : 0;
        $noinfo = x($_POST, 'noinfo') ? intval($_POST['noinfo']) : 0;
        $infinite_scroll = x($_POST, 'infinite_scroll') ? intval($_POST['infinite_scroll']) : 0;
        $no_auto_update = x($_POST, 'no_auto_update') ? intval($_POST['no_auto_update']) : 0;
        $browser_update = x($_POST, 'browser_update') ? intval($_POST['browser_update']) : 0;
        $browser_update = $browser_update * 1000;
        if ($browser_update < 10000) {
            $browser_update = 10000;
        }
        $itemspage_network = x($_POST, 'itemspage_network') ? intval($_POST['itemspage_network']) : 40;
        if ($itemspage_network > 100) {
            $itemspage_network = 100;
        }
        $itemspage_mobile_network = x($_POST, 'itemspage_mobile_network') ? intval($_POST['itemspage_mobile_network']) : 20;
        if ($itemspage_mobile_network > 100) {
            $itemspage_mobile_network = 100;
        }
        if ($mobile_theme !== '') {
            set_pconfig(local_user(), 'system', 'mobile_theme', $mobile_theme);
        }
        set_pconfig(local_user(), 'system', 'update_interval', $browser_update);
        set_pconfig(local_user(), 'system', 'itemspage_network', $itemspage_network);
        set_pconfig(local_user(), 'system', 'itemspage_mobile_network', $itemspage_mobile_network);
        set_pconfig(local_user(), 'system', 'no_smilies', $nosmile);
        set_pconfig(local_user(), 'system', 'ignore_info', $noinfo);
        set_pconfig(local_user(), 'system', 'infinite_scroll', $infinite_scroll);
        set_pconfig(local_user(), 'system', 'no_auto_update', $no_auto_update);
        if ($theme == $a->user['theme']) {
            // call theme_post only if theme has not been changed
            if (($themeconfigfile = get_theme_config_file($theme)) != null) {
                require_once $themeconfigfile;
                theme_post($a);
            }
        }
        $r = q("UPDATE `user` SET `theme` = '%s' WHERE `uid` = %d", dbesc($theme), intval(local_user()));
        call_hooks('display_settings_post', $_POST);
        goaway($a->get_baseurl(true) . '/settings/display');
        return;
        // NOTREACHED
    }
    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, 'password') || x($_POST, 'confirm')) {
        $newpass = $_POST['password'];
        $confirm = $_POST['confirm'];
        $oldpass = hash('whirlpool', $_POST['opassword']);
        $err = false;
        if ($newpass != $confirm) {
            notice(t('Passwords do not match. Password unchanged.') . EOL);
            $err = true;
        }
        if (!x($newpass) || !x($confirm)) {
            notice(t('Empty passwords are not allowed. Password unchanged.') . EOL);
            $err = true;
        }
        //  check if the old password was supplied correctly before
        //  changing it to the new value
        $r = q("SELECT `password` FROM `user`WHERE `uid` = %d LIMIT 1", intval(local_user()));
        if ($oldpass != $r[0]['password']) {
            notice(t('Wrong password.') . EOL);
            $err = true;
        }
        if (!$err) {
            $password = hash('whirlpool', $newpass);
            $r = q("UPDATE `user` SET `password` = '%s' WHERE `uid` = %d", dbesc($password), intval(local_user()));
            if ($r) {
                info(t('Password changed.') . EOL);
            } else {
                notice(t('Password update failed. Please try again.') . EOL);
            }
        }
    }
    $username = x($_POST, 'username') ? notags(trim($_POST['username'])) : '';
    $email = x($_POST, 'email') ? notags(trim($_POST['email'])) : '';
    $timezone = x($_POST, 'timezone') ? notags(trim($_POST['timezone'])) : '';
    $defloc = x($_POST, 'defloc') ? notags(trim($_POST['defloc'])) : '';
    $openid = x($_POST, 'openid_url') ? notags(trim($_POST['openid_url'])) : '';
    $maxreq = x($_POST, 'maxreq') ? intval($_POST['maxreq']) : 0;
    $expire = x($_POST, 'expire') ? intval($_POST['expire']) : 0;
    $def_gid = x($_POST, 'group-selection') ? intval($_POST['group-selection']) : 0;
    $expire_items = x($_POST, 'expire_items') ? intval($_POST['expire_items']) : 0;
    $expire_notes = x($_POST, 'expire_notes') ? intval($_POST['expire_notes']) : 0;
    $expire_starred = x($_POST, 'expire_starred') ? intval($_POST['expire_starred']) : 0;
    $expire_photos = x($_POST, 'expire_photos') ? intval($_POST['expire_photos']) : 0;
    $expire_network_only = x($_POST, 'expire_network_only') ? intval($_POST['expire_network_only']) : 0;
    $allow_location = x($_POST, 'allow_location') && intval($_POST['allow_location']) == 1 ? 1 : 0;
    $publish = x($_POST, 'profile_in_directory') && intval($_POST['profile_in_directory']) == 1 ? 1 : 0;
    $net_publish = x($_POST, 'profile_in_netdirectory') && intval($_POST['profile_in_netdirectory']) == 1 ? 1 : 0;
    $old_visibility = x($_POST, 'visibility') && intval($_POST['visibility']) == 1 ? 1 : 0;
    $page_flags = x($_POST, 'page-flags') && intval($_POST['page-flags']) ? intval($_POST['page-flags']) : 0;
    $blockwall = x($_POST, 'blockwall') && intval($_POST['blockwall']) == 1 ? 0 : 1;
    // this setting is inverted!
    $blocktags = x($_POST, 'blocktags') && intval($_POST['blocktags']) == 1 ? 0 : 1;
    // this setting is inverted!
    $unkmail = x($_POST, 'unkmail') && intval($_POST['unkmail']) == 1 ? 1 : 0;
    $cntunkmail = x($_POST, 'cntunkmail') ? intval($_POST['cntunkmail']) : 0;
    $suggestme = x($_POST, 'suggestme') ? intval($_POST['suggestme']) : 0;
    $hide_friends = $_POST['hide-friends'] == 1 ? 1 : 0;
    $hidewall = $_POST['hidewall'] == 1 ? 1 : 0;
    $post_newfriend = $_POST['post_newfriend'] == 1 ? 1 : 0;
    $post_joingroup = $_POST['post_joingroup'] == 1 ? 1 : 0;
    $post_profilechange = $_POST['post_profilechange'] == 1 ? 1 : 0;
    $email_textonly = $_POST['email_textonly'] == 1 ? 1 : 0;
    $notify = 0;
    if (x($_POST, 'notify1')) {
        $notify += intval($_POST['notify1']);
    }
    if (x($_POST, 'notify2')) {
        $notify += intval($_POST['notify2']);
    }
    if (x($_POST, 'notify3')) {
        $notify += intval($_POST['notify3']);
    }
    if (x($_POST, 'notify4')) {
        $notify += intval($_POST['notify4']);
    }
    if (x($_POST, 'notify5')) {
        $notify += intval($_POST['notify5']);
    }
    if (x($_POST, 'notify6')) {
        $notify += intval($_POST['notify6']);
    }
    if (x($_POST, 'notify7')) {
        $notify += intval($_POST['notify7']);
    }
    if (x($_POST, 'notify8')) {
        $notify += intval($_POST['notify8']);
    }
    $email_changed = false;
    $err = '';
    $name_change = false;
    if ($username != $a->user['username']) {
        $name_change = true;
        if (strlen($username) > 40) {
            $err .= t(' Please use a shorter name.');
        }
        if (strlen($username) < 3) {
            $err .= t(' Name too short.');
        }
    }
    if ($email != $a->user['email']) {
        $email_changed = true;
        //  check for the correct password
        $r = q("SELECT `password` FROM `user`WHERE `uid` = %d LIMIT 1", intval(local_user()));
        $password = hash('whirlpool', $_POST['mpassword']);
        if ($password != $r[0]['password']) {
            $err .= t('Wrong Password') . EOL;
            $email = $a->user['email'];
        }
        //  check the email is valid
        if (!valid_email($email)) {
            $err .= t(' Not valid email.');
        }
        //  ensure new email is not the admin mail
        //if((x($a->config,'admin_email')) && (strcasecmp($email,$a->config['admin_email']) == 0)) {
        if (x($a->config, 'admin_email')) {
            $adminlist = explode(",", str_replace(" ", "", strtolower($a->config['admin_email'])));
            if (in_array(strtolower($email), $adminlist)) {
                $err .= t(' Cannot change to that email.');
                $email = $a->user['email'];
            }
        }
    }
    if (strlen($err)) {
        notice($err . EOL);
        return;
    }
    if ($timezone != $a->user['timezone']) {
        if (strlen($timezone)) {
            date_default_timezone_set($timezone);
        }
    }
    $str_group_allow = perms2str($_POST['group_allow']);
    $str_contact_allow = perms2str($_POST['contact_allow']);
    $str_group_deny = perms2str($_POST['group_deny']);
    $str_contact_deny = perms2str($_POST['contact_deny']);
    $openidserver = $a->user['openidserver'];
    $openid = normalise_openid($openid);
    // If openid has changed or if there's an openid but no openidserver, try and discover it.
    if ($openid != $a->user['openid'] || strlen($openid) && !strlen($openidserver)) {
        $tmp_str = $openid;
        if (strlen($tmp_str) && validate_url($tmp_str)) {
            logger('updating openidserver');
            require_once 'library/openid.php';
            $open_id_obj = new LightOpenID();
            $open_id_obj->identity = $openid;
            $openidserver = $open_id_obj->discover($open_id_obj->identity);
        } else {
            $openidserver = '';
        }
    }
    set_pconfig(local_user(), 'expire', 'items', $expire_items);
    set_pconfig(local_user(), 'expire', 'notes', $expire_notes);
    set_pconfig(local_user(), 'expire', 'starred', $expire_starred);
    set_pconfig(local_user(), 'expire', 'photos', $expire_photos);
    set_pconfig(local_user(), 'expire', 'network_only', $expire_network_only);
    set_pconfig(local_user(), 'system', 'suggestme', $suggestme);
    set_pconfig(local_user(), 'system', 'post_newfriend', $post_newfriend);
    set_pconfig(local_user(), 'system', 'post_joingroup', $post_joingroup);
    set_pconfig(local_user(), 'system', 'post_profilechange', $post_profilechange);
    set_pconfig(local_user(), 'system', 'email_textonly', $email_textonly);
    if ($page_flags == PAGE_PRVGROUP) {
        $hidewall = 1;
        if (!$str_contact_allow && !$str_group_allow && !$str_contact_deny && !$str_group_deny) {
            if ($def_gid) {
                info(t('Private forum has no privacy permissions. Using default privacy group.') . EOL);
                $str_group_allow = '<' . $def_gid . '>';
            } else {
                notice(t('Private forum has no privacy permissions and no default privacy group.') . EOL);
            }
        }
    }
    $r = q("UPDATE `user` SET `username` = '%s', `email` = '%s', `openid` = '%s', `timezone` = '%s',  `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s', `notify-flags` = %d, `page-flags` = %d, `default-location` = '%s', `allow_location` = %d, `maxreq` = %d, `expire` = %d, `openidserver` = '%s', `def_gid` = %d, `blockwall` = %d, `hidewall` = %d, `blocktags` = %d, `unkmail` = %d, `cntunkmail` = %d  WHERE `uid` = %d", dbesc($username), dbesc($email), dbesc($openid), dbesc($timezone), dbesc($str_contact_allow), dbesc($str_group_allow), dbesc($str_contact_deny), dbesc($str_group_deny), intval($notify), intval($page_flags), dbesc($defloc), intval($allow_location), intval($maxreq), intval($expire), dbesc($openidserver), intval($def_gid), intval($blockwall), intval($hidewall), intval($blocktags), intval($unkmail), intval($cntunkmail), intval(local_user()));
    if ($r) {
        info(t('Settings updated.') . EOL);
    }
    $r = q("UPDATE `profile`\n\t\tSET `publish` = %d,\n\t\t`name` = '%s',\n\t\t`net-publish` = %d,\n\t\t`hide-friends` = %d\n\t\tWHERE `is-default` = 1 AND `uid` = %d", intval($publish), dbesc($username), intval($net_publish), intval($hide_friends), intval(local_user()));
    if ($name_change) {
        q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s' WHERE `uid` = %d AND `self` = 1", dbesc($username), dbesc(datetime_convert()), intval(local_user()));
    }
    if ($old_visibility != $net_publish || $page_flags != $old_page_flags) {
        // Update global directory in background
        $url = $_SESSION['my_url'];
        if ($url && strlen(get_config('system', 'directory_submit_url'))) {
            proc_run('php', "include/directory.php", "{$url}");
        }
    }
    require_once 'include/profile_update.php';
    profile_change();
    //$_SESSION['theme'] = $theme;
    if ($email_changed && $a->config['register_policy'] == REGISTER_VERIFY) {
        // FIXME - set to un-verified, blocked and redirect to logout
        // Why? Are we verifying people or email addresses?
    }
    goaway($a->get_baseurl(true) . '/settings');
    return;
    // NOTREACHED
}
Example #2
0
function settings_post(&$a)
{
    if (!local_channel()) {
        return;
    }
    if ($_SESSION['delegate']) {
        return;
    }
    $channel = $a->get_channel();
    logger('mod_settings: ' . print_r($_REQUEST, true));
    if (argc() > 1 && argv(1) === 'oauth' && x($_POST, 'remove')) {
        check_form_security_token_redirectOnErr('/settings/oauth', 'settings_oauth');
        $key = $_POST['remove'];
        q("DELETE FROM tokens WHERE id='%s' AND uid=%d", dbesc($key), local_channel());
        goaway($a->get_baseurl(true) . "/settings/oauth/");
        return;
    }
    if (argc() > 2 && argv(1) === 'oauth' && (argv(2) === 'edit' || argv(2) === 'add') && x($_POST, 'submit')) {
        check_form_security_token_redirectOnErr('/settings/oauth', 'settings_oauth');
        $name = x($_POST, 'name') ? $_POST['name'] : '';
        $key = x($_POST, 'key') ? $_POST['key'] : '';
        $secret = x($_POST, 'secret') ? $_POST['secret'] : '';
        $redirect = x($_POST, 'redirect') ? $_POST['redirect'] : '';
        $icon = x($_POST, 'icon') ? $_POST['icon'] : '';
        $ok = true;
        if ($name == '') {
            $ok = false;
            notice(t('Name is required') . EOL);
        }
        if ($key == '' || $secret == '') {
            $ok = false;
            notice(t('Key and Secret are required') . EOL);
        }
        if ($ok) {
            if ($_POST['submit'] == t("Update")) {
                $r = q("UPDATE clients SET\n\t\t\t\t\t\t\tclient_id='%s',\n\t\t\t\t\t\t\tpw='%s',\n\t\t\t\t\t\t\tname='%s',\n\t\t\t\t\t\t\tredirect_uri='%s',\n\t\t\t\t\t\t\ticon='%s',\n\t\t\t\t\t\t\tuid=%d\n\t\t\t\t\t\tWHERE client_id='%s'", dbesc($key), dbesc($secret), dbesc($name), dbesc($redirect), dbesc($icon), intval(local_channel()), dbesc($key));
            } else {
                $r = q("INSERT INTO clients (client_id, pw, name, redirect_uri, icon, uid)\n\t\t\t\t\tVALUES ('%s','%s','%s','%s','%s',%d)", dbesc($key), dbesc($secret), dbesc($name), dbesc($redirect), dbesc($icon), intval(local_channel()));
                $r = q("INSERT INTO xperm (xp_client, xp_channel, xp_perm) VALUES ('%s', %d, '%s') ", dbesc($key), intval(local_channel()), dbesc('all'));
            }
        }
        goaway($a->get_baseurl(true) . "/settings/oauth/");
        return;
    }
    if (argc() > 1 && argv(1) == 'featured') {
        check_form_security_token_redirectOnErr('/settings/featured', 'settings_featured');
        call_hooks('feature_settings_post', $_POST);
        build_sync_packet();
        return;
    }
    if (argc() > 1 && argv(1) === 'features') {
        check_form_security_token_redirectOnErr('/settings/features', 'settings_features');
        // Build list of features and check which are set
        $features = get_features();
        $all_features = array();
        foreach ($features as $k => $v) {
            foreach ($v as $f) {
                $all_features[] = $f[0];
            }
        }
        foreach ($all_features as $k) {
            if (x($_POST, "feature_{$k}")) {
                set_pconfig(local_channel(), 'feature', $k, 1);
            } else {
                set_pconfig(local_channel(), 'feature', $k, 0);
            }
        }
        build_sync_packet();
        return;
    }
    if (argc() > 1 && argv(1) == 'display') {
        check_form_security_token_redirectOnErr('/settings/display', 'settings_display');
        $theme = x($_POST, 'theme') ? notags(trim($_POST['theme'])) : $a->channel['channel_theme'];
        $mobile_theme = x($_POST, 'mobile_theme') ? notags(trim($_POST['mobile_theme'])) : '';
        $user_scalable = x($_POST, 'user_scalable') ? intval($_POST['user_scalable']) : 0;
        $nosmile = x($_POST, 'nosmile') ? intval($_POST['nosmile']) : 0;
        $title_tosource = x($_POST, 'title_tosource') ? intval($_POST['title_tosource']) : 0;
        $channel_list_mode = x($_POST, 'channel_list_mode') ? intval($_POST['channel_list_mode']) : 0;
        $network_list_mode = x($_POST, 'network_list_mode') ? intval($_POST['network_list_mode']) : 0;
        $channel_divmore_height = x($_POST, 'channel_divmore_height') ? intval($_POST['channel_divmore_height']) : 400;
        if ($channel_divmore_height < 50) {
            $channel_divmore_height = 50;
        }
        $network_divmore_height = x($_POST, 'network_divmore_height') ? intval($_POST['network_divmore_height']) : 400;
        if ($network_divmore_height < 50) {
            $network_divmore_height = 50;
        }
        $browser_update = x($_POST, 'browser_update') ? intval($_POST['browser_update']) : 0;
        $browser_update = $browser_update * 1000;
        if ($browser_update < 10000) {
            $browser_update = 10000;
        }
        $itemspage = x($_POST, 'itemspage') ? intval($_POST['itemspage']) : 20;
        if ($itemspage > 100) {
            $itemspage = 100;
        }
        if ($mobile_theme == "---") {
            del_pconfig(local_channel(), 'system', 'mobile_theme');
        } else {
            set_pconfig(local_channel(), 'system', 'mobile_theme', $mobile_theme);
        }
        set_pconfig(local_channel(), 'system', 'user_scalable', $user_scalable);
        set_pconfig(local_channel(), 'system', 'update_interval', $browser_update);
        set_pconfig(local_channel(), 'system', 'itemspage', $itemspage);
        set_pconfig(local_channel(), 'system', 'no_smilies', 1 - intval($nosmile));
        set_pconfig(local_channel(), 'system', 'title_tosource', $title_tosource);
        set_pconfig(local_channel(), 'system', 'channel_list_mode', $channel_list_mode);
        set_pconfig(local_channel(), 'system', 'network_list_mode', $network_list_mode);
        set_pconfig(local_channel(), 'system', 'channel_divmore_height', $channel_divmore_height);
        set_pconfig(local_channel(), 'system', 'network_divmore_height', $network_divmore_height);
        if ($theme == $a->channel['channel_theme']) {
            // call theme_post only if theme has not been changed
            if (($themeconfigfile = get_theme_config_file($theme)) != null) {
                require_once $themeconfigfile;
                theme_post($a);
            }
        }
        $r = q("UPDATE channel SET channel_theme = '%s' WHERE channel_id = %d", dbesc($theme), intval(local_channel()));
        call_hooks('display_settings_post', $_POST);
        build_sync_packet();
        goaway($a->get_baseurl(true) . '/settings/display');
        return;
        // NOTREACHED
    }
    if (argc() > 1 && argv(1) === 'account') {
        check_form_security_token_redirectOnErr('/settings/account', 'settings_account');
        call_hooks('account_settings_post', $_POST);
        //		call_hooks('settings_account', $_POST);
        $errs = array();
        if (x($_POST, 'npassword') || x($_POST, 'confirm')) {
            $newpass = $_POST['npassword'];
            $confirm = $_POST['confirm'];
            if ($newpass != $confirm) {
                $errs[] = t('Passwords do not match. Password unchanged.');
            }
            if (!x($newpass) || !x($confirm)) {
                $errs[] = t('Empty passwords are not allowed. Password unchanged.');
            }
            if (!$errs) {
                $salt = random_string(32);
                $password_encoded = hash('whirlpool', $salt . $newpass);
                $r = q("update account set account_salt = '%s', account_password = '******', account_password_changed = '%s' \n\t\t\t\t\twhere account_id = %d", dbesc($salt), dbesc($password_encoded), dbesc(datetime_convert()), intval(get_account_id()));
                if ($r) {
                    info(t('Password changed.') . EOL);
                } else {
                    $errs[] = t('Password update failed. Please try again.');
                }
            }
        }
        if ($errs) {
            foreach ($errs as $err) {
                notice($err . EOL);
            }
            $errs = array();
        }
        $email = x($_POST, 'email') ? trim(notags($_POST['email'])) : '';
        $account = $a->get_account();
        if ($email != $account['account_email']) {
            if (!valid_email($email)) {
                $errs[] = t('Not valid email.');
            }
            $adm = trim(get_config('system', 'admin_email'));
            if ($adm && strcasecmp($email, $adm) == 0) {
                $errs[] = t('Protected email address. Cannot change to that email.');
                $email = $a->user['email'];
            }
            if (!$errs) {
                $r = q("update account set account_email = '%s' where account_id = %d", dbesc($email), intval($account['account_id']));
                if (!$r) {
                    $errs[] = t('System failure storing new email. Please try again.');
                }
            }
        }
        if ($errs) {
            foreach ($errs as $err) {
                notice($err . EOL);
            }
        }
        goaway($a->get_baseurl(true) . '/settings/account');
    }
    check_form_security_token_redirectOnErr('/settings', 'settings');
    call_hooks('settings_post', $_POST);
    $set_perms = '';
    $role = x($_POST, 'permissions_role') ? notags(trim($_POST['permissions_role'])) : '';
    $oldrole = get_pconfig(local_channel(), 'system', 'permissions_role');
    if ($role != $oldrole || $role === 'custom') {
        if ($role === 'custom') {
            $hide_presence = x($_POST, 'hide_presence') && intval($_POST['hide_presence']) == 1 ? 1 : 0;
            $publish = x($_POST, 'profile_in_directory') && intval($_POST['profile_in_directory']) == 1 ? 1 : 0;
            $def_group = x($_POST, 'group-selection') ? notags(trim($_POST['group-selection'])) : '';
            $r = q("update channel set channel_default_group = '%s' where channel_id = %d", dbesc($def_group), intval(local_channel()));
            $global_perms = get_perms();
            foreach ($global_perms as $k => $v) {
                $set_perms .= ', ' . $v[0] . ' = ' . intval($_POST[$k]) . ' ';
            }
            $acl = new AccessList($channel);
            $acl->set_from_array($_POST);
            $x = $acl->get();
            $r = q("update channel set channel_allow_cid = '%s', channel_allow_gid = '%s', \n\t\t\t\tchannel_deny_cid = '%s', channel_deny_gid = '%s' where channel_id = %d", dbesc($x['allow_cid']), dbesc($x['allow_gid']), dbesc($x['deny_cid']), dbesc($x['deny_gid']), intval(local_channel()));
        } else {
            $role_permissions = get_role_perms($_POST['permissions_role']);
            if (!$role_permissions) {
                notice('Permissions category could not be found.');
                return;
            }
            $hide_presence = 1 - intval($role_permissions['online']);
            if ($role_permissions['default_collection']) {
                $r = q("select hash from groups where uid = %d and name = '%s' limit 1", intval(local_channel()), dbesc(t('Friends')));
                if (!$r) {
                    require_once 'include/group.php';
                    group_add(local_channel(), t('Friends'));
                    group_add_member(local_channel(), t('Friends'), $channel['channel_hash']);
                    $r = q("select hash from groups where uid = %d and name = '%s' limit 1", intval(local_channel()), dbesc(t('Friends')));
                }
                if ($r) {
                    q("update channel set channel_default_group = '%s', channel_allow_gid = '%s', channel_allow_cid = '', channel_deny_gid = '', channel_deny_cid = '' where channel_id = %d", dbesc($r[0]['hash']), dbesc('<' . $r[0]['hash'] . '>'), intval(local_channel()));
                } else {
                    notice(sprintf('Default privacy group \'%s\' not found. Please create and re-submit permission change.', t('Friends')) . EOL);
                    return;
                }
            } else {
                q("update channel set channel_default_group = '', channel_allow_gid = '', channel_allow_cid = '', channel_deny_gid = '', \n\t\t\t\t\tchannel_deny_cid = '' where channel_id = %d", intval(local_channel()));
            }
            $r = q("update abook set abook_my_perms  = %d where abook_channel = %d and abook_self = 1", intval(array_key_exists('perms_accept', $role_permissions) ? $role_permissions['perms_accept'] : 0), intval(local_channel()));
            set_pconfig(local_channel(), 'system', 'autoperms', $role_permissions['perms_auto'] ? intval($role_permissions['perms_accept']) : 0);
            foreach ($role_permissions as $p => $v) {
                if (strpos($p, 'channel_') !== false) {
                    $set_perms .= ', ' . $p . ' = ' . intval($v) . ' ';
                }
                if ($p === 'directory_publish') {
                    $publish = intval($v);
                }
            }
        }
        set_pconfig(local_channel(), 'system', 'hide_online_status', $hide_presence);
        set_pconfig(local_channel(), 'system', 'permissions_role', $role);
    }
    $username = x($_POST, 'username') ? notags(trim($_POST['username'])) : '';
    $timezone = x($_POST, 'timezone_select') ? notags(trim($_POST['timezone_select'])) : '';
    $defloc = x($_POST, 'defloc') ? notags(trim($_POST['defloc'])) : '';
    $openid = x($_POST, 'openid_url') ? notags(trim($_POST['openid_url'])) : '';
    $maxreq = x($_POST, 'maxreq') ? intval($_POST['maxreq']) : 0;
    $expire = x($_POST, 'expire') ? intval($_POST['expire']) : 0;
    $evdays = x($_POST, 'evdays') ? intval($_POST['evdays']) : 3;
    $photo_path = x($_POST, 'photo_path') ? escape_tags(trim($_POST['photo_path'])) : '';
    $attach_path = x($_POST, 'attach_path') ? escape_tags(trim($_POST['attach_path'])) : '';
    $channel_menu = x($_POST['channel_menu']) ? htmlspecialchars_decode(trim($_POST['channel_menu']), ENT_QUOTES) : '';
    $expire_items = x($_POST, 'expire_items') ? intval($_POST['expire_items']) : 0;
    $expire_starred = x($_POST, 'expire_starred') ? intval($_POST['expire_starred']) : 0;
    $expire_photos = x($_POST, 'expire_photos') ? intval($_POST['expire_photos']) : 0;
    $expire_network_only = x($_POST, 'expire_network_only') ? intval($_POST['expire_network_only']) : 0;
    $allow_location = x($_POST, 'allow_location') && intval($_POST['allow_location']) == 1 ? 1 : 0;
    $blocktags = x($_POST, 'blocktags') && intval($_POST['blocktags']) == 1 ? 0 : 1;
    // this setting is inverted!
    $unkmail = x($_POST, 'unkmail') && intval($_POST['unkmail']) == 1 ? 1 : 0;
    $cntunkmail = x($_POST, 'cntunkmail') ? intval($_POST['cntunkmail']) : 0;
    $suggestme = x($_POST, 'suggestme') ? intval($_POST['suggestme']) : 0;
    $post_newfriend = $_POST['post_newfriend'] == 1 ? 1 : 0;
    $post_joingroup = $_POST['post_joingroup'] == 1 ? 1 : 0;
    $post_profilechange = $_POST['post_profilechange'] == 1 ? 1 : 0;
    $adult = $_POST['adult'] == 1 ? 1 : 0;
    $cal_first_day = x($_POST, 'first_day') && intval($_POST['first_day']) == 1 ? 1 : 0;
    $channel = $a->get_channel();
    $pageflags = $channel['channel_pageflags'];
    $existing_adult = $pageflags & PAGE_ADULT ? 1 : 0;
    if ($adult != $existing_adult) {
        $pageflags = $pageflags ^ PAGE_ADULT;
    }
    $notify = 0;
    if (x($_POST, 'notify1')) {
        $notify += intval($_POST['notify1']);
    }
    if (x($_POST, 'notify2')) {
        $notify += intval($_POST['notify2']);
    }
    if (x($_POST, 'notify3')) {
        $notify += intval($_POST['notify3']);
    }
    if (x($_POST, 'notify4')) {
        $notify += intval($_POST['notify4']);
    }
    if (x($_POST, 'notify5')) {
        $notify += intval($_POST['notify5']);
    }
    if (x($_POST, 'notify6')) {
        $notify += intval($_POST['notify6']);
    }
    if (x($_POST, 'notify7')) {
        $notify += intval($_POST['notify7']);
    }
    if (x($_POST, 'notify8')) {
        $notify += intval($_POST['notify8']);
    }
    $vnotify = 0;
    if (x($_POST, 'vnotify1')) {
        $vnotify += intval($_POST['vnotify1']);
    }
    if (x($_POST, 'vnotify2')) {
        $vnotify += intval($_POST['vnotify2']);
    }
    if (x($_POST, 'vnotify3')) {
        $vnotify += intval($_POST['vnotify3']);
    }
    if (x($_POST, 'vnotify4')) {
        $vnotify += intval($_POST['vnotify4']);
    }
    if (x($_POST, 'vnotify5')) {
        $vnotify += intval($_POST['vnotify5']);
    }
    if (x($_POST, 'vnotify6')) {
        $vnotify += intval($_POST['vnotify6']);
    }
    if (x($_POST, 'vnotify7')) {
        $vnotify += intval($_POST['vnotify7']);
    }
    if (x($_POST, 'vnotify8')) {
        $vnotify += intval($_POST['vnotify8']);
    }
    if (x($_POST, 'vnotify9')) {
        $vnotify += intval($_POST['vnotify9']);
    }
    if (x($_POST, 'vnotify10')) {
        $vnotify += intval($_POST['vnotify10']);
    }
    if (x($_POST, 'vnotify11')) {
        $vnotify += intval($_POST['vnotify11']);
    }
    $always_show_in_notices = x($_POST, 'always_show_in_notices') ? 1 : 0;
    $channel = $a->get_channel();
    $err = '';
    $name_change = false;
    if ($username != $channel['channel_name']) {
        $name_change = true;
        require_once 'include/identity.php';
        $err = validate_channelname($username);
        if ($err) {
            notice($err);
            return;
        }
    }
    if ($timezone != $channel['channel_timezone']) {
        if (strlen($timezone)) {
            date_default_timezone_set($timezone);
        }
    }
    set_pconfig(local_channel(), 'system', 'use_browser_location', $allow_location);
    set_pconfig(local_channel(), 'system', 'suggestme', $suggestme);
    set_pconfig(local_channel(), 'system', 'post_newfriend', $post_newfriend);
    set_pconfig(local_channel(), 'system', 'post_joingroup', $post_joingroup);
    set_pconfig(local_channel(), 'system', 'post_profilechange', $post_profilechange);
    set_pconfig(local_channel(), 'system', 'blocktags', $blocktags);
    set_pconfig(local_channel(), 'system', 'channel_menu', $channel_menu);
    set_pconfig(local_channel(), 'system', 'vnotify', $vnotify);
    set_pconfig(local_channel(), 'system', 'always_show_in_notices', $always_show_in_notices);
    set_pconfig(local_channel(), 'system', 'evdays', $evdays);
    set_pconfig(local_channel(), 'system', 'photo_path', $photo_path);
    set_pconfig(local_channel(), 'system', 'attach_path', $attach_path);
    set_pconfig(local_channel(), 'system', 'cal_first_day', $cal_first_day);
    $r = q("update channel set channel_name = '%s', channel_pageflags = %d, channel_timezone = '%s', channel_location = '%s', channel_notifyflags = %d, channel_max_anon_mail = %d, channel_max_friend_req = %d, channel_expire_days = %d {$set_perms} where channel_id = %d", dbesc($username), intval($pageflags), dbesc($timezone), dbesc($defloc), intval($notify), intval($unkmail), intval($maxreq), intval($expire), intval(local_channel()));
    if ($r) {
        info(t('Settings updated.') . EOL);
    }
    if (!is_null($publish)) {
        $r = q("UPDATE profile SET publish = %d WHERE is_default = 1 AND uid = %d", intval($publish), intval(local_channel()));
    }
    if ($name_change) {
        $r = q("update xchan set xchan_name = '%s', xchan_name_date = '%s' where xchan_hash = '%s'", dbesc($username), dbesc(datetime_convert()), dbesc($channel['channel_hash']));
        $r = q("update profile set name = '%s' where uid = %d and is_default = 1", dbesc($username), intval($channel['channel_id']));
    }
    proc_run('php', 'include/directory.php', local_channel());
    build_sync_packet();
    //$_SESSION['theme'] = $theme;
    if ($email_changed && $a->config['system']['register_policy'] == REGISTER_VERIFY) {
        // FIXME - set to un-verified, blocked and redirect to logout
        // Why? Are we verifying people or email addresses?
    }
    goaway($a->get_baseurl(true) . '/settings');
    return;
    // NOTREACHED
}
Example #3
0
function settings_post(&$a)
{
    if (!local_user()) {
        return;
    }
    // logger('mod_settings: ' . print_r($_REQUEST,true));
    if (x($_SESSION, 'submanage') && intval($_SESSION['submanage'])) {
        return;
    }
    if (argc() > 1 && argv(1) === 'oauth' && x($_POST, 'remove')) {
        check_form_security_token_redirectOnErr('/settings/oauth', 'settings_oauth');
        $key = $_POST['remove'];
        q("DELETE FROM tokens WHERE id='%s' AND uid=%d", dbesc($key), local_user());
        goaway($a->get_baseurl(true) . "/settings/oauth/");
        return;
    }
    if (argc() > 2 && argv(1) === 'oauth' && (argv(2) === 'edit' || argv(2) === 'add') && x($_POST, 'submit')) {
        check_form_security_token_redirectOnErr('/settings/oauth', 'settings_oauth');
        $name = x($_POST, 'name') ? $_POST['name'] : '';
        $key = x($_POST, 'key') ? $_POST['key'] : '';
        $secret = x($_POST, 'secret') ? $_POST['secret'] : '';
        $redirect = x($_POST, 'redirect') ? $_POST['redirect'] : '';
        $icon = x($_POST, 'icon') ? $_POST['icon'] : '';
        $ok = true;
        if ($name == '') {
            $ok = false;
            notice(t('Name is required') . EOL);
        }
        if ($key == '' || $secret == '') {
            $ok = false;
            notice(t('Key and Secret are required') . EOL);
        }
        if ($ok) {
            if ($_POST['submit'] == t("Update")) {
                $r = q("UPDATE clients SET\n\t\t\t\t\t\t\tclient_id='%s',\n\t\t\t\t\t\t\tpw='%s',\n\t\t\t\t\t\t\tname='%s',\n\t\t\t\t\t\t\tredirect_uri='%s',\n\t\t\t\t\t\t\ticon='%s',\n\t\t\t\t\t\t\tuid=%d\n\t\t\t\t\t\tWHERE client_id='%s'", dbesc($key), dbesc($secret), dbesc($name), dbesc($redirect), dbesc($icon), local_user(), dbesc($key));
            } else {
                $r = q("INSERT INTO clients\n\t\t\t\t\t\t\t(client_id, pw, name, redirect_uri, icon, uid)\n\t\t\t\t\t\tVALUES ('%s','%s','%s','%s','%s',%d)", dbesc($key), dbesc($secret), dbesc($name), dbesc($redirect), dbesc($icon), local_user());
            }
        }
        goaway($a->get_baseurl(true) . "/settings/oauth/");
        return;
    }
    if (argc() > 1 && argv(1) == 'featured') {
        check_form_security_token_redirectOnErr('/settings/featured', 'settings_featured');
        call_hooks('feature_settings_post', $_POST);
        build_sync_packet();
        return;
    }
    if (argc() > 1 && argv(1) === 'features') {
        check_form_security_token_redirectOnErr('/settings/features', 'settings_features');
        foreach ($_POST as $k => $v) {
            if (strpos($k, 'feature_') === 0) {
                set_pconfig(local_user(), 'feature', substr($k, 8), intval($v) ? 1 : 0);
            }
        }
        build_sync_packet();
        return;
    }
    if (argc() > 1 && argv(1) == 'display') {
        check_form_security_token_redirectOnErr('/settings/display', 'settings_display');
        $theme = x($_POST, 'theme') ? notags(trim($_POST['theme'])) : $a->channel['channel_theme'];
        $mobile_theme = x($_POST, 'mobile_theme') ? notags(trim($_POST['mobile_theme'])) : '';
        $user_scalable = x($_POST, 'user_scalable') ? intval($_POST['user_scalable']) : 0;
        $nosmile = x($_POST, 'nosmile') ? intval($_POST['nosmile']) : 0;
        $browser_update = x($_POST, 'browser_update') ? intval($_POST['browser_update']) : 0;
        $browser_update = $browser_update * 1000;
        if ($browser_update < 10000) {
            $browser_update = 10000;
        }
        $itemspage = x($_POST, 'itemspage') ? intval($_POST['itemspage']) : 20;
        if ($itemspage > 100) {
            $itemspage = 100;
        }
        if ($mobile_theme !== '') {
            set_pconfig(local_user(), 'system', 'mobile_theme', $mobile_theme);
        }
        //		$chanview_full = ((x($_POST,'chanview_full')) ? intval($_POST['chanview_full']) : 0);
        set_pconfig(local_user(), 'system', 'user_scalable', $user_scalable);
        set_pconfig(local_user(), 'system', 'update_interval', $browser_update);
        set_pconfig(local_user(), 'system', 'itemspage', $itemspage);
        set_pconfig(local_user(), 'system', 'no_smilies', $nosmile);
        //		set_pconfig(local_user(),'system','chanview_full',$chanview_full);
        if ($theme == $a->channel['channel_theme']) {
            // call theme_post only if theme has not been changed
            if (($themeconfigfile = get_theme_config_file($theme)) != null) {
                require_once $themeconfigfile;
                theme_post($a);
            }
        }
        $r = q("UPDATE channel SET channel_theme = '%s' WHERE channel_id = %d LIMIT 1", dbesc($theme), intval(local_user()));
        call_hooks('display_settings_post', $_POST);
        build_sync_packet();
        goaway($a->get_baseurl(true) . '/settings/display');
        return;
        // NOTREACHED
    }
    if (argc() > 1 && argv(1) === 'account') {
        check_form_security_token_redirectOnErr('/settings/account', 'settings_account');
        call_hooks('settings_account', $_POST);
        $errs = array();
        if (x($_POST, 'npassword') || x($_POST, 'confirm')) {
            $newpass = $_POST['npassword'];
            $confirm = $_POST['confirm'];
            if ($newpass != $confirm) {
                $errs[] = t('Passwords do not match. Password unchanged.');
            }
            if (!x($newpass) || !x($confirm)) {
                $errs[] = t('Empty passwords are not allowed. Password unchanged.');
            }
            if (!$errs) {
                $salt = random_string(32);
                $password_encoded = hash('whirlpool', $salt . $newpass);
                $r = q("update account set account_salt = '%s', account_password = '******', account_password_changed = '%s' \n\t\t\t\t\twhere account_id = %d limit 1", dbesc($salt), dbesc($password_encoded), dbesc(datetime_convert()), intval(get_account_id()));
                if ($r) {
                    info(t('Password changed.') . EOL);
                } else {
                    $errs[] = t('Password update failed. Please try again.');
                }
            }
        }
        if ($errs) {
            foreach ($errs as $err) {
                notice($err . EOL);
            }
            $errs = array();
        }
        $email = x($_POST, 'email') ? trim(notags($_POST['email'])) : '';
        $account = $a->get_account();
        if ($email != $account['account_email']) {
            if (!valid_email($email)) {
                $errs[] = t('Not valid email.');
            }
            $adm = trim(get_config('system', 'admin_email'));
            if ($adm && strcasecmp($email, $adm) == 0) {
                $errs[] = t('Protected email address. Cannot change to that email.');
                $email = $a->user['email'];
            }
            if (!$errs) {
                $r = q("update account set account_email = '%s' where account_id = %d limit 1", dbesc($email), intval($account['account_id']));
                if (!$r) {
                    $errs[] = t('System failure storing new email. Please try again.');
                }
            }
        }
        if ($errs) {
            foreach ($errs as $err) {
                notice($err . EOL);
            }
        }
        goaway($a->get_baseurl(true) . '/settings/account');
    }
    check_form_security_token_redirectOnErr('/settings', 'settings');
    call_hooks('settings_post', $_POST);
    $username = x($_POST, 'username') ? notags(trim($_POST['username'])) : '';
    $timezone = x($_POST, 'timezone') ? notags(trim($_POST['timezone'])) : '';
    $defloc = x($_POST, 'defloc') ? notags(trim($_POST['defloc'])) : '';
    $openid = x($_POST, 'openid_url') ? notags(trim($_POST['openid_url'])) : '';
    $maxreq = x($_POST, 'maxreq') ? intval($_POST['maxreq']) : 0;
    $expire = x($_POST, 'expire') ? intval($_POST['expire']) : 0;
    $def_group = x($_POST, 'group-selection') ? notags(trim($_POST['group-selection'])) : '';
    $channel_menu = x($_POST['channel_menu']) ? htmlspecialchars_decode(trim($_POST['channel_menu']), ENT_QUOTES) : '';
    $expire_items = x($_POST, 'expire_items') ? intval($_POST['expire_items']) : 0;
    $expire_starred = x($_POST, 'expire_starred') ? intval($_POST['expire_starred']) : 0;
    $expire_photos = x($_POST, 'expire_photos') ? intval($_POST['expire_photos']) : 0;
    $expire_network_only = x($_POST, 'expire_network_only') ? intval($_POST['expire_network_only']) : 0;
    $allow_location = x($_POST, 'allow_location') && intval($_POST['allow_location']) == 1 ? 1 : 0;
    $hide_presence = x($_POST, 'hide_presence') && intval($_POST['hide_presence']) == 1 ? 1 : 0;
    $publish = x($_POST, 'profile_in_directory') && intval($_POST['profile_in_directory']) == 1 ? 1 : 0;
    $page_flags = x($_POST, 'page-flags') && intval($_POST['page-flags']) ? intval($_POST['page-flags']) : 0;
    $blockwall = x($_POST, 'blockwall') && intval($_POST['blockwall']) == 1 ? 0 : 1;
    // this setting is inverted!
    $blocktags = x($_POST, 'blocktags') && intval($_POST['blocktags']) == 1 ? 0 : 1;
    // this setting is inverted!
    $unkmail = x($_POST, 'unkmail') && intval($_POST['unkmail']) == 1 ? 1 : 0;
    $cntunkmail = x($_POST, 'cntunkmail') ? intval($_POST['cntunkmail']) : 0;
    $suggestme = x($_POST, 'suggestme') ? intval($_POST['suggestme']) : 0;
    $hide_friends = $_POST['hide_friends'] == 1 ? 1 : 0;
    $hidewall = $_POST['hidewall'] == 1 ? 1 : 0;
    $post_newfriend = $_POST['post_newfriend'] == 1 ? 1 : 0;
    $post_joingroup = $_POST['post_joingroup'] == 1 ? 1 : 0;
    $post_profilechange = $_POST['post_profilechange'] == 1 ? 1 : 0;
    $adult = $_POST['adult'] == 1 ? 1 : 0;
    $channel = $a->get_channel();
    $pageflags = $channel['channel_pageflags'];
    $existing_adult = $pageflags & PAGE_ADULT ? 1 : 0;
    if ($adult != $existing_adult) {
        $pageflags = $pageflags ^ PAGE_ADULT;
    }
    $arr = array();
    $arr['channel_r_stream'] = $_POST['view_stream'] ? $_POST['view_stream'] : 0;
    $arr['channel_r_profile'] = $_POST['view_profile'] ? $_POST['view_profile'] : 0;
    $arr['channel_r_photos'] = $_POST['view_photos'] ? $_POST['view_photos'] : 0;
    $arr['channel_r_abook'] = $_POST['view_contacts'] ? $_POST['view_contacts'] : 0;
    $arr['channel_w_stream'] = $_POST['send_stream'] ? $_POST['send_stream'] : 0;
    $arr['channel_w_wall'] = $_POST['post_wall'] ? $_POST['post_wall'] : 0;
    $arr['channel_w_tagwall'] = $_POST['tag_deliver'] ? $_POST['tag_deliver'] : 0;
    $arr['channel_w_comment'] = $_POST['post_comments'] ? $_POST['post_comments'] : 0;
    $arr['channel_w_mail'] = $_POST['post_mail'] ? $_POST['post_mail'] : 0;
    $arr['channel_w_photos'] = $_POST['post_photos'] ? $_POST['post_photos'] : 0;
    $arr['channel_w_chat'] = $_POST['chat'] ? $_POST['chat'] : 0;
    $arr['channel_a_delegate'] = $_POST['delegate'] ? $_POST['delegate'] : 0;
    $arr['channel_r_storage'] = $_POST['view_storage'] ? $_POST['view_storage'] : 0;
    $arr['channel_w_storage'] = $_POST['write_storage'] ? $_POST['write_storage'] : 0;
    $arr['channel_r_pages'] = $_POST['view_pages'] ? $_POST['view_pages'] : 0;
    $arr['channel_w_pages'] = $_POST['write_pages'] ? $_POST['write_pages'] : 0;
    $arr['channel_a_republish'] = $_POST['republish'] ? $_POST['republish'] : 0;
    $arr['channel_w_like'] = $_POST['post_like'] ? $_POST['post_like'] : 0;
    $defperms = 0;
    if (x($_POST['def_view_stream'])) {
        $defperms += $_POST['def_view_stream'];
    }
    if (x($_POST['def_view_profile'])) {
        $defperms += $_POST['def_view_profile'];
    }
    if (x($_POST['def_view_photos'])) {
        $defperms += $_POST['def_view_photos'];
    }
    if (x($_POST['def_view_contacts'])) {
        $defperms += $_POST['def_view_contacts'];
    }
    if (x($_POST['def_send_stream'])) {
        $defperms += $_POST['def_send_stream'];
    }
    if (x($_POST['def_post_wall'])) {
        $defperms += $_POST['def_post_wall'];
    }
    if (x($_POST['def_tag_deliver'])) {
        $defperms += $_POST['def_tag_deliver'];
    }
    if (x($_POST['def_post_comments'])) {
        $defperms += $_POST['def_post_comments'];
    }
    if (x($_POST['def_post_mail'])) {
        $defperms += $_POST['def_post_mail'];
    }
    if (x($_POST['def_post_photos'])) {
        $defperms += $_POST['def_post_photos'];
    }
    if (x($_POST['def_chat'])) {
        $defperms += $_POST['def_chat'];
    }
    if (x($_POST['def_delegate'])) {
        $defperms += $_POST['def_delegate'];
    }
    if (x($_POST['def_view_storage'])) {
        $defperms += $_POST['def_view_storage'];
    }
    if (x($_POST['def_write_storage'])) {
        $defperms += $_POST['def_write_storage'];
    }
    if (x($_POST['def_view_pages'])) {
        $defperms += $_POST['def_view_pages'];
    }
    if (x($_POST['def_write_pages'])) {
        $defperms += $_POST['def_write_pages'];
    }
    if (x($_POST['def_republish'])) {
        $defperms += $_POST['def_republish'];
    }
    if (x($_POST['def_post_like'])) {
        $defperms += $_POST['def_post_like'];
    }
    $notify = 0;
    if (x($_POST, 'notify1')) {
        $notify += intval($_POST['notify1']);
    }
    if (x($_POST, 'notify2')) {
        $notify += intval($_POST['notify2']);
    }
    if (x($_POST, 'notify3')) {
        $notify += intval($_POST['notify3']);
    }
    if (x($_POST, 'notify4')) {
        $notify += intval($_POST['notify4']);
    }
    if (x($_POST, 'notify5')) {
        $notify += intval($_POST['notify5']);
    }
    if (x($_POST, 'notify6')) {
        $notify += intval($_POST['notify6']);
    }
    if (x($_POST, 'notify7')) {
        $notify += intval($_POST['notify7']);
    }
    if (x($_POST, 'notify8')) {
        $notify += intval($_POST['notify8']);
    }
    $channel = $a->get_channel();
    $err = '';
    $name_change = false;
    if ($username != $channel['channel_name']) {
        $name_change = true;
        require_once 'include/identity.php';
        $err = validate_channelname($username);
        if ($err) {
            notice($err);
            return;
        }
    }
    if ($timezone != $channel['channel_timezone']) {
        if (strlen($timezone)) {
            date_default_timezone_set($timezone);
        }
    }
    $str_group_allow = perms2str($_POST['group_allow']);
    $str_contact_allow = perms2str($_POST['contact_allow']);
    $str_group_deny = perms2str($_POST['group_deny']);
    $str_contact_deny = perms2str($_POST['contact_deny']);
    set_pconfig(local_user(), 'system', 'use_browser_location', $allow_location);
    set_pconfig(local_user(), 'system', 'suggestme', $suggestme);
    set_pconfig(local_user(), 'system', 'post_newfriend', $post_newfriend);
    set_pconfig(local_user(), 'system', 'post_joingroup', $post_joingroup);
    set_pconfig(local_user(), 'system', 'post_profilechange', $post_profilechange);
    set_pconfig(local_user(), 'system', 'blocktags', $blocktags);
    set_pconfig(local_user(), 'system', 'hide_online_status', $hide_presence);
    set_pconfig(local_user(), 'system', 'channel_menu', $channel_menu);
    $r = q("update channel set channel_name = '%s', channel_pageflags = %d, channel_timezone = '%s', channel_location = '%s', channel_notifyflags = %d, channel_max_anon_mail = %d, channel_max_friend_req = %d, channel_expire_days = %d, channel_default_group = '%s', channel_r_stream = %d, channel_r_profile = %d, channel_r_photos = %d, channel_r_abook = %d, channel_w_stream = %d, channel_w_wall = %d, channel_w_tagwall = %d, channel_w_comment = %d, channel_w_mail = %d, channel_w_photos = %d, channel_w_chat = %d, channel_a_delegate = %d, channel_r_storage = %d, channel_w_storage = %d, channel_r_pages = %d, channel_w_pages = %d, channel_a_republish = %d, channel_w_like = %d, channel_allow_cid = '%s', channel_allow_gid = '%s', channel_deny_cid = '%s', channel_deny_gid = '%s'  where channel_id = %d limit 1", dbesc($username), intval($pageflags), dbesc($timezone), dbesc($defloc), intval($notify), intval($unkmail), intval($maxreq), intval($expire), dbesc($def_group), intval($arr['channel_r_stream']), intval($arr['channel_r_profile']), intval($arr['channel_r_photos']), intval($arr['channel_r_abook']), intval($arr['channel_w_stream']), intval($arr['channel_w_wall']), intval($arr['channel_w_tagwall']), intval($arr['channel_w_comment']), intval($arr['channel_w_mail']), intval($arr['channel_w_photos']), intval($arr['channel_w_chat']), intval($arr['channel_a_delegate']), intval($arr['channel_r_storage']), intval($arr['channel_w_storage']), intval($arr['channel_r_pages']), intval($arr['channel_w_pages']), intval($arr['channel_a_republish']), intval($arr['channel_w_like']), dbesc($str_contact_allow), dbesc($str_group_allow), dbesc($str_contact_deny), dbesc($str_group_deny), intval(local_user()));
    if ($r) {
        info(t('Settings updated.') . EOL);
    }
    $r = q("UPDATE `profile` \n\t\tSET `publish` = %d, \n\t\t`hide_friends` = %d\n\t\tWHERE `is_default` = 1 AND `uid` = %d LIMIT 1", intval($publish), intval($hide_friends), intval(local_user()));
    if ($name_change) {
        $r = q("update xchan set xchan_name = '%s', xchan_name_date = '%s' where xchan_hash = '%s' limit 1", dbesc($username), dbesc(datetime_convert()), dbesc($channel['channel_hash']));
        $r = q("update profile set name = '%s' where uid = %d and is_default = 1", dbesc($username), intval($channel['channel_id']));
    }
    proc_run('php', 'include/directory.php', local_user());
    build_sync_packet();
    //$_SESSION['theme'] = $theme;
    if ($email_changed && $a->config['system']['register_policy'] == REGISTER_VERIFY) {
        // FIXME - set to un-verified, blocked and redirect to logout
        // Why? Are we verifying people or email addresses?
    }
    goaway($a->get_baseurl(true) . '/settings');
    return;
    // NOTREACHED
}