File: /var/www/html/ielts-store/wp-content/plugins/automatewoo/admin/controllers/base.php
<?php
// phpcs:ignoreFile
namespace AutomateWoo\Admin\Controllers;
use AutomateWoo\Admin;
use AutomateWoo\Clean;
/**
* Base admin controller class
* @since 3.2.4
*/
abstract class Base {
/** @var string */
public $name;
/** @var array */
private $messages = [];
/** @var array */
private $errors = [];
/** @var string */
protected $default_route = 'list';
/** @var string */
protected $heading;
/** @var array */
protected $heading_links = [];
/**
* Handle controller requests
* @return void
*/
abstract function handle();
/**
* @return string
*/
function get_heading() {
if ( isset( $this->heading ) ) {
return $this->heading;
}
return get_admin_page_title();
}
/**
* @return array
*/
function get_heading_links() {
return $this->heading_links;
}
function output_messages() {
if ( sizeof( $this->errors ) > 0 ) {
foreach ( $this->errors as $error ) {
echo $this->format_notice( $error, 'error' );
}
}
elseif ( sizeof( $this->messages ) > 0 ) {
foreach ( $this->messages as $message ) {
echo $this->format_notice( $message, 'success' );
}
}
}
/**
* @param $notice_data
* @param $type
* @return string
*/
function format_notice( $notice_data, $type ) {
$class = "notice notice-$type automatewoo-notice";
if ( is_array( $notice_data ) ) {
$main_text = $notice_data['main'];
$extra_text = isset($notice_data['extra']) ? $notice_data['extra'] : '';
$class .= ' ' . $notice_data['class'];
}
else {
$main_text = $notice_data;
$extra_text = '';
}
return '<div class="' . $class .'"><p><strong>'.esc_html($main_text).'</strong> '.$extra_text.'</p></div>';
}
/**
* @return string
*/
function get_messages() {
ob_start();
$this->output_messages();
return ob_get_clean();
}
/**
* @return string
*/
function get_current_action() {
if ( isset( $_REQUEST['action'] ) && -1 != $_REQUEST['action'] )
return Clean::string( $_REQUEST['action'] );
if ( isset( $_REQUEST['action2'] ) && -1 != $_REQUEST['action2'] )
return Clean::string( $_REQUEST['action2'] );
return $this->default_route;
}
/**
* @return string
*/
function get_nonce_action() {
return 'automatewoo-' . $this->name;
}
/**
* Verify nonce
* @param bool|string $nonce_action - optional custom nonce
*/
function verify_nonce_action( $nonce_action = false ) {
$nonce = Clean::string( aw_request( '_wpnonce' ) );
if ( ! $nonce_action ) {
$nonce_action = $this->get_nonce_action();
}
if ( ! wp_verify_nonce( $nonce, $nonce_action ) ) {
wp_die( 'Security check failed.' );
}
}
/**
* @param string $main_text
* @param string $extra_text
* @param string $extra_classes
*/
function add_message( $main_text, $extra_text = '', $extra_classes = '' ) {
$this->messages[] = [
'main' => $main_text,
'extra' => $extra_text,
'class' => $extra_classes
];
}
/**
* @param string $main_text
* @param string $extra_text
* @param string $extra_classes
*/
function add_error( $main_text, $extra_text = '', $extra_classes = '' ) {
$this->errors[] = [
'main' => $main_text,
'extra' => $extra_text,
'class' => $extra_classes
];
}
/**
* @return string
*/
function get_responses_option_name() {
return '_automatewoo_admin_temp_messages_' . get_current_user_id();
}
function store_responses() {
update_option( $this->get_responses_option_name(), [
'errors' => $this->errors,
'messages' => $this->messages
], false );
}
function load_stored_responses() {
if ( $store = get_option( $this->get_responses_option_name() ) ) {
$this->messages = $store['messages'];
$this->errors = $store['errors'];
}
$this->clear_stored_responses();
}
function clear_stored_responses() {
delete_option( $this->get_responses_option_name() );
}
/**
* @param string $action
* @param array $query_args
*/
function redirect_after_action( $action = '', $query_args = [] ) {
$this->store_responses();
$args = [
'did-action' => $this->get_current_action()
];
if ( $action ) {
$args['action'] = $action;
}
$query_args = array_merge( $args, $query_args );
wp_safe_redirect( add_query_arg( $query_args, Admin::page_url( $this->name ) ), 302 );
exit;
}
/**
* Outputs an controller view.
* Adds relevant variables to scope.
*
* IMPORTANT not to name $import_variables something as $args
* can cause errors if there is a conflicting key name in the array
*
* @param $view
* @param array $imported_variables
* @param bool|string $path
*/
function output_view( $view, $imported_variables = [], $path = false ) {
$imported_variables['controller'] = $this;
$imported_variables['page'] = $this->name;
$imported_variables['heading'] = $this->get_heading();
$imported_variables['messages'] = $this->get_messages();
if ( $imported_variables && is_array( $imported_variables ) ) {
extract( $imported_variables );
}
if ( $path ) {
if ( ! file_exists( "$path/$view.php" ) ) {
$path = false; // fall back to original views dir
}
}
if ( ! $path ) {
$path = AW()->admin_path( '/views' );
}
include "$path/$view.php";
}
}