PluginProbe
WPBot – AI ChatBot for Live Support, Lead Generation, WordPress Automation, AI Services / 8.8.0
WPBot – AI ChatBot for Live Support, Lead Generation, WordPress Automation, AI Services v8.8.0
8.8.0 8.7.9 8.7.8 8.7.7 8.7.6 8.7.5 8.7.4 8.7.3 8.7.2 8.7.1 8.7.0 8.6.9 8.6.8 8.6.7 8.6.6 8.6.5 8.6.4 8.6.2 8.6.1 8.6.0 8.5.9 8.5.8 8.5.7 8.5.6 8.5.5 All 536 releases
chatbot / addons / automator / includes / actions / data_transformer_action.php

data_transformer_action.php in WPBot – AI ChatBot for Live Support, Lead Generation, WordPress Automation, AI Services 8.8.0, at addons/automator/includes/actions/data_transformer_action.php

137 lines 5.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Data Transformer Actions
4 *
5 * @package WPbot_Automator
6 */
7
8 namespace WPbot_Automator\Actions;
9
10 if ( ! defined( 'ABSPATH' ) ) {
11 exit;
12 }
13 // File: includes/class-dts-transformer.php
14
15 class Data_Transformer extends Action {
16
17 public function __construct() {
18 $this->id = 'data_transformer';
19 $this->group = __( 'Data Transformer', 'wpbot-automator' );
20 }
21
22 public function execute( $action_data, $trigger_data ) {
23 $action_id = $action_data['actionId'] ?? '';
24
25 if ( empty( $action_id ) ) {
26 return false;
27 }
28
29 $config_values = $action_data['config'] ?? [];
30 $value = $this->parse_tokens( $config_values['value'] ?? '', $trigger_data );
31 $secret = $this->parse_tokens( $config_values['secret'] ?? '', $trigger_data );
32
33 return Data_Transformer::run( $action_id, $value, [ 'secret' => $secret ] );
34 }
35
36 /**
37 * Run a transformation action on a value.
38 *
39 * @param string $action One of the supported action slugs.
40 * @param string $value The input string.
41 * @param array $options Extra options (e.g. secret key for HMAC).
42 * @return array { success: bool, output: string, error: string }
43 */
44 public static function run( string $action, string $value, array $options = [] ): array {
45 try {
46 $output = match( $action ) {
47 'html_encode' => htmlspecialchars( $value, ENT_QUOTES | ENT_HTML5, 'UTF-8' ),
48 'html_decode' => htmlspecialchars_decode( $value, ENT_QUOTES | ENT_HTML5 ),
49 'base64_encode' => base64_encode( $value ),
50 'base64_decode' => self::safe_base64_decode( $value ),
51 'sha256' => hash( 'sha256', $value ),
52 'sha1' => hash( 'sha1', $value ),
53 'sha512' => hash( 'sha512', $value ),
54 'hmac_sha256' => hash_hmac( 'sha256', $value, $options['secret'] ?? '' ),
55 'md5' => md5( $value ),
56 'strip_tags' => wp_strip_all_tags( $value ),
57 default => throw new InvalidArgumentException( "Unknown action: {$action}" ),
58 };
59
60 return [ 'success' => true, 'output' => $output, 'error' => '' ];
61
62 } catch ( Throwable $e ) {
63 return [ 'success' => false, 'output' => '', 'error' => $e->getMessage() ];
64 }
65 }
66
67 private static function safe_base64_decode( string $value ): string {
68 $decoded = base64_decode( $value, true );
69 if ( $decoded === false ) {
70 throw new RuntimeException( 'Invalid Base64 string.' );
71 }
72 return $decoded;
73 }
74
75 // File: qcld_wpbot_autometor
76
77 public static function register(): void {
78 add_action( 'rest_api_init', [ __CLASS__, 'register_routes' ] );
79 }
80
81 public static function register_routes(): void {
82 register_rest_route( 'qwautomator/v1', '/transform', [
83 'methods' => 'POST',
84 'callback' => [ __CLASS__, 'handle' ],
85 'permission_callback' => [ __CLASS__, 'auth' ],
86 'args' => [
87 'action' => [ 'required' => true, 'type' => 'string' ],
88 'value' => [ 'required' => true, 'type' => 'string' ],
89 'secret' => [ 'required' => false, 'type' => 'string', 'default' => '' ],
90 ],
91 ] );
92 }
93
94 public static function handle( WP_REST_Request $req ): WP_REST_Response {
95 $result = Data_Transformer::run(
96 $req->get_param( 'action' ),
97 $req->get_param( 'value' ),
98 [ 'secret' => $req->get_param( 'secret' ) ]
99 );
100
101 $status = $result['success'] ? 200 : 422;
102 return new WP_REST_Response( $result, $status );
103 }
104
105 public static function auth(): bool {
106 return current_user_can( 'manage_options' )
107 || self::valid_api_key();
108 }
109
110 private static function valid_api_key(): bool {
111 $key = get_option( 'dts_api_key' );
112 $header = sanitize_text_field( $_SERVER['HTTP_X_DTS_KEY'] ?? '' );
113 return $key && hash_equals( $key, $header );
114 }
115 }
116 // File: includes/class-dts-workflow-step.php
117
118 // Use this when your workflow engine fires an action with step data.
119
120 add_filter( 'wpbot_automator_execute_step', function( array $step_result, array $step_config ) {
121 if ( ( $step_config['type'] ?? '' ) !== 'data_transformer' ) {
122 return $step_result;
123 }
124
125 $action = $step_config['action'] ?? '';
126 // Resolve dynamic variable from previous step output
127 $value = dts_resolve_variable( $step_config['value'], $step_result['context'] );
128 $secret = dts_resolve_variable( $step_config['secret'] ?? '', $step_result['context'] );
129
130 $result = Data_Transformer::run( $action, $value, compact( 'secret' ) );
131
132 $step_result['output'] = $result['output'];
133 $step_result['success'] = $result['success'];
134 $step_result['error'] = $result['error'];
135
136 return $step_result;
137 }, 10, 2 );