Membership - Source Excerpt 04
Summary
This source excerpt preserves a bounded section of Anti-Christ.org/wp-content/plugins/fftac-membership/inc/membership.php so readers can inspect the evidence without opening the full source file.
**Source path:** Anti-Christ.org/wp-content/plugins/fftac-membership/inc/membership.php
wp_safe_redirect(antichrist_engine_membership_build_notice_url(
$safe_redirect,
'success',
'register',
'registered'
));
exit;
}
add_action('admin_post_nopriv_antichrist_engine_membership_register', 'antichrist_engine_membership_handle_register');
/**
* Handles lost password requests from the front-end portal.
*
* @return void
*/
function antichrist_engine_membership_handle_recovery()
{
check_admin_referer('antichrist_engine_membership_recover');
$portal_url = antichrist_engine_membership_get_portal_url('recover');
$identifier = antichrist_engine_security_sanitize_text_field(antichrist_engine_security_get_post_value('user_login'), 190);
$submission_error = antichrist_engine_security_validate_form_submission();
if ($submission_error) {
wp_safe_redirect(antichrist_engine_membership_build_notice_url(
$portal_url,
'error',
'recover',
$submission_error
));
exit;
}
if (!antichrist_engine_security_check_rate_limit('membership_recover', 5, HOUR_IN_SECONDS)) {
wp_safe_redirect(antichrist_engine_membership_build_notice_url(
$portal_url,
'error',
'recover',
'rate_limited'
));
exit;
}
if (!$identifier) {
wp_safe_redirect(antichrist_engine_membership_build_notice_url(
$portal_url,
'error',
'recover',
'empty_identifier'
));
exit;
}
$result = retrieve_password($identifier);
if (is_wp_error($result) && !in_array('invalidcombo', $result->get_error_codes(), true)) {
wp_safe_redirect(antichrist_engine_membership_build_notice_url(
$portal_url,
'error',
'recover',
'recovery_failed'
));
exit;
}
wp_safe_redirect(antichrist_engine_membership_build_notice_url(
$portal_url,
'success',
'recover',
'reset_sent'
));
exit;
}
add_action('admin_post_nopriv_antichrist_engine_membership_recover', 'antichrist_engine_membership_handle_recovery');
/**
* Handles front-end profile updates.
*
* @return void
*/
function antichrist_engine_membership_handle_profile_update()
{
if (!is_user_logged_in()) {
wp_safe_redirect(antichrist_engine_membership_build_notice_url(
antichrist_engine_membership_get_portal_url('login'),
'error',
'login',
'not_logged_in'
));
exit;
}
check_admin_referer('antichrist_engine_membership_profile');
$user_id = get_current_user_id();
$portal_url = antichrist_engine_membership_get_page_url('portal');
$display_name = antichrist_engine_security_sanitize_text_field(antichrist_engine_security_get_post_value('display_name'), 120);
$email = antichrist_engine_security_sanitize_email_field(antichrist_engine_security_get_post_value('user_email'), 190);
$first_name = antichrist_engine_security_sanitize_text_field(antichrist_engine_security_get_post_value('first_name'), 80);
$last_name = antichrist_engine_security_sanitize_text_field(antichrist_engine_security_get_post_value('last_name'), 80);
$description = antichrist_engine_security_sanitize_textarea_field(antichrist_engine_security_get_post_value('description'), 1000);
$errors = array();
if (!$display_name) {
$errors[] = 'empty_display_name';
}
if (!$email || !is_email($email)) {
$errors[] = 'invalid_email';
} else {
$user_with_email = get_user_by('email', $email);
if ($user_with_email instanceof WP_User && (int) $user_with_email->ID !== (int) $user_id) {
$errors[] = 'email_exists';
}
}
if ($errors) {
wp_safe_redirect(antichrist_engine_membership_build_notice_url(
$portal_url,
'error',
'profile',
$errors
));
exit;
}
$updated_user = wp_update_user(array(
'ID' => $user_id,
'display_name' => $display_name,
'user_email' => $email,
'first_name' => $first_name,
'last_name' => $last_name,
'description' => $description,
));
if (is_wp_error($updated_user)) {
wp_safe_redirect(antichrist_engine_membership_build_notice_url(
$portal_url,
'error',
'profile',
'update_failed'
));
exit;
}
if (function_exists('antichrist_engine_foundation_participants_database_sync_member')) {
antichrist_engine_foundation_participants_database_sync_member((int) $user_id);
}
wp_safe_redirect(antichrist_engine_membership_build_notice_url(
$portal_url,
'success',
'profile',
'updated'
));
exit;
}
add_action('admin_post_antichrist_engine_membership_profile', 'antichrist_engine_membership_handle_profile_update');
/**
* Handles custom logout requests.
*
* @return void
*/
function antichrist_engine_membership_handle_logout()
{
check_admin_referer('antichrist_engine_membership_logout');
$redirect_to = isset($_GET['redirect_to']) ? rawurldecode(wp_unslash($_GET['redirect_to'])) : '';
$redirect_to = antichrist_engine_membership_normalize_redirect(
$redirect_to,
antichrist_engine_membership_get_portal_url('login')
);
wp_logout();
wp_safe_redirect(antichrist_engine_membership_build_notice_url(
$redirect_to,
'success',
'login',
'logged_out'
));
exit;
}
add_action('admin_post_antichrist_engine_membership_logout', 'antichrist_engine_membership_handle_logout');
/**
* Redirects visitors away from protected member pages.
*
* @return void
*/
function antichrist_engine_membership_protect_members_pages()
{
if (is_admin() || is_user_logged_in() || !is_page()) {
return;
}
if (!is_page_template('template-members-area.php')) {
return;
}
$current_url = '';
if (is_singular()) {
$current_url = get_permalink();
}
$portal_url = antichrist_engine_membership_get_portal_url('login', array(
'redirect_to' => antichrist_engine_membership_normalize_redirect(
$current_url,
antichrist_engine_membership_get_page_url('members')
),
));
wp_safe_redirect(antichrist_engine_membership_build_notice_url(
$portal_url,
'error',
'login',
'not_logged_in'
));
exit;
}
add_action('template_redirect', 'antichrist_engine_membership_protect_members_pages');
/**
* Keeps members out of the WordPress dashboard.
*
* @return void
*/
function antichrist_engine_membership_limit_dashboard_access()
{
if (!is_user_logged_in() || current_user_can('edit_posts') || wp_doing_ajax()) {
return;
}
$current_screen = $GLOBALS['pagenow'] ?? '';
if (in_array($current_screen, array('admin-post.php', 'async-upload.php'), true)) {
return;
}
wp_safe_redirect(antichrist_engine_membership_get_page_url('portal'));
exit;
}
add_action('admin_init', 'antichrist_engine_membership_limit_dashboard_access');
/**
* Sends members to the front-end portal after login.
*
* @param string $redirect_to Resolved redirect URL.
* @param string $requested_redirect_to Requested redirect URL.
* @param WP_User|WP_Error $user Logged-in user object.
* @return string
*/
function antichrist_engine_membership_login_redirect($redirect_to, $requested_redirect_to, $user)
{
if (!$user instanceof WP_User || user_can($user, 'edit_posts')) {
return $redirect_to;
}
if ($requested_redirect_to) {
return antichrist_engine_membership_normalize_redirect(
$requested_redirect_to,
antichrist_engine_membership_get_page_url('members')
);
}
return antichrist_engine_membership_get_page_url('members');
}
add_filter('login_redirect', 'antichrist_engine_membership_login_redirect', 10, 3);
/**
* Hides the admin bar for members using the front-end portal.
*
* @param bool $show_admin_bar Existing setting.
* @return bool
*/
function antichrist_engine_membership_show_admin_bar($show_admin_bar)
{
if (is_user_logged_in() && !current_user_can('edit_posts')) {
return false;
}
return $show_admin_bar;
}
add_filter('show_admin_bar', 'antichrist_engine_membership_show_admin_bar');