Sindbad~EG File Manager

Current Path : /home/xiedrke/entrepot/wp-content/plugins/realpress/app/Controllers/
Upload File :
Current File : /home/xiedrke/entrepot/wp-content/plugins/realpress/app/Controllers/BecomeAgentController.php

<?php

namespace RealPress\Controllers;

use RealPress\Helpers\Validation;
use RealPress\Models\UserModel;
use RealPress\Helpers\RestApi;
use RealPress\Helpers\Settings;
use WP_REST_Server;

/**
 * Class BecomeAgentController
 * @package RealPress\Controllers
 */
class BecomeAgentController {

	/**
	 * BecomeAgentController constructor.
	 */
	public function __construct() {
		add_filter( 'views_users', array( $this, 'views_users' ), 10, 1 );
		add_filter( 'user_row_actions', array( $this, 'user_row_actions' ), 10, 2 );
		add_filter( 'users_list_table_query_args', array( $this, 'display_only_pending_requests' ) );
		add_action( 'rest_api_init', array( $this, 'register_rest_routes' ) );
		add_action( 'admin_init', array( $this, 'handle_become_an_agent' ) );
	}

	public function handle_become_an_agent() {
		if ( ! current_user_can( 'administrator' ) ) {
			return;
		}

		$action  = Validation::sanitize_params_submitted( $_GET['realpress-action'] ?? '' );
		$user_id = Validation::sanitize_params_submitted( $_GET['user_id'] ?? '' );
		if ( empty( $action ) || empty( $user_id ) ) {
			return;
		}

		if ( ! get_user_by( 'id', $user_id ) ) {
			return;
		}

		$nonce_map = [
			'accept-request' => 'realpress_accept_agent_action',
			'deny-request'   => 'realpress_deny_agent_action',
		];

		if ( ! isset( $nonce_map[ $action ] ) ) {
			return;
		}

		if (
			! isset( $_GET['_wpnonce'] ) ||
			! wp_verify_nonce( $_GET['_wpnonce'], $nonce_map[ $action ] )
		) {
			return;
		}

		if ( in_array( $action, array( 'accept-request', 'deny-request' ) ) ) {
			delete_user_meta( $user_id, REALPRESS_PREFIX . '_become_an_agent_request' );

			if ( $action === 'accept-request' ) {
				$user = new \WP_User( $user_id );
				$user->remove_role( 'subscriber' );
				$user->add_role( REALPRESS_AGENT_ROLE );
				do_action( 'realpress/agent/become-an-agent/approve', $user_id );
				wp_redirect( admin_url( 'users.php?realpress-action=accepted-request&user_id=' . $user_id ) );
			} else {
				do_action( 'realpress/agent/become-an-agent/reject', $user_id );
				wp_redirect( admin_url( 'users.php?realpress-action=denied-request&user_id=' . $user_id ) );
			}
			die();
		}
	}

	public function views_users( $views ) {
		$pending_requests = UserModel::get_pending_requests();
		if ( $pending_requests ) {
			$action = Validation::sanitize_params_submitted( $_GET['realpress-action'] ?? '' );
			if ( $action === 'pending-request' ) {
				$class = ' class="current"';
				foreach ( $views as $k => $view ) {
					$views[ $k ] = preg_replace( '!class="current"!', '', $view );
				}
			} else {
				$class = '';
			}

			$views['pending-request'] = '<a href="' . admin_url( 'users.php?realpress-action=pending-request' ) . '"' . $class . '>'
										. sprintf( __( 'Pending Request <span class="count">(%s)</span>', 'realpress' ), count( $pending_requests ) ) . '</a>';
		}

		return $views;
	}

