9243-45-SR
Showing the single result
Showing the single result
'count' => count( $results ), 'queue' => $results, ) ); } function ebp_quote_bridge_request_ids( WP_REST_Request $request ) { $form_id = absint( $request->get_param( 'form_id' ) ); $submission_id = absint( $request->get_param( 'submission_id' ) ); if ( ! ebp_quote_bridge_is_supported_form( $form_id ) ) { return new WP_Error( 'unsupported_form', 'Unsupported form ID.', array( 'status' => 400 ) ); } if ( ! $submission_id ) { return new WP_Error( 'invalid_submission', 'Invalid submission ID.', array( 'status' => 400 ) ); } return array( $form_id, $submission_id ); } function ebp_quote_bridge_claim( WP_REST_Request $request ) { $ids = ebp_quote_bridge_request_ids( $request ); if ( is_wp_error( $ids ) ) { return $ids; } list( $form_id, $submission_id ) = $ids; if ( ebp_quote_bridge_get_export_record( $form_id, $submission_id ) ) { return new WP_Error( 'already_exported', 'Submission is already exported.', array( 'status' => 409 ) ); } $claim_name = ebp_quote_bridge_claim_option_name( $form_id, $submission_id ); $existing = ebp_quote_bridge_get_active_claim( $form_id, $submission_id ); if ( is_array( $existing ) ) { return new WP_Error( 'already_claimed', 'Submission is already claimed by another bridge session.', array( 'status' => 409 ) ); } $token = wp_generate_password( 40, false, false ); $user = wp_get_current_user(); $record = array( 'token' => $token, 'created' => time(), 'user_id' => get_current_user_id(), 'user' => $user ? $user->user_login : '', ); if ( ! add_option( $claim_name, $record, '', false ) ) { return new WP_Error( 'claim_conflict', 'Unable to claim submission because another request claimed it first.', array( 'status' => 409 ) ); } return rest_ensure_response( array( 'ok' => true, 'token' => $token, 'message' => 'Submission claimed.', ) ); } function ebp_quote_bridge_complete( WP_REST_Request $request ) { $ids = ebp_quote_bridge_request_ids( $request ); if ( is_wp_error( $ids ) ) { return $ids; } list( $form_id, $submission_id ) = $ids; $token = (string) $request->get_param( 'token' ); $evo_quote = absint( $request->get_param( 'evo_quote' ) ); $evo_customer = sanitize_text_field( (string) $request->get_param( 'evo_customer' ) ); if ( $token === '' || ! $evo_quote || $evo_customer === '' ) { return new WP_Error( 'invalid_complete', 'Token, EVO quote number, and EVO customer are required.', array( 'status' => 400 ) ); } $claim_name = ebp_quote_bridge_claim_option_name( $form_id, $submission_id ); $claim = ebp_quote_bridge_get_active_claim( $form_id, $submission_id ); if ( ! is_array( $claim ) || ! isset( $claim['token'] ) || ! hash_equals( (string) $claim['token'], $token ) ) { return new WP_Error( 'claim_mismatch', 'The claim token is missing, expired, or does not match.', array( 'status' => 409 ) ); } $user = wp_get_current_user(); $record = array( 'evo_quote' => $evo_quote, 'evo_customer' => $evo_customer, 'exported_at' => current_time( 'mysql' ), 'exported_by' => $user ? $user->user_login : '', ); update_option( ebp_quote_bridge_export_option_name( $form_id, $submission_id ), $record, false ); delete_option( $claim_name ); return rest_ensure_response( array( 'ok' => true, 'message' => 'Submission marked exported.', ) ); } function ebp_quote_bridge_release( WP_REST_Request $request ) { $ids = ebp_quote_bridge_request_ids( $request ); if ( is_wp_error( $ids ) ) { return $ids; } list( $form_id, $submission_id ) = $ids; $token = (string) $request->get_param( 'token' ); $claim_name = ebp_quote_bridge_claim_option_name( $form_id, $submission_id ); $claim = ebp_quote_bridge_get_active_claim( $form_id, $submission_id ); if ( ! is_array( $claim ) ) { return rest_ensure_response( array( 'ok' => true, 'message' => 'No active claim remained.' ) ); } if ( ! isset( $claim['token'] ) || ! hash_equals( (string) $claim['token'], $token ) ) { return new WP_Error( 'claim_mismatch', 'The claim token does not match.', array( 'status' => 409 ) ); } delete_option( $claim_name ); return rest_ensure_response( array( 'ok' => true, 'message' => 'Claim released.' ) ); }
Showing the single result
Showing the single result