2022-11-27 15:03:07 +00:00
< ? php
/**
* Order Details / Add New Order Sections
*
* @ package EDD
* @ subpackage Admin / Orders
* @ copyright Copyright ( c ) 2018 , Easy Digital Downloads , LLC
* @ license http :// opensource . org / licenses / gpl - 2.0 . php GNU Public License
* @ since 3.0
*/
// Exit if accessed directly
defined ( 'ABSPATH' ) || exit ;
/** Publishing ******************************************************************/
/**
* Outputs publishing actions .
*
* UI is modelled off block - editor header region .
*
* @ since 3.0
*
* @ param EDD\Orders\Order $order Current order .
*/
function edd_order_details_publish ( $order ) {
$action_name = edd_is_add_order_page ()
? __ ( 'Create Order' , 'easy-digital-downloads' )
: __ ( 'Save Order' , 'easy-digital-downloads' )
?>
< div class = " edit-post-editor-regions__header " >
< div class = " edit-post-header " >
< div class = " edit-post-header__settings " >
< ? php if ( edd_is_add_order_page () ) : ?>
< div class = " edd-send-purchase-receipt " >
< div class = " edd-form-group " >
< div class = " edd-form-group__control " >
< input type = " checkbox " name = " edd_order_send_receipt " id = " edd-order-send-receipt " class = " edd-form-group__input " value = " 1 " checked />
< label for = " edd-order-send-receipt " >
< ? php esc_html_e ( 'Send Purchase Receipt' , 'easy-digital-downloads' ); ?>
</ label >
< span alt = " f223 " class = " edd-help-tip dashicons dashicons-editor-help " title = " <?php esc_attr_e( 'Checking this box will email the purchase receipt to the selected customer.', 'easy-digital-downloads' ); ?> " ></ span >
</ div >
</ div >
</ div >
< ? php endif ; ?>
< div id = " publishing-action " >
< span class = " spinner " ></ span >
< input
type = " submit "
id = " edd-order-submit "
class = " button button-primary right "
value = " <?php echo esc_html( $action_name ); ?> "
< ? php if ( ! edd_is_add_order_page () ) : ?>
autofocus
< ? php endif ; ?>
/>
</ div >
</ div >
< div class = " edit-post-header__toolbar " >
</ div >
</ div >
</ div >
< ? php
}
/** Sections ******************************************************************/
/**
* Contains code to setup tabs & views using EDD\Admin\Order_Sections () .
*
* @ since 3.0
*
* @ param mixed $item
*/
function edd_order_sections ( $item = false ) {
// Instantiate the Sections class and sections array
$sections = new EDD\Admin\Order_Sections ();
// Setup sections variables
$sections -> use_js = true ;
$sections -> current_section = 'customer' ;
$sections -> item = $item ;
$sections -> base_url = '' ;
// Get all registered tabs & views
$o_sections = edd_get_order_details_sections ( $item );
// Set the customer sections
$sections -> set_sections ( $o_sections );
// Display the sections
$sections -> display ();
}
/**
* Return the order details sections .
*
* @ since 3.0
*
* @ param object $order
* @ return array Sections .
*/
function edd_get_order_details_sections ( $order ) {
$sections = array (
array (
'id' => 'customer' ,
'label' => __ ( 'Customer' , 'easy-digital-downloads' ),
'icon' => 'businessman' ,
'callback' => 'edd_order_details_customer' ,
),
array (
'id' => 'email' ,
'label' => __ ( 'Email' , 'easy-digital-downloads' ),
'icon' => 'email' ,
'callback' => 'edd_order_details_email' ,
),
array (
'id' => 'address' ,
'label' => __ ( 'Address' , 'easy-digital-downloads' ),
'icon' => 'admin-home' ,
'callback' => 'edd_order_details_addresses' ,
),
array (
'id' => 'notes' ,
'label' => __ ( 'Notes' , 'easy-digital-downloads' ),
'icon' => 'admin-comments' ,
'callback' => 'edd_order_details_notes' ,
),
array (
'id' => 'logs' ,
'label' => __ ( 'Logs' , 'easy-digital-downloads' ),
'icon' => 'admin-tools' ,
'callback' => 'edd_order_details_logs' ,
),
);
// Override sections if adding a new order.
if ( edd_is_add_order_page () ) {
$sections = array (
array (
'id' => 'customer' ,
'label' => __ ( 'Customer' , 'easy-digital-downloads' ),
'icon' => 'businessman' ,
'callback' => 'edd_order_details_customer' ,
),
array (
'id' => 'address' ,
'label' => __ ( 'Address' , 'easy-digital-downloads' ),
'icon' => 'admin-home' ,
'callback' => 'edd_order_details_addresses' ,
),
);
}
/**
* Filter the sections .
*
* @ since 3.0
*
* @ param array $sections Sections .
* @ param object $order Order object .
*/
return ( array ) apply_filters ( 'edd_get_order_details_sections' , $sections , $order );
}
/**
* Output the order details customer section
*
* @ since 3.0
*
* @ param object $order
*/
function edd_order_details_customer ( $order ) {
$customer = edd_get_customer ( $order -> customer_id );
$payment = edd_get_payment ( $order -> id );
$user_info = $payment
? $payment -> user_info
: array ();
$change_text = edd_is_add_order_page ()
? esc_html__ ( 'Assign' , 'easy-digital-downloads' )
: esc_html__ ( 'Switch Customer' , 'easy-digital-downloads' );
$customer_id = ! empty ( $customer )
? $customer -> id
: 0 ; ?>
< div >
< div class = " column-container order-customer-info " >
< div class = " column-container change-customer " >
< div class = " edd-form-group " >
< label for = " customer_id " class = " edd-form-group__label " >< ? php esc_html_e ( 'Assign to an existing customer' , 'easy-digital-downloads' ); ?> </label>
< div class = " edd-form-group__control " >
< ? php
echo EDD () -> html -> customer_dropdown (
array (
'class' => 'edd-payment-change-customer-input edd-form-group__input' ,
'selected' => $customer_id ,
'id' => 'customer-id' ,
'name' => 'customer-id' ,
'none_selected' => esc_html__ ( 'Search for a customer' , 'easy-digital-downloads' ),
'placeholder' => esc_html__ ( 'Search for a customer' , 'easy-digital-downloads' ),
)
); // WPCS: XSS ok.
?>
</ div >
</ div >
< input type = " hidden " name = " current-customer-id " value = " <?php echo esc_attr( $customer_id ); ?> " />
< ? php wp_nonce_field ( 'edd_customer_details_nonce' , 'edd_customer_details_nonce' ); ?>
</ div >
< div class = " customer-details-wrap " style = " display: <?php echo esc_attr( ! empty( $customer ) ? 'flex' : 'none' ); ?> " >
< div class = " avatar-wrap " id = " customer-avatar " >
< span class = " spinner is-active " ></ span >
</ div >
< div class = " customer-details " style = " display: none; " >
< strong class = " customer-name " ></ strong >
< em class = " customer-since " >
< ? php
echo wp_kses (
sprintf (
__ ( 'Customer since %s' , 'easy-digital-downloads' ), '<span>…</span>' ),
array (
'span' => true ,
)
);
?>
</ em >
< span class = " customer-record " >
< a href = " <?php echo esc_url( edd_get_admin_url( array( 'page' => 'edd-customers' ) ) ); ?> " >< ? php esc_html_e ( 'View customer record' , 'easy-digital-downloads' ); ?> </a>
</ span >
</ div >
</ div >
< p class = " description " >
or < button class = " edd-payment-new-customer button-link " >< ? php esc_html_e ( 'create a new customer' , 'easy-digital-downloads' ); ?> </button>
</ p >
</ div >
< div class = " column-container new-customer " style = " display: none " >
< p style = " margin-top: 0; " >
< input type = " hidden " id = " edd-new-customer " name = " edd-new-customer " value = " 0 " />
< button class = " edd-payment-new-customer-cancel button-link " >< ? php esc_html_e ( '← Use an existing customer' , 'easy-digital-downloads' ); ?> </button>
</ p >
< div class = " edd-form-group " >
< label class = " edd-form-group__label " for = " edd_new_customer_first_name " >
< ? php esc_html_e ( 'First Name' , 'easy-digital-downloads' ); ?>
</ label >
< div class = " edd-form-group__control " >
< input type = " text " id = " edd_new_customer_first_name " name = " edd-new-customer-first-name " value = " " class = " edd-form-group__input regular-text " />
</ div >
</ div >
< div class = " edd-form-group " >
< label class = " edd-form-group__label " for = " edd_new_customer_last_name " >
< ? php esc_html_e ( 'Last Name' , 'easy-digital-downloads' ); ?>
</ label >
< div class = " edd-form-group__control " >
< input type = " text " id = " edd_new_customer_last_name " name = " edd-new-customer-last-name " value = " " class = " edd-form-group__input regular-text " />
</ div >
</ div >
< div class = " edd-form-group " >
< label class = " edd-form-group__label " for = " edd_new_customer_email " >
< ? php esc_html_e ( 'Email' , 'easy-digital-downloads' ); ?>
</ label >
< div class = " edd-form-group__control " >
< input type = " email " id = " edd_new_customer_email " name = " edd-new-customer-email " value = " " class = " edd-form-group__input regular-text " />
</ div >
</ div >
</ div >
</ div >
< ? php
// The edd_payment_personal_details_list hook is left here for backwards compatibility
if ( ! edd_is_add_order_page () && $payment instanceof EDD_Payment ) {
do_action ( 'edd_payment_personal_details_list' , $payment -> get_meta (), $user_info );
}
do_action ( 'edd_payment_view_details' , $order -> id );
}
/**
* Output the order details email section
*
* @ since 3.0
*
* @ param object $order
*/
function edd_order_details_email ( $order ) {
$customer = edd_get_customer ( $order -> customer_id );
$all_emails = array ( 'primary' => $customer -> email );
2023-07-19 21:08:59 +00:00
if ( $customer -> email !== $order -> email ) {
$all_emails [ 'order' ] = $order -> email ;
}
2022-11-27 15:03:07 +00:00
foreach ( $customer -> emails as $key => $email ) {
if ( $customer -> email === $email ) {
continue ;
}
$all_emails [ $key ] = $email ;
}
2023-07-19 21:08:59 +00:00
$help = sprintf (
/* translators: email type */
__ ( 'Send a new copy of the purchase receipt to the %s email address. If download URLs were included in the original receipt, new ones will be included.' , 'easy-digital-downloads' ),
count ( $all_emails ) > 1 ? __ ( 'selected' , 'easy-digital-downloads' ) : __ ( 'customer' , 'easy-digital-downloads' )
);
$is_multiselect = count ( $all_emails ) > 1 ;
$label_text = $is_multiselect ? __ ( 'Send email receipt to' , 'easy-digital-downloads' ) : __ ( 'Email Address' , 'easy-digital-downloads' );
2022-11-27 15:03:07 +00:00
?>
< div >
2023-07-19 21:08:59 +00:00
< div class = " edd-form-group " >
< label class = " edd-form-group__label <?php echo esc_attr( ! $is_multiselect ? 'screen-reader-text' : '' ); ?> "
for = " edd-order-receipt-email "
>
< ? php echo esc_html ( $label_text ); ?>
</ label >
< div class = " edd-form-group__control " >
< ? php if ( $is_multiselect ) : ?>
< select class = " edd-form-group__input edd-order-resend-receipt-email " name = " edd-select-receipt-email " id = " edd-order-receipt-email " >
< ? php foreach ( $all_emails as $key => $email ) : ?>
< option
value = " <?php echo rawurlencode( sanitize_email( $email ) ); ?> "
< ? php selected ( 'primary' , $key ); ?>
>
< ? php
echo sprintf (
'%1$s (%2$s)' ,
esc_attr ( $email ),
esc_html (
$key === 'primary' ? __ ( 'Customer Primary' , 'easy-digital-downloads' ) :
(
$key === 'order' ? __ ( 'Order Email' , 'easy-digital-downloads' ) :
__ ( 'Customer Email' , 'easy-digital-downloads' )
)
)
);
?>
</ option >
< ? php endforeach ; ?>
</ select >
< ? php else : ?>
< input readonly type = " email " id = " edd-order-receipt-email " class = " edd-form-group__input regular-text " value = " <?php echo esc_attr( $order->email ); ?> " />
< ? php endif ; ?>
2022-11-27 15:03:07 +00:00
</ div >
2023-07-19 21:08:59 +00:00
< p class = " edd-form-group__help description " >
< ? php echo esc_html ( $help ); ?>
</ p >
</ div >
2022-11-27 15:03:07 +00:00
< p >
< a href = " <?php echo esc_url( add_query_arg( array(
'edd-action' => 'email_links' ,
'purchase_id' => absint ( $order -> id ),
2023-07-19 21:08:59 +00:00
) ) ); ?> " id="<?php echo esc_attr( 'edd-resend-receipt' ); ?>" class="button button-secondary"><?php esc_html_e( 'Resend Receipt', 'easy-digital-downloads' ); ?></a>
2022-11-27 15:03:07 +00:00
</ p >
< ? php do_action ( 'edd_view_order_details_resend_receipt_after' , $order -> id ); ?>
</ div >
< ? php
}
/**
* Output the order details addresses section
*
* @ since 3.0
*
* @ param object $order
*/
function edd_order_details_addresses ( $order ) {
$address = edd_is_add_order_page ()
? ( object ) array (
'id' => 0 ,
'order_id' => 0 ,
'first_name' => '' ,
'last_name' => '' ,
'address' => '' ,
'address2' => '' ,
'city' => '' ,
'region' => '' ,
'postal_code' => '' ,
'country' => '' ,
)
: $order -> get_address (); ?>
< div id = " edd-order-address " >
< ? php do_action ( 'edd_view_order_details_billing_before' , $order -> id ); ?>
< div class = " order-data-address " >
< h3 >< ? php esc_html_e ( 'Billing Address' , 'easy-digital-downloads' ); ?> </h3>
< div class = " customer-address-select-wrap edd-form-group " style = " display: none; padding: 16px 0; border-bottom: 1px solid #ccd0d4; " >
< label for = " edd_customer_existing_addresses " class = " edd-form-group__label " >< ? php esc_html_e ( 'Existing Address:' , 'easy-digital-downloads' ); ?> </label>
< div class = " edd-form-group__control " ></ div >
</ div >
< div class = " edd-form-group " >
< label for = " edd_order_address_address " class = " edd-form-group__label " >< ? php esc_html_e ( 'Line 1:' , 'easy-digital-downloads' ); ?> </label>
< div class = " edd-form-group__control " >
< input type = " text " name = " edd_order_address[address] " id = " edd_order_address_address " class = " edd-form-group__input regular-text " value = " <?php echo esc_attr( $address->address ); ?> " />
</ div >
</ div >
< div class = " edd-form-group " >
< label for = " edd_order_address_address2 " class = " edd-form-group__label " >< ? php esc_html_e ( 'Line 2:' , 'easy-digital-downloads' ); ?> </label>
< div class = " edd-form-group__control " >
< input type = " text " name = " edd_order_address[address2] " class = " edd-form-group__input regular-text " id = " edd_order_address_address2 " value = " <?php echo esc_attr( $address->address2 ); ?> " />
</ div >
</ div >
< div class = " edd-form-group " >
< label for = " edd_order_address_city " class = " edd-form-group__label " >< ? php echo esc_html_x ( 'City:' , 'Address City' , 'easy-digital-downloads' ); ?> </label>
< div class = " edd-form-group__control " >
< input type = " text " name = " edd_order_address[city] " class = " edd-form-group__input regular-text " id = " edd_order_address_city " value = " <?php echo esc_attr( $address->city ); ?> " />
</ div >
</ div >
< div class = " edd-form-group " >
< label for = " edd_order_address_postal_code " class = " edd-form-group__label " >< ? php echo esc_html_x ( 'Zip / Postal Code:' , 'Zip / Postal code of address' , 'easy-digital-downloads' ); ?> </label>
< div class = " edd-form-group__control " >
< input type = " text " name = " edd_order_address[postal_code] " class = " edd-form-group__input regular-text " id = " edd_order_address_postal_code " value = " <?php echo esc_attr( $address->postal_code ); ?> " class = " med-text " />
</ div >
</ div >
< div class = " edd-form-group " >
< label for = " edd_order_address_country " class = " edd-form-group__label " >< ? php echo esc_html_x ( 'Country:' , 'Address country' , 'easy-digital-downloads' ); ?> </label>
< div class = " edd-form-group__control " id = " edd-order-address-country-wrap " >
< ? php
echo EDD () -> html -> country_select (
array (
'name' => 'edd_order_address[country]' ,
'id' => 'edd-order-address-country' ,
'class' => 'edd-order-address-country edd-form-group__input' ,
'show_option_all' => false ,
'data' => array (
'nonce' => wp_create_nonce ( 'edd-country-field-nonce' ),
'search-type' => 'no_ajax' ,
'search-placeholder' => esc_html__ ( 'Search Countries' , 'easy-digital-downloads' ),
),
),
$address -> country
); // WPCS: XSS ok.
?>
</ div >
</ div >
< div class = " edd-form-group " >
< label for = " edd_order_address_region " class = " edd-form-group__label " >< ? php echo esc_html_x ( 'Region:' , 'Region of address' , 'easy-digital-downloads' ); ?> </label>
< div class = " edd-form-group__control " id = " edd-order-address-state-wrap " >
< ? php
$states = edd_get_shop_states ( $address -> country );
if ( ! empty ( $states ) ) {
echo EDD () -> html -> region_select (
array (
'name' => 'edd_order_address[region]' ,
'id' => 'edd_order_address_region' ,
'class' => 'edd-order-address-region edd-form-group__input' ,
'data' => array (
'search-type' => 'no_ajax' ,
'search-placeholder' => esc_html__ ( 'Search Regions' , 'easy-digital-downloads' ),
),
),
$address -> country ,
$address -> region
); // WPCS: XSS ok.
} else {
?>
< input type = " text " id = " edd_order_address_region " name = " edd_order_address[region] " class = " edd-form-group__input " value = " <?php echo esc_attr( $address->region ); ?> " />
< ? php
}
?>
</ div >
</ div >
< input type = " hidden " name = " edd_order_address[address_id] " value = " <?php echo esc_attr( $address->id ); ?> " />
< ? php wp_nonce_field ( 'edd_get_tax_rate_nonce' , 'edd_get_tax_rate_nonce' ); ?>
</ div >
</ div ><!-- / #edd-order-address -->
< ? php
do_action ( 'edd_payment_billing_details' , $order -> id );
}
/**
* Output the order details notes section
*
* @ since 3.0
*
* @ param object $order
*/
function edd_order_details_notes ( $order ) {
$notes = edd_get_payment_notes ( $order -> id ); ?>
< div >
< ? php echo edd_admin_get_notes_html ( $notes ); // WPCS: XSS ok. ?>
< ? php echo edd_admin_get_new_note_form ( $order -> id , 'order' ); // WPCS: XSS ok. ?>
</ div >
< ? php
}
/**
* Outputs the Order Details logs section .
*
* @ since 3.0
*
* @ param \EDD\Orders\Order $order
*/
function edd_order_details_logs ( $order ) {
?>
< div >
< ? php
/**
* Allows output before the list of logs .
*
* @ since 3.0 . 0
*
* @ param int $order_id ID of the current order .
*/
do_action ( 'edd_view_order_details_logs_before' , $order -> id );
$download_log_url = edd_get_admin_url (
array (
'page' => 'edd-tools' ,
'tab' => 'logs' ,
'payment' => absint ( $order -> id ),
)
);
$customer_log_url = edd_get_admin_url (
array (
'page' => 'edd-tools' ,
'tab' => 'logs' ,
'customer' => absint ( $order -> customer_id ),
)
);
$customer_orders_url = edd_get_admin_url (
array (
'page' => 'edd-payment-history' ,
'customer' => absint ( $order -> customer_id ),
)
);
?>
< p >< a href = " <?php echo esc_url( $download_log_url ); ?> " >< ? php esc_html_e ( 'File Download Log for Order' , 'easy-digital-downloads' ); ?> </a></p>
< p >< a href = " <?php echo esc_url( $customer_log_url ); ?> " >< ? php esc_html_e ( 'Customer Download Log' , 'easy-digital-downloads' ); ?> </a></p>
< p >< a href = " <?php echo esc_url( $customer_orders_url ); ?> " >< ? php esc_html_e ( 'Customer Orders' , 'easy-digital-downloads' ); ?> </a></p>
< ? php
/**
* Allows further output after the list of logs .
*
* @ since 3.0 . 0
*
* @ param int $order_id ID of the current order .
*/
do_action ( 'edd_view_order_details_logs_after' , $order -> id );
?>
</ div >
< ? php
}
/** Main **********************************************************************/
/**
* Output the order details items box
*
* @ since 3.0
*
* @ param object $order
*/
function edd_order_details_overview ( $order ) {
$_items = array ();
$_adjustments = array ();
$_refunds = array ();
if ( true !== edd_is_add_order_page () ) {
$items = edd_get_order_items ( array (
'order_id' => $order -> id ,
'number' => 999 ,
) );
foreach ( $items as $item ) {
$item_adjustments = array ();
$adjustments = edd_get_order_adjustments ( array (
'object_id' => $item -> id ,
'number' => 999 ,
'object_type' => 'order_item' ,
'type' => array (
'discount' ,
'credit' ,
'fee' ,
),
) );
foreach ( $adjustments as $adjustment ) {
// @todo edd_get_order_adjustment_to_json()?
$adjustment_args = array (
'id' => esc_html ( $adjustment -> id ),
'objectId' => esc_html ( $adjustment -> object_id ),
'objectType' => esc_html ( $adjustment -> object_type ),
'typeId' => esc_html ( $adjustment -> type_id ),
'type' => esc_html ( $adjustment -> type ),
'description' => esc_html ( $adjustment -> description ),
'subtotal' => esc_html ( $adjustment -> subtotal ),
'tax' => esc_html ( $adjustment -> tax ),
'total' => esc_html ( $adjustment -> total ),
'dateCreated' => esc_html ( $adjustment -> date_created ),
'dateModified' => esc_html ( $adjustment -> date_modified ),
'uuid' => esc_html ( $adjustment -> uuid ),
);
$item_adjustments [] = $adjustment_args ;
$_adjustments [] = $adjustment_args ;
}
// @todo edd_get_order_item_to_json()?
$_items [] = array (
'id' => esc_html ( $item -> id ),
'orderId' => esc_html ( $item -> order_id ),
'productId' => esc_html ( $item -> product_id ),
'productName' => esc_html ( $item -> get_order_item_name () ),
'priceId' => esc_html ( $item -> price_id ),
'cartIndex' => esc_html ( $item -> cart_index ),
'type' => esc_html ( $item -> type ),
'status' => esc_html ( $item -> status ),
'statusLabel' => esc_html ( edd_get_status_label ( $item -> status ) ),
'quantity' => esc_html ( $item -> quantity ),
'amount' => esc_html ( $item -> amount ),
'subtotal' => esc_html ( $item -> subtotal ),
'discount' => esc_html ( $item -> discount ),
'tax' => esc_html ( $item -> tax ),
'total' => esc_html ( $item -> total ),
'dateCreated' => esc_html ( $item -> date_created ),
'dateModified' => esc_html ( $item -> date_modified ),
'uuid' => esc_html ( $item -> uuid ),
'deliverable' => $item -> is_deliverable (),
'adjustments' => $item_adjustments ,
);
}
$adjustments = edd_get_order_adjustments ( array (
'object_id' => $order -> id ,
'number' => 999 ,
'object_type' => 'order' ,
'type' => array (
'discount' ,
'credit' ,
'fee' ,
),
) );
foreach ( $adjustments as $adjustment ) {
// @todo edd_get_order_adjustment_to_json()?
$_adjustments [] = array (
'id' => esc_html ( $adjustment -> id ),
'objectId' => esc_html ( $adjustment -> object_id ),
'objectType' => esc_html ( $adjustment -> object_type ),
'typeId' => esc_html ( $adjustment -> type_id ),
'type' => esc_html ( $adjustment -> type ),
'description' => esc_html ( $adjustment -> description ),
'subtotal' => esc_html ( $adjustment -> subtotal ),
'tax' => esc_html ( $adjustment -> tax ),
'total' => esc_html ( $adjustment -> total ),
'dateCreated' => esc_html ( $adjustment -> date_created ),
'dateModified' => esc_html ( $adjustment -> date_modified ),
'uuid' => esc_html ( $adjustment -> uuid ),
);
}
$refunds = edd_get_order_refunds ( $order -> id );
foreach ( $refunds as $refund ) {
$_refunds [] = array (
'id' => esc_html ( $refund -> id ),
'number' => esc_html ( $refund -> order_number ),
'total' => esc_html ( $refund -> total ),
'dateCreated' => esc_html ( $refund -> date_created ),
'dateCreatedi18n' => esc_html ( edd_date_i18n ( $refund -> date_created ) ),
'uuid' => esc_html ( $refund -> uuid ),
);
}
}
$has_tax = 'none' ;
$tax_rate = $order -> id ? $order -> get_tax_rate () : false ;
$location = array (
'rate' => $tax_rate ,
'country' => '' ,
'region' => '' ,
'inclusive' => edd_prices_include_tax (),
);
if ( edd_is_add_order_page () && edd_use_taxes () ) {
$default_rate = edd_get_tax_rate_by_location (
array (
'country' => '' ,
'region' => '' ,
)
);
if ( $default_rate ) {
$location [ 'rate' ] = floatval ( $default_rate -> amount );
}
$has_tax = $location ;
} elseif ( $tax_rate ) {
$has_tax = $location ;
$has_tax [ 'rate' ] = $tax_rate ;
if ( $order -> tax_rate_id ) {
$tax_rate_object = $order -> get_tax_rate_object ();
if ( $tax_rate_object ) {
$has_tax [ 'country' ] = $tax_rate_object -> name ;
$has_tax [ 'region' ] = $tax_rate_object -> description ;
}
}
}
$has_quantity = true ;
if ( edd_is_add_order_page () && ! edd_item_quantities_enabled () ) {
$has_quantity = false ;
}
wp_localize_script (
'edd-admin-orders' ,
'eddAdminOrderOverview' ,
array (
'items' => $_items ,
'adjustments' => $_adjustments ,
'refunds' => $_refunds ,
'isAdding' => true === edd_is_add_order_page (),
'hasQuantity' => $has_quantity ,
'hasTax' => $has_tax ,
'hasDiscounts' => true === edd_has_active_discounts (),
'order' => array (
'status' => $order -> status ,
'currency' => $order -> currency ,
'currencySymbol' => html_entity_decode ( edd_currency_symbol ( $order -> currency ) ),
'subtotal' => $order -> subtotal ,
'discount' => $order -> discount ,
'tax' => $order -> tax ,
'total' => $order -> total ,
),
'nonces' => array (
'edd_admin_order_get_item_amounts' => wp_create_nonce ( 'edd_admin_order_get_item_amounts' ),
),
'i18n' => array (
'closeText' => esc_html__ ( 'Close' , 'easy-digital-downloads' ),
),
)
);
$templates = array (
'actions' ,
'subtotal' ,
'tax' ,
'total' ,
'item' ,
'adjustment' ,
'adjustment-discount' ,
'refund' ,
'no-items' ,
'copy-download-link' ,
'form-add-order-item' ,
'form-add-order-discount' ,
'form-add-order-adjustment' ,
);
foreach ( $templates as $tmpl ) {
echo '<script type="text/html" id="tmpl-edd-admin-order-' . esc_attr ( $tmpl ) . '">' ;
require_once EDD_PLUGIN_DIR . 'includes/admin/views/tmpl-order-' . $tmpl . '.php' ;
echo '</script>' ;
}
?>
< div id = " edd-order-overview " class = " postbox edd-edit-purchase-element edd-order-overview " >
< table id = " edd-order-overview-summary " class = " widefat wp-list-table edd-order-overview-summary " >
< thead >
< tr >
< th class = " column-name column-primary " >< ? php echo esc_html ( edd_get_label_singular () ); ?> </th>
< th class = " column-amount " >< ? php esc_html_e ( 'Unit Price' , 'easy-digital-downloads' ); ?> </th>
< ? php if ( $has_quantity ) : ?>
< th class = " column-quantity " >< ? php esc_html_e ( 'Quantity' , 'easy-digital-downloads' ); ?> </th>
< ? php endif ; ?>
< th class = " column-subtotal column-right " >< ? php esc_html_e ( 'Amount' , 'easy-digital-downloads' ); ?> </th>
</ tr >
</ thead >
</ table >
< div id = " edd-order-overview-actions " class = " edd-order-overview-actions inside " ></ div >
</ div >
< ? php
/**
* @ since unknown
*/
do_action ( 'edd_view_order_details_files_after' , $order -> id );
}
/**
* Output the order details sections box
*
* @ since 3.0
*
* @ param object $order
*/
function edd_order_details_sections ( $order ) {
?>
< div id = " edd-customer-details " class = " postbox " >
< h2 class = " hndle " >
< span >< ? php esc_html_e ( 'Order Details' , 'easy-digital-downloads' ); ?> </span>
</ h2 >
< ? php edd_order_sections ( $order ); ?>
</ div >
< ? php
}
/** Sidebar *******************************************************************/
/**
* Output the order details extras box
*
* @ since 3.0
*
* @ param object $order
*/
function edd_order_details_extras ( $order = false ) {
$transaction_id = ! empty ( $order -> id )
? $order -> get_transaction_id ()
: '' ;
$unlimited = ! empty ( $order -> id )
? $order -> has_unlimited_downloads ()
: false ;
$readonly = ! empty ( $order -> id )
? 'readonly'
: '' ;
// Setup gateway list.
if ( empty ( $order -> id ) ) {
$known_gateways = edd_get_payment_gateways ();
$gateways = array ();
foreach ( $known_gateways as $id => $data ) {
$gateways [ $id ] = esc_html ( $data [ 'admin_label' ] );
}
}
// Filter the transaction ID (here specifically for back-compat)
if ( ! empty ( $transaction_id ) ) {
$transaction_id = apply_filters ( 'edd_payment_details_transaction_id-' . $order -> gateway , $transaction_id , $order -> id );
} ?>
< div id = " edd-order-extras " class = " postbox edd-order-data " >
< h2 class = " hndle " >
< span >< ? php esc_html_e ( 'Order Extras' , 'easy-digital-downloads' ); ?> </span>
</ h2 >
< div class = " inside " >
< div class = " edd-admin-box " >
< ? php do_action ( 'edd_view_order_details_payment_meta_before' , $order -> id ); ?>
< ? php if ( ! edd_is_add_order_page () ) : ?>
< div class = " edd-order-gateway edd-admin-box-inside edd-admin-box-inside--row " >
< span class = " label " >< ? php esc_html_e ( 'Gateway' , 'easy-digital-downloads' ); ?> </span>
< span class = " value " >< ? php echo edd_get_gateway_admin_label ( $order -> gateway ); ?> </span>
</ div >
< ? php else : ?>
< div class = " edd-order-gateway edd-admin-box-inside " >
< div class = " edd-form-group " >
< label for = " edd_gateway_select " class = " edd-form-group__label " >< ? php esc_html_e ( 'Gateway' , 'easy-digital-downloads' ); ?> </label>
< div class = " edd-form-group__control " >
< ? php
echo EDD () -> html -> select (
array (
'name' => 'gateway' ,
'class' => 'edd-form-group__input' ,
'id' => 'edd_gateway_select' ,
'options' => $gateways ,
'selected' => 'manual' ,
'show_option_none' => false ,
'show_option_all' => false ,
)
); // WPCS: XSS ok.
?>
</ div >
</ div >
</ div >
< ? php endif ; ?>
< div class = " edd-admin-box-inside " >
< div class = " edd-form-group " >
< label for = " edd_payment_key " class = " edd-form-group__label " >< ? php esc_html_e ( 'Key' , 'easy-digital-downloads' ); ?> </label>
< div class = " edd-form-group__control " >
< input type = " text " name = " payment_key " id = " edd_payment_key " class = " edd-form-group__input regular-text " < ? php echo esc_attr ( $readonly ); ?> value="<?php echo esc_attr( $order->payment_key ); ?>" />
</ div >
</ div >
</ div >
< ? php if ( edd_is_add_order_page () ) : ?>
< div class = " edd-order-ip edd-admin-box-inside " >
< div class = " edd-form-group " >
< label for = " edd_ip " class = " edd-form-group__label " >< ? php esc_html_e ( 'IP' , 'easy-digital-downloads' ); ?> </label>
< div class = " edd-form-group__control " >
< input type = " text " name = " ip " id = " edd_ip " class = " edd-form-group__input " value = " <?php echo esc_attr( edd_get_ip() ); ?> " />
</ div >
</ div >
</ div >
< ? php else : ?>
< div class = " edd-order-gateway edd-admin-box-inside edd-admin-box-inside--row " >
< span class = " label " >< ? php esc_html_e ( 'IP' , 'easy-digital-downloads' ); ?> </span>
< span class = " value " >< ? php echo edd_payment_get_ip_address_url ( $order -> id ); // WPCS: XSS ok. ?></span>
</ div >
< ? php endif ; ?>
< ? php if ( $transaction_id ) : ?>
< div class = " edd-order-tx-id edd-admin-box-inside edd-admin-box-inside--row " >
< span class = " label " >< ? php esc_html_e ( 'Transaction ID' , 'easy-digital-downloads' ); ?> </span>
< span >< ? php echo $transaction_id ; ?> </span>
</ div >
< ? php endif ; ?>
< ? php if ( edd_is_add_order_page () ) : ?>
< div class = " edd-order-tx-id edd-admin-box-inside edd-admin-box-inside--row " >
< div class = " edd-form-group " >
< label for = " edd_transaction_id " class = " edd-form-group__label " >< ? php esc_html_e ( 'Transaction ID' , 'easy-digital-downloads' ); ?> </label>
< div class = " edd-form-group__control " >
< input type = " text " name = " transaction_id " class = " edd-form-group__input " id = " edd_transaction_id " value = " " />
</ div >
</ div >
</ div >
< ? php endif ; ?>
< div class = " edd-unlimited-downloads edd-admin-box-inside " >
< div class = " edd-form-group " >
< div class = " edd-form-group__control " >
< input type = " checkbox " name = " edd-unlimited-downloads " id = " edd_unlimited_downloads " class = " edd-form-group__input " value = " 1 " < ? php checked ( true , $unlimited , true ); ?> />
< label for = " edd_unlimited_downloads " >
< ? php esc_html_e ( 'Unlimited Downloads' , 'easy-digital-downloads' ); ?> </label>
< span alt = " f223 " class = " edd-help-tip dashicons dashicons-editor-help " title = " <?php esc_attr_e( 'Checking this box will override all other file download limits for this purchase, granting the customer unlimited downloads of all files included on the purchase.', 'easy-digital-downloads' ); ?> " ></ span >
</ div >
</ div >
</ div >
< ? php do_action ( 'edd_view_order_details_payment_meta_after' , $order -> id ); ?>
</ div >
</ div >
</ div >
< ? php
}
/**
* Output the order details attributes box
*
* @ since 3.0
*
* @ param object $order
*/
function edd_order_details_attributes ( $order ) {
$recovery_url = edd_is_add_order_page ()
? ''
: edd_get_payment ( $order -> id ) -> get_recovery_url ();
$order_date = edd_get_edd_timezone_equivalent_date_from_utc ( EDD () -> utils -> date ( $order -> date_created , 'utc' , true ) );
?>
< div id = " edd-order-update " class = " postbox edd-order-data " >
< h2 class = " hndle " >
< span >< ? php esc_html_e ( 'Order Attributes' , 'easy-digital-downloads' ); ?> </span>
</ h2 >
< div class = " inside " >
< div class = " edd-order-update-box edd-admin-box " >
< div class = " edd-admin-box-inside " >
< div class = " edd-form-group " >
< label for = " edd_payment_status " class = " edd-form-group__label " >
< ? php
esc_html_e ( 'Status' , 'easy-digital-downloads' );
$status_help = '<ul>' ;
$status_help .= '<li>' . __ ( '<strong>Pending</strong>: order is still processing or was abandoned by customer. Successful orders will be marked as Complete automatically once processing is finalized.' , 'easy-digital-downloads' ) . '</li>' ;
$status_help .= '<li>' . __ ( '<strong>Complete</strong>: all processing is completed for this purchase.' , 'easy-digital-downloads' ) . '</li>' ;
$status_help .= '<li>' . __ ( '<strong>Revoked</strong>: access to purchased items is disabled, perhaps due to policy violation or fraud.' , 'easy-digital-downloads' ) . '</li>' ;
$status_help .= '<li>' . __ ( '<strong>Refunded</strong>: the purchase amount is returned to the customer and access to items is disabled.' , 'easy-digital-downloads' ) . '</li>' ;
$status_help .= '<li>' . __ ( '<strong>Abandoned</strong>: the purchase attempt was not completed by the customer.' , 'easy-digital-downloads' ) . '</li>' ;
$status_help .= '<li>' . __ ( '<strong>Failed</strong>: customer clicked Cancel before completing the purchase.' , 'easy-digital-downloads' ) . '</li>' ;
$status_help .= '</ul>' ;
?>
< span alt = " f223 " class = " edd-help-tip dashicons dashicons-editor-help " title = " <?php echo $status_help ; // WPCS: XSS ok. ?> " ></ span >
</ label >
< div class = " edd-form-group__control " >
< select name = " edd-payment-status " id = " edd_payment_status " class = " edd-form-group__input " >
< ? php foreach ( edd_get_payment_statuses () as $key => $status ) : ?>
< option value = " <?php echo esc_attr( $key ); ?> " < ? php selected ( $order -> status , $key , true ); ?> ><?php echo esc_html( $status ); ?></option>
< ? php endforeach ; ?>
</ select >
</ div >
</ div >
< ? php
if ( ! edd_is_add_order_page () ) :
$trash_url = wp_nonce_url (
edd_get_admin_url ( array (
'page' => 'edd-payment-history' ,
'order_type' => 'sale' ,
'edd-action' => 'trash_order' ,
'purchase_id' => absint ( $order -> id ),
) ),
'edd_payment_nonce'
);
?>
< div style = " margin-top: 8px; " >
< a href = " <?php echo esc_url( $trash_url ); ?> " class = " edd-delete-payment edd-delete " >
< ? php esc_html_e ( 'Move to Trash' , 'easy-digital-downloads' ); ?>
</ a >
</ div >
< ? php endif ; ?>
</ div >
< ? php if ( ! edd_is_add_order_page () && edd_is_order_recoverable ( $order -> id ) && ! empty ( $recovery_url ) ) : ?>
< div class = " edd-admin-box-inside " >
< div class = " edd-form-group " >
< label class = " edd-form-group__label " for = " edd_recovery_url " >
< ? php esc_html_e ( 'Recover' , 'easy-digital-downloads' ); ?>
< span alt = " f223 " class = " edd-help-tip dashicons dashicons-editor-help " title = " <?php esc_html_e( 'Pending and abandoned payments can be resumed by the customer, using this custom URL. Payments can be resumed only when they do not have a transaction ID from the gateway.', 'easy-digital-downloads' ); ?> " ></ span >
</ label >
< div class = " edd-form-group__control " >
< input type = " text " class = " edd-form-group__input " id = " edd_recovery_url " readonly = " readonly " value = " <?php echo esc_url( $recovery_url ); ?> " />
</ div >
</ div >
</ div >
< ? php endif ; ?>
< div class = " edd-admin-box-inside " >
< div class = " edd-form-group " >
< label for = " edd-payment-date " class = " edd-form-group__label " >< ? php esc_html_e ( 'Date' , 'easy-digital-downloads' ); ?>
</ label >
< div class = " edd-form-group__control " >
< input type = " text " id = " edd-payment-date " class = " edd-form-group__input edd_datepicker " name = " edd-payment-date " value = " <?php echo esc_attr( $order_date->format ( 'Y-m-d' ) ); ?> " placeholder = " <?php echo esc_attr( edd_get_date_picker_format() ); ?> " />
</ div >
</ div >
</ div >
< div class = " edd-admin-box-inside " >
< fieldset class = " edd-form-group " >
< legend class = " edd-form-group__label " >
< ? php echo esc_html ( __ ( 'Time' , 'easy-digital-downloads' ) . ' (' . edd_get_timezone_abbr () . ')' ); ?>
</ legend >
< div class = " edd-form-group__control " >
< label for = " edd-payment-time-hour " class = " screen-reader-text " >
< ? php esc_html_e ( 'Hour' , 'easy-digital-downloads' ); ?>
</ label >
< input type = " number " class = " edd-form-group__input small-text " min = " 0 " max = " 24 " step = " 1 " name = " edd-payment-time-hour " id = " edd-payment-time-hour " value = " <?php echo esc_attr( $order_date->format ( 'H' ) ); ?> " />
:
< label for = " edd-payment-time-min " class = " screen-reader-text " >
< ? php esc_html_e ( 'Minute' , 'easy-digital-downloads' ); ?>
</ label >
< input type = " number " class = " edd-form-group__input small-text " min = " 0 " max = " 59 " step = " 1 " name = " edd-payment-time-min " id = " edd-payment-time-min " value = " <?php echo esc_attr( $order_date->format ( 'i' ) ); ?> " />
</ div >
</ fieldset >
</ div >
< ? php do_action ( 'edd_view_order_details_update_inner' , $order -> id ); ?>
</ div ><!-- /. edd - admin - box -->
</ div ><!-- /. inside -->
</ div >
< ? php
}
/**
* Check if we are on the `Add New Order` page , or editing an existing one .
*
* @ since 3.0
*
* @ return boolean True if on the `Add Order` page , false otherwise .
*/
function edd_is_add_order_page () {
return isset ( $_GET [ 'view' ] ) && 'add-order' === sanitize_key ( $_GET [ 'view' ] ); // WPCS: CSRF ok.
}
/**
* Returns markup for an Order status badge .
*
* @ since 3.0
*
* @ param string $order_status Order status slug .
* @ return string
*/
function edd_get_order_status_badge ( $order_status ) {
2023-07-19 21:08:59 +00:00
$icon = '' ;
$status = $order_status ;
switch ( $order_status ) {
case 'refunded' :
$icon = 'undo' ;
break ;
case 'failed' :
$icon = 'no-alt' ;
$status = 'error' ;
2022-11-27 15:03:07 +00:00
break ;
2023-07-19 21:08:59 +00:00
case 'complete' :
case 'partially_refunded' :
$icon = 'yes' ;
$status = 'success' ;
2022-11-27 15:03:07 +00:00
break ;
2023-07-19 21:08:59 +00:00
case 'pending' :
$status = 'warning' ;
2022-11-27 15:03:07 +00:00
break ;
}
2023-07-19 21:08:59 +00:00
/**
* Filters the arguments for the order status badge .
*
* @ since 3.1 . 4
* @ param array $status_badge_args Array of arguments for the status badge .
* @ param string $order_status Order status slug .
*/
$status_badge_args = apply_filters (
'edd_get_order_status_badge_args' ,
array (
'status' => $status ,
'label' => edd_get_payment_status_label ( $order_status ),
'icon' => $icon ,
'class' => " edd-admin-order-status-badge-- { $order_status } " ,
),
$order_status
);
$status_badge = new EDD\Utils\StatusBadge ( $status_badge_args );
2022-11-27 15:03:07 +00:00
/**
* Filters the markup for the order status badge icon .
*
* @ since 3.0
*
* @ param string $icon Icon HTML markup .
*/
2023-07-19 21:08:59 +00:00
$icon = apply_filters ( 'edd_get_order_status_badge_icon' , $status_badge -> get_icon (), $order_status );
2022-11-27 15:03:07 +00:00
2023-07-19 21:08:59 +00:00
return $status_badge -> get ( $icon );
2022-11-27 15:03:07 +00:00
}