get_items() as $item ) { $items[] = $item->get_name(); } $modified = $order->get_date_modified(); $created = $order->get_date_created(); $event = RootCue_Payload::order_event( array( 'id' => $order->get_id(), 'number' => $order->get_order_number(), 'status' => $order->get_status(), 'total' => $order->get_total(), 'currency' => $order->get_currency(), 'decimals' => function_exists( 'wc_get_price_decimals' ) ? wc_get_price_decimals() : 2, 'customer_id' => $order->get_customer_id(), 'first_name' => $order->get_billing_first_name(), 'last_name' => $order->get_billing_last_name(), 'company' => $order->get_billing_company(), 'phone' => $order->get_billing_phone(), 'email' => $order->get_billing_email(), 'created_at' => $created ? $created->getTimestamp() : null, 'modified_at' => $modified ? $modified->getTimestamp() : null, 'items' => $items, ), RootCue_Settings::site_key(), get_bloginfo( 'name' ) ); if ( $event ) { RootCue_Client::queue( $event ); } } /** Contact Form 7: uses the usual field names; site owners can adapt with the rootcue_cf7_fields filter. */ public static function cf7_submitted( $form, $result = array() ): void { if ( ! class_exists( 'WPCF7_Submission' ) ) { return; } // Only real enquiries: skip spam, invalid and aborted submissions. $status = is_array( $result ) ? (string) ( $result['status'] ?? '' ) : ''; if ( ! in_array( $status, array( 'mail_sent', 'mail_failed' ), true ) ) { return; } $submission = WPCF7_Submission::get_instance(); if ( ! $submission ) { return; } $data = (array) $submission->get_posted_data(); $fields = apply_filters( 'rootcue_cf7_fields', array( 'name' => array( 'your-name', 'name', 'full-name' ), 'phone' => array( 'your-phone', 'phone', 'tel', 'mobile', 'your-tel' ), 'email' => array( 'your-email', 'email' ), 'message' => array( 'your-message', 'message', 'your-subject' ), ), $form ); self::send_lead( array( 'form_id' => 'cf7-' . ( is_object( $form ) && method_exists( $form, 'id' ) ? $form->id() : '0' ), 'entry_id' => substr( hash( 'sha256', wp_json_encode( $data ) . microtime() ), 0, 16 ), 'name' => self::first( $data, $fields['name'] ), 'phone' => self::first( $data, $fields['phone'] ), 'email' => self::first( $data, $fields['email'] ), 'message' => self::first( $data, $fields['message'] ), 'submitted_at' => time(), ) ); } /** WPForms: detects fields by type. */ public static function wpforms_submitted( $fields, $entry, $form_data, $entry_id ): void { $lead = array( 'form_id' => 'wpforms-' . ( $form_data['id'] ?? '0' ), 'entry_id' => $entry_id ? (string) $entry_id : substr( hash( 'sha256', wp_json_encode( $fields ) . microtime() ), 0, 16 ), 'submitted_at' => time(), ); foreach ( (array) $fields as $f ) { $type = $f['type'] ?? ''; if ( 'name' === $type && empty( $lead['name'] ) ) { $lead['name'] = $f['value'] ?? ''; } elseif ( 'phone' === $type && empty( $lead['phone'] ) ) { $lead['phone'] = $f['value'] ?? ''; } elseif ( 'email' === $type && empty( $lead['email'] ) ) { $lead['email'] = $f['value'] ?? ''; } elseif ( 'textarea' === $type && empty( $lead['message'] ) ) { $lead['message'] = $f['value'] ?? ''; } } self::send_lead( $lead ); } /** Gravity Forms: detects fields by type. */ public static function gravity_submitted( $entry, $form ): void { $lead = array( 'form_id' => 'gf-' . ( $form['id'] ?? '0' ), 'entry_id' => (string) ( $entry['id'] ?? '' ), 'submitted_at' => time(), ); foreach ( (array) ( $form['fields'] ?? array() ) as $field ) { $type = is_object( $field ) ? $field->type : ( $field['type'] ?? '' ); $id = is_object( $field ) ? $field->id : ( $field['id'] ?? '' ); if ( 'name' === $type && empty( $lead['name'] ) ) { $lead['name'] = trim( ( $entry[ $id . '.3' ] ?? '' ) . ' ' . ( $entry[ $id . '.6' ] ?? '' ) ); } elseif ( 'phone' === $type && empty( $lead['phone'] ) ) { $lead['phone'] = $entry[ $id ] ?? ''; } elseif ( 'email' === $type && empty( $lead['email'] ) ) { $lead['email'] = $entry[ $id ] ?? ''; } elseif ( 'textarea' === $type && empty( $lead['message'] ) ) { $lead['message'] = $entry[ $id ] ?? ''; } } self::send_lead( $lead ); } private static function send_lead( array $lead ): void { $event = RootCue_Payload::lead_event( $lead, RootCue_Settings::site_key(), get_bloginfo( 'name' ) ); if ( $event ) { RootCue_Client::queue( $event ); } } private static function first( array $data, array $keys ): string { foreach ( $keys as $k ) { if ( isset( $data[ $k ] ) && '' !== $data[ $k ] ) { return is_array( $data[ $k ] ) ? implode( ' ', $data[ $k ] ) : (string) $data[ $k ]; } } return ''; } }