get_username($member_id_of); } if (($is_ldap) || ($is_httpauth) || (($member_id_of != $member_id_viewing) && (!has_privilege($member_id_viewing, 'assume_any_member')))) { $password = null; } else { $password = post_param_string('edit_password', '', INPUT_FILTER_PASSWORD); if ($password == '') { $password = null; } else { $password_confirm = post_param_string('password_confirm', false, INPUT_FILTER_PASSWORD); if ($password != $password_confirm) { warn_exit(make_string_tempcode(escape_html(do_lang('PASSWORD_MISMATCH')))); } } } if ((cns_field_editable('email', $special_type)) && (!fractional_edit())) { $email_address = post_param_string('email', member_field_is_required($member_id_of, 'email_address', null, $member_id_viewing) ? false : '', INPUT_FILTER_POST_IDENTIFIER); } if (!fractional_edit()) { if (cns_field_editable('dob', $special_type)) { require_code('temporal2'); list($dob_year, $dob_month, $dob_day) = post_param_date_components('birthday'); if (($dob_year === null) || ($dob_month === null) || ($dob_day === null)) { if (member_field_is_required($member_id_of, 'dob', null, $member_id_viewing)) { warn_exit(do_lang_tempcode('NO_PARAMETER_SENT', escape_html('birthday'))); } $dob_day = null; $dob_month = null; $dob_year = null; } } } $custom_fields = cns_get_all_custom_fields_match( $GLOBALS['FORUM_DRIVER']->get_members_groups($member_id_of), // groups (($member_id_of != $member_id_viewing) && (!has_privilege($member_id_viewing, 'view_any_profile_field'))) ? 1 : null, // public view null, // owner view (($member_id_of == $member_id_viewing) && (!has_privilege($member_id_viewing, 'view_any_profile_field'))) ? 1 : null // owner set ); $actual_custom_fields = ((post_param_integer('submitting_profile_tab', 0) == 1) || (fractional_edit())) ? cns_read_in_custom_fields($custom_fields, $member_id_of) : []; $auto_monitor_contrib_content = null; $smart_topic_notification = null; $mailing_list_style = null; if (!fractional_edit()) { require_code('locations'); $timezone = post_param_string('timezone', get_site_timezone()); $region = post_param_region('region', ''); $theme_old = $GLOBALS['FORUM_DRIVER']->get_member_row_field($member_id_of, 'm_theme'); $theme = post_param_string('theme', null); $preview_posts = post_param_integer('preview_posts', 0); $views_signatures = post_param_integer('views_signatures', 0); $auto_monitor_contrib_content = post_param_integer('auto_monitor_contrib_content', 0); $smart_topic_notification = post_param_integer('smart_topic_notification', 0); $mailing_list_style = post_param_integer('mailing_list_style', 0); $auto_mark_read = post_param_integer('auto_mark_read', 0); $sound_enabled = post_param_integer('sound_enabled', 0); $pt_allow = array_key_exists('pt_allow', $_POST) ? implode(',', $_POST['pt_allow']) : ''; $tmp_groups = $GLOBALS['CNS_DRIVER']->get_usergroup_list(true, true); $all_pt_allow = ''; foreach (array_keys($tmp_groups) as $key) { if ($key != db_get_first_id()) { if ($all_pt_allow != '') { $all_pt_allow .= ','; } $all_pt_allow .= strval($key); } } if ($pt_allow == $all_pt_allow) { $pt_allow = '*'; } $pt_rules_text = post_param_string('pt_rules_text', null); } if ((!fractional_edit()) && (has_privilege($member_id_viewing, 'member_maintenance'))) { $primary_group = (($is_ldap) || (!has_privilege($member_id_viewing, 'assume_any_member'))) ? null : post_param_integer('primary_group', null); $highlighted_name = post_param_integer('highlighted_name', 0); $validated = post_param_integer('validated', 0); if (has_privilege($member_id_viewing, 'probate_members')) { $probation_expiration_time = post_param_date('probation_expiration_time'); require_code('cns_general_action2'); $current__probation_expiration_time = $GLOBALS['FORUM_DRIVER']->get_member_row_field($member_id_of, 'm_probation_expiration_time'); if ((($probation_expiration_time === null) || ($probation_expiration_time <= time())) && ($current__probation_expiration_time > time())) { cns_mod_log_it('STOP_PROBATION', strval($member_id_of), $GLOBALS['FORUM_DRIVER']->get_username($member_id_of)); } elseif (($probation_expiration_time !== null) && ($probation_expiration_time > time()) && ($current__probation_expiration_time <= time())) { cns_mod_log_it('START_PROBATION', strval($member_id_of), $GLOBALS['FORUM_DRIVER']->get_username($member_id_of)); } elseif (($probation_expiration_time !== null) && ($current__probation_expiration_time > $probation_expiration_time) && ($probation_expiration_time > time()) && ($current__probation_expiration_time > time())) { cns_mod_log_it('REDUCE_PROBATION', strval($member_id_of), $GLOBALS['FORUM_DRIVER']->get_username($member_id_of)); } elseif (($probation_expiration_time !== null) && ($current__probation_expiration_time < $probation_expiration_time) && ($probation_expiration_time > time()) && ($current__probation_expiration_time > time())) { cns_mod_log_it('EXTEND_PROBATION', strval($member_id_of), $GLOBALS['FORUM_DRIVER']->get_username($member_id_of)); } } $is_perm_banned = post_param_string('is_perm_banned', '0'); $old_is_perm_banned = $GLOBALS['FORUM_DRIVER']->get_member_row_field($member_id_of, 'm_is_perm_banned'); if ($old_is_perm_banned != $is_perm_banned) { if ($is_perm_banned != '0') { cns_ban_member($member_id_of, $is_perm_banned); } else { cns_unban_member($member_id_of); } } } $old_groups = $GLOBALS['FORUM_DRIVER']->get_members_groups($member_id_of); // Changing password? Also generate a new salt, and force scheme to bcrypt to disassociate from third-party auth if ($password !== null) { $salt = ''; $password_compat_scheme = 'bcrypt'; } else { $salt = null; $password_compat_scheme = null; } cns_edit_member( $member_id_of, // member_id $username, // username $password, // password $email_address, // email_address $primary_group, // primary_group $dob_day, // dob_day $dob_month, // dob_month $dob_year, // dob_year $actual_custom_fields, // custom_fields $timezone, // timezone $region, // region post_param_string('language', fractional_edit() ? STRING_MAGIC_NULL : null), // language $theme, // theme null, // title null, // photo_url null, // avatar_url null, // signature $preview_posts, // preview_posts post_param_integer('reveal_age', fractional_edit() ? INTEGER_MAGIC_NULL : 0), // reveal_age $views_signatures, // views_signatures $auto_monitor_contrib_content, // auto_monitor_contrib_content $smart_topic_notification, // smart_topic_notification $mailing_list_style, // mailing_list_style $auto_mark_read, // auto_mark_read $sound_enabled, // sound_enabled post_param_integer('allow_emails', fractional_edit() ? INTEGER_MAGIC_NULL : 0), // allow_emails post_param_integer('allow_emails_from_staff', fractional_edit() ? INTEGER_MAGIC_NULL : 0), // allow_emails_from_staff $highlighted_name, // highlighted_name $pt_allow, // pt_allow $pt_rules_text, // pt_rules_text $validated, // validated $probation_expiration_time, // probation_expiration_time null, // is perm_banned true, // Check correctness $password_compat_scheme, // Password scheme (force to bcrypt to disassociate external authorizations if password was provided) $salt, // Salt null, // Join time true // Email on sensitive changes ); // Run form handlers for editing profile $hook_obs = find_all_hook_obs('form_handlers', 'profile_edit', 'Hook_form_handlers_profile_edit_'); foreach ($hook_obs as $hook => $ob) { $ob->run($member_id_of, $username, $email_address, $dob_day, $dob_month, $dob_year, $actual_custom_fields, $timezone, post_param_string('language', fractional_edit() ? STRING_MAGIC_NULL : null), post_param_integer('allow_emails', fractional_edit() ? INTEGER_MAGIC_NULL : 0), post_param_integer('allow_emails_from_staff', fractional_edit() ? INTEGER_MAGIC_NULL : 0), $validated); } if (addon_installed('content_reviews')) { require_code('content_reviews2'); content_review_set('member', strval($member_id_of)); } if (!fractional_edit()) { // Secondary groups if (has_actual_page_access(get_member(), 'groups', get_module_zone('groups'))) { //if (array_key_exists('secondary_groups', $_POST)) { Can't use this line, because deselecting all will result in it not being passed if (!array_key_exists('secondary_groups', $_POST)) { $_POST['secondary_groups'] = []; } require_code('cns_groups_action2'); $members_groups = $GLOBALS['CNS_DRIVER']->get_members_groups($member_id_of); $group_count = $GLOBALS['FORUM_DB']->get_table_count_approx('f_groups'); $groups = list_to_map('id', $GLOBALS['FORUM_DB']->query_select('f_groups', ['*'], ($group_count > 200) ? ['g_is_private_club' => 0] : [])); foreach ($_POST['secondary_groups'] as $group_id) { // Add to new secondary groups if (!isset($groups[intval($group_id)])) { continue; // Deleted since form submitted } $group = $groups[intval($group_id)]; if (($group['g_hidden'] == 1) && (!in_array($group['id'], $members_groups)) && (!has_privilege($member_id_viewing, 'see_hidden_groups'))) { continue; } if ((!in_array($group['id'], $members_groups)) && ((has_privilege($member_id_viewing, 'assume_any_member')) || ($group['g_open_membership'] == 1))) { cns_add_member_to_secondary_group($member_id_of, $group['id']); } } foreach ($members_groups as $group_id) { // Remove from old secondary groups that member is no longer in if (!in_array(strval($group_id), $_POST['secondary_groups'])) { cns_member_leave_secondary_group($group_id, $member_id_of); } } //} } $GLOBALS['FORUM_DB']->query('DELETE FROM ' . $GLOBALS['FORUM_DB']->get_table_prefix() . 'f_member_known_login_ips WHERE i_member_id=' . strval($member_id_of) . ' AND ' . db_string_not_equal_to('i_val_code', '')); // So any re-confirms can happen if (addon_installed('awards')) { require_code('awards'); handle_award_setting('member', strval($member_id_of)); } $redirect = get_param_string('redirect', null, INPUT_FILTER_URL_GENERAL); if ($redirect !== null) { require_code('site2'); assign_refresh($redirect, 0.0); // redirect_screen not used because there is already a legitimate output screen happening } elseif ((!fractional_edit()) && ($member_id_of == $member_id_viewing)) { // If we are changing theme, assign a refresh so the theme change is reflected for the member if (($theme !== null) && ($theme !== $theme_old)) { require_code('site2'); assign_refresh(get_self_url(false, false, ['redirected' => 1]), 0.0); // redirect_screen not used because there is already a legitimate output screen happening } } } require_code('cns_groups_action2'); cns_update_group_approvals($member_id_of, $member_id_viewing, $old_groups); // Tidy up auto-save require_code('autosave'); clear_cms_autosave(); if (!fractional_edit()) { if (($username !== null) && ($username != $username_old)) { $title = get_screen_title('MEMBER_ACCOUNT', true, [escape_html($username), escape_html($username)]); require_code('site2'); redirect_exit(get_self_url(), $title, do_lang_tempcode('SUCCESS_SAVE')); } else { attach_message(do_lang_tempcode('SUCCESS_SAVE'), 'inform'); } } } elseif (post_param_integer('validated', 0) == 1) { // Special support for just approving $GLOBALS['FORUM_DB']->query_update('f_members', ['m_validated' => 1], ['id' => $member_id_of], '', 1); require_code('mail'); $_login_url = build_url(['page' => 'login'], get_module_zone('login'), [], false, false, true); $login_url = $_login_url->evaluate(); $username = $GLOBALS['FORUM_DRIVER']->get_member_row_field($member_id_of, 'm_username'); $email_address = $GLOBALS['FORUM_DRIVER']->get_member_row_field($member_id_of, 'm_email_address'); $join_time = $GLOBALS['FORUM_DRIVER']->get_member_row_field($member_id_of, 'm_join_time'); // NB: Same mail also sent in cns_members_action2.php (validate upon full edit) require_code('mail'); $_login_url = build_url(['page' => 'login'], get_module_zone('login'), [], false, false, true); $login_url = $_login_url->evaluate(); $vm_subject = do_lang('VALIDATED_MEMBER_SUBJECT', get_site_name(), null, get_lang($member_id_of)); $vm_body = do_lang('MEMBER_VALIDATED', get_site_name(), $username, $login_url, get_lang($member_id_of)); dispatch_mail($vm_subject, $vm_body, '', [$email_address], $username, '', '', ['require_recipient_valid_since' => $join_time]); attach_message(do_lang_tempcode('SUCCESS_SAVE'), 'inform'); } if ($leave_to_ajax_if_possible) { return null; } // UI $title = do_lang_tempcode('SETTINGS'); $myrow = $GLOBALS['FORUM_DRIVER']->get_member_row($member_id_of); if ($myrow === null) { warn_exit(do_lang_tempcode('MEMBER_NO_EXIST'), false, false, 404); } require_code('cns_members_action2'); list($fields, $hidden) = cns_get_member_fields_settings( false, '', $member_id_of, $myrow['m_username'], $myrow['m_email_address'], $myrow['m_primary_group'], $GLOBALS['CNS_DRIVER']->get_members_groups($member_id_of), $myrow['m_dob_day'], $myrow['m_dob_month'], $myrow['m_dob_year'], get_users_timezone($member_id_of), $myrow['m_region'], $myrow['m_language'], $myrow['m_theme'], $myrow['m_preview_posts'], $myrow['m_reveal_age'], $myrow['m_views_signatures'], $myrow['m_auto_monitor_contrib_content'], $myrow['m_smart_topic_notification'], $myrow['m_mailing_list_style'], $myrow['m_auto_mark_read'], $myrow['m_sound_enabled'], $myrow['m_allow_emails'], $myrow['m_allow_emails_from_staff'], $myrow['m_highlighted_name'], $myrow['m_pt_allow'], get_translated_text($myrow['m_pt_rules_text'], $GLOBALS['FORUM_DB']), $myrow['m_validated'], $myrow['m_probation_expiration_time'], $myrow['m_is_perm_banned'], $myrow['m_parental_consent'] ); // Awards? if (addon_installed('awards')) { require_code('awards'); $fields->attach(get_award_fields('member', strval($member_id_of))); } $redirect = get_param_string('redirect', '', INPUT_FILTER_URL_INTERNAL); if ($redirect != '') { $hidden->attach(form_input_hidden('redirect', static_evaluate_tempcode(protect_url_parameter($redirect)))); } $hidden->attach(form_input_hidden('submitting_settings_tab', '1')); require_javascript('core_cns'); $js_function_calls = ['hookProfilesTabsEditSettingsRenderTab']; $text = new Tempcode(); if ($memory_debugging) { require_code('files'); $usage_after = memory_get_usage(); $usage = clean_file_size($usage_after - $usage_before); $text->attach(paragraph('Memory debugging: ' . $usage . ' used, now at ' . clean_file_size($usage_after))); $title->attach(' (' . $usage . ')'); } return [$title, $fields, $text, $js_function_calls, $order, $hidden, 'tabs/member_account/edit/settings']; } }