Ajax()
Description #
A class to be used as a base for all ajax classes.
Source #
File: classes/ajax.php
abstract class Ajax extends \AnsPress\Singleton { /** * The response array. * * @var array */ private $res = array(); /** * The ajax action. * * @var string */ public $action = ''; /** * Ajax status. * * @var boolean */ public $success = false; /** * The default nonce key. * * @var string */ public $nonce_key = 'ap_default'; /** * All request values. * * @var array */ public $req; /** * Class constructor. */ protected function __construct() { $this->set_action(); $this->verify_nonce(); $this->verify_permission(); if ( is_user_logged_in() ) { $this->logged_in(); } else { $this->nopriv(); } $this->send(); } /** * Set ajax action. */ protected function set_action() { $this->action = 'ap_' . strtolower( ( new \ReflectionClass( $this ) )->getShortName() ); } /** * Method for logged in users. * * @return void */ public function logged_in() { } /** * Method for non logged in users. * * @return void */ public function nopriv() { } /** * Add response key => value pair. * * @param string $key Key. * @param mixed $val Value. * @return void */ public function add_res( $key, $val ) { $this->res[ $key ] = $val; } /** * Verify nonce and die if failed. * * Nonce key is stored in `$nonce_key` property. To bypass verification * simply set `$nonce_key` to an empty value. * * @return void */ private function verify_nonce() { if ( empty( $this->nonce_key ) ) { return; } $nonce = ap_sanitize_unslash( '__nonce', 'r' ); // Verify nonce. if ( ! wp_verify_nonce( $nonce, $this->nonce_key ) ) { $this->snackbar( __( 'Trying to cheat?!', 'anspress-question-answer' ) ); $this->send(); } } /** * Verify permission of a user. * * By default this method need to override from child class. * If not overridden then ajax will always fail at this point. * * @return void */ protected function verify_permission() { $this->set_fail(); $this->snackbar( __( 'You don\'t have enough permissions to do this action.', 'anspress-question-answer' ) ); $this->send(); } /** * Set ajax as success. * * @return void */ public function set_success() { $this->success = true; } /** * Set ajax as fail. * * @return void */ public function set_fail() { $this->success = false; } /** * Add snackbar. * * @param string $msg Snackbar message. * @return void */ public function snackbar( $msg ) { $this->res['snackbar'] = array( 'message' => $msg, ); } /** * Get and set request. * * @param string $key Request key. * @param mixed $val Request value. * @return mixed */ public function req( $key, $val = null ) { if ( null === $val && ! isset( $this->req[ $key ] ) ) { return; } if ( null === $val ) { return $this->req[ $key ]; } $this->req[ $key ] = $val; } /** * Send ajax response. * * @return void */ public function send() { $this->add_res( 'success', $this->success ); $this->add_res( 'action', $this->action ); // Add snackbar message by default if not success. if ( false === $this->success && empty( $this->res['snackbar'] ) ) { $this->snackbar( __( 'Something went wrong.', 'anspress-question-answer' ) ); } ap_send_json( $this->res ); } }
Expand full source code Collapse full source code View on GitHub: classes/ajax.php:25
Add your comment