<?php
/**
* Set the ajax action and call for WordPress
*
* @file The Actions file
* @package HMWP/Action
* @since 4.0.0
*/
defined( 'ABSPATH' ) || die( 'Cheatin\' uh?' );
class HMWP_Classes_Action extends HMWP_Classes_FrontController {
/**
*
* All the registered actions
*
* @var array with all form and ajax actions
*/
var $actions = array();
/**
* The hookAjax is loaded as custom hook in hookController class
*
* @return void
* @throws Exception
*/
public function hookInit() {
if ( HMWP_Classes_Tools::isAjax() ) {
$this->getActions( true );
}
}
/**
* The hookSubmit is loaded when action si posted
*
* @return void
* @throws Exception
*/
function hookMenu() {
/* Only if post */
if ( ! HMWP_Classes_Tools::isAjax() ) {
$this->getActions();
}
}
/**
* Hook the Multisite Menu
*
* @throws Exception
*/
function hookMultisiteMenu() {
/* Only if post */
if ( ! HMWP_Classes_Tools::isAjax() ) {
$this->getActions();
}
}
/**
* Get the list with all the plugin actions
*
* @return array
* @since 6.1.1
*/
public function getActionsTable() {
return array(
array(
"name" => "HMWP_Controllers_Settings",
"actions" => array(
"action" => array(
"hmwp_settings",
"hmwp_tweakssettings",
"hmwp_confirm",
"hmwp_newpluginschange",
"hmwp_abort",
"hmwp_ignore_errors",
"hmwp_restore_settings",
"hmwp_manualrewrite",
"hmwp_mappsettings",
"hmwp_firewall",
"hmwp_advsettings",
"hmwp_devsettings",
"hmwp_devdownload",
"hmwp_changepathsincache",
"hmwp_savecachepath",
"hmwp_backup",
"hmwp_restore",
"hmwp_rollback",
"hmwp_rollback_stable",
"hmwp_download_settings",
"hmwp_advanced_install",
"hmwp_pause_enable",
"hmwp_pause_disable",
"hmwp_update_product_name",
)
),
),
array(
"name" => "HMWP_Controllers_Overview",
"actions" => array(
"action" => array(
"hmwp_feature_save"
)
),
),
array(
"name" => "HMWP_Controllers_SecurityCheck",
"actions" => array(
"action" => array(
"hmwp_securitycheck",
"hmwp_frontendcheck",
"hmwp_fixsettings",
"hmwp_fixconfig",
"hmwp_securityexclude",
"hmwp_resetexclude"
)
),
),
array(
"name" => "HMWP_Controllers_Brute",
"actions" => array(
"action" => array(
"hmwp_brutesettings",
"hmwp_google_enterprise",
"hmwp_blockedips",
"hmwp_deleteip",
"hmwp_deleteallips"
)
),
),
array(
"name" => "HMWP_Controllers_Log",
"actions" => array(
"action" => array(
"hmwp_logsettings"
)
),
),
array(
"name" => "HMWP_Controllers_Widget",
"actions" => array(
"action" => "hmwp_widget_securitycheck"
),
),
array(
"name" => "HMWP_Controllers_Connect",
"actions" => array(
"action" => array(
"hmwp_connect",
"hmwp_reconnect",
"hmwp_dont_connect",
)
),
),
array(
"name" => "HMWP_Classes_Error",
"actions" => array(
"action" => array(
"hmwp_ignoreerror"
)
),
),
);
}
/**
* Get all actions from config.json in core directory and add them in the WP
*
* @param bool $ajax
*
* @throws Exception
* @since 4.0.0
*/
public function getActions( $ajax = false ) {
//Proceed only if logged in and in dashboard
if ( ! is_admin() && ! is_network_admin() ) {
return;
}
$this->actions = array();
$action = HMWP_Classes_Tools::getValue( 'action' );
$nonce = HMWP_Classes_Tools::getValue( 'hmwp_nonce' );
if ( $action == '' || $nonce == '' ) {
return;
}
//Get all the plugin actions
$actions = $this->getActionsTable();
foreach ( $actions as $block ) {
//If there is a single action
if ( isset( $block['actions']['action'] ) ) {
//If there are more actions for the current block
if ( ! is_array( $block['actions']['action'] ) ) {
//Add the action in the actions array
if ( $block['actions']['action'] == $action ) {
$this->actions[] = array( 'class' => $block['name'] );
}
} else {
//If there are more actions for the current block
foreach ( $block['actions']['action'] as $value ) {
//Add the actions in the actions array
if ( $value == $action ) {
$this->actions[] = array( 'class' => $block['name'] );
}
}
}
}
}
//Validate referer based on the call type
if ( $ajax ) {
check_ajax_referer( $action, 'hmwp_nonce' );
} else {
check_admin_referer( $action, 'hmwp_nonce' );
}
//Add the actions in WP.
foreach ( $this->actions as $actions ) {
HMWP_Classes_ObjController::getClass( $actions['class'] )->action();
}
}
}