Files
roi-theme/wp-content/plugins/wp-marketing-automations-pro/crm/includes/class-bwfcrm-email-editor.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

230 lines
7.1 KiB
PHP
Executable File

<?php
/**
* Email Editor Controller
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Class BWFCRM_Email_Editor_Controller
*/
class BWFCRM_Email_Editor_Controller {
private static $ins = null;
public static function get_instance() {
if ( null === self::$ins ) {
self::$ins = new self();
}
return self::$ins;
}
public function __construct() {
add_action( 'wp_ajax_nopriv_bwf_email_builder_data', array( $this, 'handle_remote_email_editor_data' ) );
add_action( 'bwfan_action_send_email_editors', array( $this, 'add_drag_n_drop_editor' ) );
add_action( 'bwfan_action_send_email_template', array( $this, 'add_drag_n_drop_editor_iframe' ) );
add_action( 'admin_head', array( $this, 'enqueue_scripts' ) );
}
public function enqueue_scripts() {
if ( ! isset( $_GET['page'] ) || ! isset( $_GET['edit'] ) || 'autonami-automations' !== $_GET['page'] ) {
return;
}
$license = BWFAN_Common::get_pro_license();
$token = get_option( 'bwfan_u_key', 0 );
$site_url = urlencode( home_url() );
$automation_id = sanitize_key( $_GET['edit'] );
$iframe_src = "//app.getautonami.com/get/$license/$token/$site_url/crm.automation.$automation_id";
/** Remove extra slashes */
$iframe_src = preg_replace( '/([^:])(\/{2,})/', '$1/', $iframe_src );
$params = array(
'license' => $license,
'token' => $token,
'site_url' => $site_url,
'iframe_src' => $iframe_src,
);
$dependencies = array( 'jquery', 'wp-api-fetch', 'wp-url' );
if ( bwfan_is_woocommerce_active() ) {
$currency = function_exists( 'get_woocommerce_currency' ) ? get_woocommerce_currency() : 'USD';
$params['currency'] = array(
'code' => $currency,
'precision' => wc_get_price_decimals(),
'symbol' => html_entity_decode( get_woocommerce_currency_symbol( $currency ) ),
'symbolPosition' => get_option( 'woocommerce_currency_pos' ),
'decimalSeparator' => wc_get_price_decimal_separator(),
'thousandSeparator' => wc_get_price_thousand_separator(),
'priceFormat' => html_entity_decode( get_woocommerce_price_format() ),
);
$dependencies[] = 'wc-currency';
}
wp_enqueue_style( 'bwfan-automation-drag-drop-editor', BWFAN_PRO_PLUGIN_URL . '/admin/assets/css/bwfan-drag-drop-editor.css' );
wp_enqueue_script( 'bwfan-automation-drag-drop-editor', BWFAN_PRO_PLUGIN_URL . '/admin/assets/js/bwfan-drag-drop-editor.js', $dependencies, BWFAN_VERSION_DEV, true );
wp_localize_script( 'bwfan-automation-drag-drop-editor', 'bwfan_automation_drag_drop', $params );
}
public function do_request_security_check() {
if ( ! isset( $_POST['nonce'] ) || empty( $_POST['nonce'] ) || $_POST['nonce'] !== $this->get_security_token() ) {
wp_send_json_error( array( 'error' => 'Invalid Nonce' ) );
}
$license = htmlspecialchars( filter_input( INPUT_POST, 'license', FILTER_UNSAFE_RAW ) );
if ( $license !== BWFAN_Common::get_pro_license() ) {
wp_send_json_error( array( 'error' => 'Invalid License' ) );
}
}
public function handle_remote_email_editor_data() {
BWFAN_PRO_Common::nocache_headers();
$this->do_request_security_check();
$object_id = htmlspecialchars( filter_input( INPUT_POST, 'object_id', FILTER_UNSAFE_RAW ) );
if ( false !== strpos( $object_id, 'crm.broadcast' ) ) {
$this->handle_broadcast_request();
}
}
public function handle_broadcast_request() {
$object_id = htmlspecialchars( filter_input( INPUT_POST, 'object_id', FILTER_UNSAFE_RAW ) );
if ( empty( $object_id ) ) {
wp_send_json_error( array( 'error' => 'Invalid Object ID' ) );
}
$object_id = explode( '.', $object_id );
$broadcast_id = absint( $object_id[2] );
$content_number = absint( $object_id[4] );
$html = stripslashes_deep( $_POST['html'] );
$design = stripslashes_deep( $_POST['design'] );
$subject = empty( $_POST['subject'] ) ? '' : $_POST['subject'];
$email = empty( $_POST['email'] ) ? '' : $_POST['email'];
$current_action = htmlspecialchars( filter_input( INPUT_POST, 'current_action', FILTER_UNSAFE_RAW ) );
if ( empty( $current_action ) ) {
wp_send_json_error( array( 'error' => 'Invalid/Empty action' ) );
}
$response = '';
$status = false;
switch ( $current_action ) {
case 'save_design':
if ( true === BWFCRM_Core()->campaigns->save_editor_content( $broadcast_id, $content_number, $design, $html ) ) {
$status = true;
$response = 'Content Saved';
}
break;
case 'get_design':
$design = BWFCRM_Core()->campaigns->get_editor_design( $broadcast_id, $content_number );
if ( ! empty( $design ) ) {
$status = true;
wp_send_json( array(
'message' => $response,
'status' => $status,
'design_data' => $design,
) );
} else {
$response = 'Content empty or not found';
}
break;
case 'upload_media':
$url = $this->upload_media();
if ( ! empty( $url ) ) {
$status = true;
wp_send_json( array(
'message' => $response,
'status' => $status,
'file' => $url,
) );
} else {
$response = 'Unable to upload the media';
}
break;
case 'send_test_email':
$result = BWFCRM_Core()->conversation->send_test_email( array(
'subject' => $subject,
'body' => $html,
'email' => $email,
) );
if ( ! empty( $result ) ) {
$status = true;
wp_send_json( array(
'message' => $response,
'status' => $status,
) );
}
break;
}
if ( empty( $response ) ) {
wp_send_json_error( array( 'error' => 'Error while completing the action' ) );
}
wp_send_json( array(
'message' => $response,
'status' => $status,
) );
}
public function get_security_token() {
return get_option( 'bwfan_u_key', '' );
}
public function get_editor_localize_settings() {
return array(
'license' => BWFAN_Pro_Common::encrypt_32_bit_string( BWFAN_Common::get_pro_license() ),
'editor_nonce' => $this->get_security_token(),
'url' => urlencode( site_url() ),
);
}
function upload_media( $image = '' ) {
if ( ! isset( $_FILES['file'] ) && empty( $image ) ) {
return false;
}
$image_to_upload = isset( $_FILES['file'] ) ? $_FILES['file'] : $image;
require_once ABSPATH . '/wp-admin/includes/plugin.php';
require_once ABSPATH . '/wp-admin/includes/media.php';
require_once ABSPATH . '/wp-admin/includes/file.php';
require_once ABSPATH . '/wp-admin/includes/image.php';
$id = media_handle_sideload( $image_to_upload );
/**
* We don't want to pass something to $id
* if there were upload errors.
* So this checks for errors
*/
if ( is_wp_error( $id ) ) {
return false;
}
$value = wp_get_attachment_url( $id );
return empty( $value ) ? false : $value;
}
public function add_drag_n_drop_editor() {
include_once BWFAN_PRO_PLUGIN_DIR . '/admin/views/bwfan-wp-send-email-editor.php';
}
public function add_drag_n_drop_editor_iframe() {
include_once BWFAN_PRO_PLUGIN_DIR . '/admin/views/bwfan-wp-send-email-editor-script.php';
}
}
if ( class_exists( 'BWFCRM_Email_Editor_Controller' ) ) {
BWFCRM_Core::register( 'email_editor', 'BWFCRM_Email_Editor_Controller' );
}