	/**
	 * @param $actions
	 * @param $user
	 *
	 * @return array|mixed
	 */
	public function user_row_actions( $actions, $user ) {
		$pending_request = UserModel::get_pending_requests();
		$action          = Validation::sanitize_params_submitted( $_GET['realpress-action'] ?? '' );
		if ( $action === 'pending-request' && $pending_request ) {
			$actions = array();
			if ( in_array( $user->ID, $pending_request ) ) {
				$actions['accept']      = sprintf(
					'<a href="' .wp_nonce_url(
					admin_url( 'users.php?realpress-action=accept-request&user_id=' . $user->ID ),
						'realpress_accept_agent_action',
						'_wpnonce'
					) . '">%s</a>',
					_x( 'Accept', 'pending-request', 'realpress' )
				);
				$actions['delete deny'] = sprintf(
					'<a class="submitdelete" href="' .wp_nonce_url(
						admin_url( 'users.php?realpress-action=deny-request&user_id=' . $user->ID ) ,
						'realpress_deny_agent_action',
						'_wpnonce',
					). '">%s</a>',
					_x( 'Deny', 'pending-request', 'realpress' )
				);
			}
		}

		return $actions;
	}

	public function display_only_pending_requests( $args ) {
		$action = Validation::sanitize_params_submitted( $_GET['realpress-action'] ?? '' );
		if ( $action === 'pending-request' ) {
			$args['include'] = UserModel::get_pending_requests();
		}

		return $args;
	}

	public function register_rest_routes() {
		do_action('realpress/rest-api/before-register');

		register_rest_route(
			RestApi::generate_namespace(),
			'/become-an-agent',
			array(
				'methods'             => WP_REST_Server::CREATABLE,
				'callback'            => array( $this, 'become_an_agent' ),
				'permission_callback' => '__return_true',
			),
		);
	}

	public function become_an_agent( \WP_REST_Request $request ) {
		$params = $request->get_params();
		$args   = array(
			'first_name'           => $params['first_name'] ?? '',
			'last_name'            => $params['last_name'] ?? '',
			'agency_name'          => $params['agency_name'] ?? '',
			'phone_number'         => $params['phone_number'] ?? '',
			'additional_info'      => $params['additional_info'] ?? '',
			'terms_and_conditions' => $params['terms_and_conditions'] ?? false,
		);

		if ( ! is_user_logged_in() ) {
			return RestApi::error( esc_html__( 'You must log in to submit to become an Agent.', 'realpress' ), 401 );
		}

		$user_id    = get_current_user_id();
		$user_roles = UserModel::get_field( $user_id, 'roles' );
		if ( ! in_array( 'subscriber', $user_roles ) ) {
			return RestApi::error( esc_html__( 'You don\'t have permission to do it.', 'realpress' ), 403 );
		}

		if ( empty( $args['first_name'] ) ) {
			return RestApi::error( esc_html__( 'The first name is required.', 'realpress' ), 400 );
		}

		if ( empty( $args['last_name'] ) ) {
			return RestApi::error( esc_html__( 'The last name is required.', 'realpress' ), 400 );
		}

		if ( empty( $args['phone_number'] ) ) {
			return RestApi::error( esc_html__( 'The phone number is required.', 'realpress' ), 400 );
		}

		if ( empty( $args['terms_and_conditions'] ) ) {
			return RestApi::error( esc_html__( 'Please accept the Terms and Conditions.', 'realpress' ), 400 );
		}

		$user              = new \WP_User( $user_id );
		$automatic_approve = Settings::get_setting_detail( 'group:agent:fields:automatically_approve' );
		if ( $automatic_approve ) {
			$user->remove_role( 'subscriber' );
			$user->add_role( REALPRESS_AGENT_ROLE );
			do_action( 'realpress/agent/become-an-agent/approve', $user_id );

			return RestApi::success( esc_html__( 'Thank you! You became an Agent.', 'realpress' ), array() );
		} else {
			update_user_meta( $user_id, REALPRESS_PREFIX . '_become_an_agent_request', 'yes' );
			do_action( 'realpress/agent/become-an-agent/request', $user_id, $args );

			return RestApi::success( esc_html__( 'Thank you! Your request has been sent.', 'realpress' ), array() );
		}
	}
}

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists