get_view_order(); if ( false === $order ) { return; } $can_view = false; if ( current_user_can( ADMIN_ROLE ) ) { $can_view = true; } elseif ( (int) $order->get_user_id() === get_current_user_id() ) { $can_view = true; } if ( ! $can_view ) { return; } if ( ! isset( $order ) ) { echo esc_html__( 'Invalid order', 'learnpress' ); return; } $args = array( 'id_url' => 'lp-profile-view-order-details', 'order_id' => $order->get_id(), 'paged' => 1, ); $call_back = array( 'class' => self::class, 'method' => 'render_order_details', ); echo TemplateAJAX::load_content_via_ajax( $args, $call_back ); } /** * Allow callback for AJAX. * * @use self::render_order_details * * @param array $callbacks * * @return array */ public function allow_callback( array $callbacks ): array { $callbacks[] = get_class( $this ) . ':render_order_details'; return $callbacks; } /** * Render order details content via AJAX. * * @param array $args * * @return stdClass * @since 4.3.2 * @version 1.0.1 */ public static function render_order_details( array $args ): stdClass { $content = new stdClass(); $order_id = $args['order_id'] ?? 0; $paged = $args['paged'] ?? 1; $can_view = false; $user_id = get_current_user_id(); if ( current_user_can( UserModel::ROLE_ADMINISTRATOR ) ) { $can_view = true; } else { $order = learn_press_get_order( $order_id ); if ( $order && (int) $order->get_user_id() === $user_id ) { $can_view = true; } } if ( ! $can_view ) { return $content; } $limit = 10; $lp_order_db = LP_Order_DB::getInstance(); $filter = new LP_Filter(); $filter->limit = $limit; $filter->page = $paged; $total_row = 0; $items = $lp_order_db->get_items( $filter, $order_id, $total_row ); $html_items = ''; $order = learn_press_get_order( $order_id ); if ( empty( $items ) ) { $html_items = sprintf( '
%s %s
', esc_html__( 'Order key:', 'learnpress' ), esc_html( $order->get_order_key() ) ), 'order_status' => sprintf( '%s %s
', esc_html__( 'Order status:', 'learnpress' ), esc_attr( $order->get_status() ), wp_kses_post( $order->get_order_status_html() ) ), 'refund_request_status' => self::refund_request_status_html( $order ), 'refund_note' => self::refund_note_html( $order ), ); return Template::combine_components( $section ); } /** * HTML for refund request status in order detail page. * * @param LP_Order $order * * @return string * @since 4.3.9 * @version 1.0.0 */ public static function refund_request_status_html( $order ): string { $refund_request_status = $order->get_refund_request(); if ( empty( $refund_request_status ) ) { return ''; } $status_labels = array( 'pending' => __( 'Pending', 'learnpress' ), 'rejected' => __( 'Rejected', 'learnpress' ), 'approved' => __( 'Accepted', 'learnpress' ), 'auto-approved' => __( 'Accepted', 'learnpress' ), ); $status_label = $status_labels[ $refund_request_status ] ?? ucwords( str_replace( '-', ' ', $refund_request_status ) ); $html_status = sprintf( '%s %s
', esc_html__( 'Refund request:', 'learnpress' ), esc_attr( $refund_request_status ), esc_html( $status_label ) ); $currency_symbol = learn_press_get_currency_symbol( $order->get_currency() ); $refunded_amount = (float) $order->get_meta( LP_Order::META_KEY_REFUNDED_AMOUNT ); $html_amount = ''; if ( $refunded_amount > 0 ) { $refunded_amount = learn_press_format_price( $refunded_amount, $currency_symbol ); $html_amount = sprintf( '%s %s
', esc_html__( 'Refund amount:', 'learnpress' ), esc_html( $refunded_amount ) ); } return Template::combine_components( [ 'status' => $html_status, 'amount' => $html_amount, ] ); } /** * HTML for refund note in order detail page. * * @param LP_Order $order * * @return string * @since 4.3.9 * @version 1.0.0 */ public static function refund_note_html( $order ): string { $refund_note = trim( (string) get_post_meta( $order->get_id(), '_lp_refund_note', true ) ); if ( empty( $refund_note ) ) { return ''; } return sprintf( '%s %s
', esc_html__( 'Refund note:', 'learnpress' ), nl2br( esc_html( $refund_note ) ) ); } }