sanitize_key( $method['id'] ), 'label' => sanitize_text_field( $method['label'] ), 'type' => sanitize_key( $method['type'] ), 'fields' => array(), 'instructions' => wp_kses_post( $method['instructions'] ?? '' ), 'qr_attachment_id' => isset( $method['qr_attachment_id'] ) ? absint( $method['qr_attachment_id'] ) : 0, 'copy_fields' => isset( $method['copy_fields'] ) && is_array( $method['copy_fields'] ) ? array_map( 'sanitize_key', $method['copy_fields'] ) : array(), ); // Sanitize fields based on type. if ( isset( $method['fields'] ) && is_array( $method['fields'] ) ) { $sanitized['fields'] = self::sanitize_fields( $method['type'], $method['fields'] ); } return $sanitized; } /** * Sanitize fields based on type. * * @param string $type Method type. * @param array $fields Fields data. * @return array */ private static function sanitize_fields( $type, $fields ) { $sanitized = array(); switch ( $type ) { case 'bank': $sanitized = array( 'bank_name' => sanitize_text_field( $fields['bank_name'] ?? '' ), 'account_name' => sanitize_text_field( $fields['account_name'] ?? '' ), 'account_number' => sanitize_text_field( $fields['account_number'] ?? '' ), 'sort_code' => sanitize_text_field( $fields['sort_code'] ?? '' ), 'iban' => sanitize_text_field( $fields['iban'] ?? '' ), 'swift' => sanitize_text_field( $fields['swift'] ?? '' ), 'routing_number' => sanitize_text_field( $fields['routing_number'] ?? '' ), ); break; case 'paypal': $sanitized = array( 'email' => sanitize_email( $fields['email'] ?? '' ), ); break; case 'zelle': $sanitized = array( 'email' => sanitize_email( $fields['email'] ?? '' ), 'phone' => sanitize_text_field( $fields['phone'] ?? '' ), ); break; case 'crypto': $sanitized = array( 'wallet_address' => sanitize_text_field( $fields['wallet_address'] ?? '' ), 'network' => sanitize_text_field( $fields['network'] ?? '' ), 'currency' => sanitize_text_field( $fields['currency'] ?? '' ), ); break; case 'custom': // Custom fields as key-value pairs. $sanitized = array(); if ( is_array( $fields ) ) { foreach ( $fields as $key => $value ) { $sanitized[ sanitize_key( $key ) ] = sanitize_text_field( $value ); } } break; } return $sanitized; } /** * Get method types. * * @return array */ public static function get_types() { return array( 'bank' => __( 'Bank Transfer', 'afridirect-payment' ), 'paypal' => __( 'PayPal', 'afridirect-payment' ), 'zelle' => __( 'Zelle', 'afridirect-payment' ), 'crypto' => __( 'Cryptocurrency', 'afridirect-payment' ), 'custom' => __( 'Custom', 'afridirect-payment' ), ); } /** * Get field labels for a type. * * @param string $type Method type. * @return array */ public static function get_field_labels( $type ) { $labels = array( 'bank' => array( 'bank_name' => __( 'Bank Name', 'afridirect-payment' ), 'account_name' => __( 'Account Name', 'afridirect-payment' ), 'account_number' => __( 'Account Number', 'afridirect-payment' ), 'sort_code' => __( 'Sort Code', 'afridirect-payment' ), 'iban' => __( 'IBAN', 'afridirect-payment' ), 'swift' => __( 'SWIFT/BIC', 'afridirect-payment' ), 'routing_number' => __( 'Routing Number', 'afridirect-payment' ), ), 'paypal' => array( 'email' => __( 'PayPal Email', 'afridirect-payment' ), ), 'zelle' => array( 'email' => __( 'Email', 'afridirect-payment' ), 'phone' => __( 'Phone Number', 'afridirect-payment' ), ), 'crypto' => array( 'wallet_address' => __( 'Wallet Address', 'afridirect-payment' ), 'network' => __( 'Network', 'afridirect-payment' ), 'currency' => __( 'Currency', 'afridirect-payment' ), ), ); return $labels[ $type ] ?? array(); } }