Files
roi-theme/wp-content/plugins/thrive-ultimatum/thrive-dashboard/inc/notification-manager/includes/admin/class-td-nm-admin-ajax-controller.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

257 lines
6.8 KiB
PHP
Executable File

<?php
/**
* Thrive Themes - https://thrivethemes.com
*
* @package thrive-dashboard
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Silence is golden
}
class TD_NM_Admin_Ajax_Controller {
protected static $_instance;
/**
* TD_NM_Admin_Ajax_Controller constructor.
* Protected constructor because we want to use it as singleton
*/
protected function __construct() {
}
/**
* Gets the SingleTone's instance
*
* @return TD_NM_Admin_Ajax_Controller
*/
public static function instance() {
if ( empty( static::$_instance ) ) {
static::$_instance = new static();
}
return static::$_instance;
}
/**
* Sets the request's header with server protocol and status
* Sets the request's body with specified $message
*
* @param $message
* @param string $status
*/
protected function error( $message, $status = '404 Not Found' ) {
status_header( 400 );
wp_send_json( array(
'error' => $message,
) );
return $message;
}
/**
* Returns the params from $_POST or $_REQUEST
*
* @param $key
* @param null $default
*
* @return mixed|null|$default
*/
protected function param( $key, $default = null ) {
return isset( $_POST[ $key ] ) ? map_deep( $_POST[ $key ], 'sanitize_text_field' ) : ( isset( $_REQUEST[ $key ] ) ? map_deep( $_REQUEST[ $key ], 'sanitize_text_field' ) : $default );
}
public function handle() {
if ( ! check_ajax_referer( 'td_nm_admin_ajax_request', '_nonce', false ) ) {
$this->error( sprintf( __( 'Invalid request', 'thrive-dash' ) ) );
}
$route = $this->param( 'route' );
$route = preg_replace( '#([^a-zA-Z0-9-])#', '', $route );
$method_name = $route . '_action';
if ( ! method_exists( $this, $method_name ) ) {
$this->error( sprintf( __( 'Method %s not implemented', 'thrive-dash' ), $method_name ) );
}
return $this->{$method_name}();
}
public function notification_action() {
$model = json_decode( file_get_contents( 'php://input' ), true );
$method = empty( $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] ) ? 'GET' : sanitize_text_field( $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] );
switch ( $method ) {
case 'POST':
case 'PUT':
case 'PATCH':
if ( ! ( $item = td_nm_save_notification( $model ) ) ) {
$this->error( __( 'Notification could not be saved', 'thrive-dash' ) );
}
return $item;
break;
case 'DELETE':
$id = $this->param( 'ID' );
if ( empty( $id ) ) {
$this->error( __( 'Invalid parameters in delete', 'thrive-dash' ) );
}
if ( ( $deleted = td_nm_delete_notification( $id ) ) === false ) {
$this->error( __( 'Notification could not be deleted', 'thrive-dash' ) );
}
return $deleted;
break;
}
}
public function action_action() {
$model = json_decode( file_get_contents( 'php://input' ), true );
$model = tve_sanitize_data_recursive( $model, 'sanitize_textarea_field' );
$method = empty( $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] ) ? 'GET' : sanitize_text_field( $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] );
switch ( $method ) {
case 'POST':
case 'PUT':
case 'PATCH':
$old_actions = td_nm_get_actions( $model['notification_id'] );
$update_actions = $old_actions;
$id = null;
if ( is_numeric( $model['ID'] ) ) { //update because we have ID
$update_actions[ $model['ID'] ] = $model;
$id = $model['ID'];
} else { //push new model in array
$update_actions[] = $model;
$id = count( $update_actions ) - 1; // The first action index is 0.
}
if ( $old_actions == $update_actions ) {
return $id;
}
if ( td_nm_save_actions( $update_actions, $model['notification_id'] ) === false ) {
$this->error( __( 'Action could not be saved', 'thrive-dash' ) );
}
return $id;
break;
case 'DELETE':
$saved = false;
if ( ! is_numeric( $this->param( 'ID' ) ) || ! is_numeric( $this->param( 'notification_id' ) ) ) {
$this->error( __( 'Invalid parameters in delete', 'thrive-dash' ) );
}
$actions = td_nm_get_actions( $this->param( 'notification_id' ) );
if ( ! empty( $actions ) ) {
unset( $actions[ $this->param( 'ID' ) ] );
$actions = array_values( $actions );
foreach ( $actions as $key => &$item ) {
$item['ID'] = $key;
}
if ( ( $saved = td_nm_save_actions( $actions, $this->param( 'notification_id' ) ) ) === false ) {
$this->error( __( 'Action could not be deleted', 'thrive-dash' ) );
}
}
return $saved;
break;
}
}
public function trigger_action() {
$model = json_decode( file_get_contents( 'php://input' ), true );
$method = empty( $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] ) ? 'GET' : sanitize_text_field( $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] );
switch ( $method ) {
case 'POST':
case 'PUT':
case 'PATCH':
if ( ( $saved = td_nm_save_trigger( $model, $model['ID'] ) ) === false ) {
$this->error( __( 'Trigger could not be saved', 'thrive-dash' ) );
}
return $saved;
break;
}
}
/**
* Set which connection should be used for sending emails
* Updates an WP Option
*
* @return bool
*/
public function toggleservice_action() {
$connection = '';
if ( (int) $this->param( 'active' ) ) {
$connection = $this->param( 'service' );
}
update_option( 'tvd-nm-email-service', $connection );
return true;
}
/**
* Save API Connection by using API List Manager
*
* @return mixed
*/
public function setupconnection_action() {
$connection = Thrive_Dash_List_Manager::connection_instance( $this->param( 'api' ) );
$_POST['api'] = $this->param( 'api' );
$_POST['connection'] = $this->param( 'connection' );
if ( is_string( $saved = $connection->read_credentials() ) ) {
$this->error( $saved );
}
update_option( 'tvd-nm-email-service', $this->param( 'api' ) );
return $saved;
}
/**
* Tests an API Connection
*
* @return string
*/
public function connectiontest_action() {
$connection = Thrive_Dash_List_Manager::connection_instance( $this->param( 'service' ) );
return is_string( $tested = $connection->test_connection() ) ? $this->error( $tested ) : array( 'success' => __( 'Connection OK', 'thrive-dash' ) );
}
/**
* Deletes a wordpress notification from the post meta table
*
* @return bool
*/
public function deletenotification_action() {
$key = $this->param( 'key' );
if ( ! empty( $key ) && is_numeric( $key ) ) {
$return = array();
if ( $this->param( 'redirect' ) == true ) {
$post_meta_value = get_post_meta( $key, 'td_nm_wordpress_notification', true );
$return['redirect_url'] = $post_meta_value['url'];
}
$return['status'] = delete_post_meta( $key, 'td_nm_wordpress_notification' );
wp_send_json( $return );
} else {
$this->error( __( 'Invalid parameter type', 'thrive-dash' ) );
}
return false;
}
}