Automattic\WooCommerce\Internal\OrderWithdrawal
OrderWithdrawalFormView{} │ final │ WC 1.0
Prepares order withdrawal template data.
No Hooks.
Usage
$OrderWithdrawalFormView = new OrderWithdrawalFormView(); // use class methods
Methods
- public get_template_args( OrderWithdrawalFormState $state, string $form_action_url, string $shop_url )
- private get_customer_name( array $data )
- private get_form_field_schema()
- private get_hidden_fields( array $data )
- private get_prepared_form_fields( array $errors )
- private get_review_rows( array $data )
- private get_withdrawal_type_label( string $withdrawal_type )
- private get_withdrawal_type_options()
OrderWithdrawalFormView{} OrderWithdrawalFormView{} code WC 11.1.2
final class OrderWithdrawalFormView {
/**
* Get template arguments for the order withdrawal form.
*
* @param OrderWithdrawalFormState $state Processed form state.
* @param string $form_action_url Form action URL.
* @param string $shop_url Shop URL.
* @return array<string,mixed>
*
* @since 11.1.0
*/
public function get_template_args( OrderWithdrawalFormState $state, string $form_action_url, string $shop_url ): array {
return array(
'screen' => $state->screen,
'data' => $state->data,
'errors' => $state->errors,
'fields' => $this->get_prepared_form_fields( $state->errors ),
'withdrawal_type_options' => $this->get_withdrawal_type_options(),
'hidden_fields' => $this->get_hidden_fields( $state->data ),
'review_rows' => $this->get_review_rows( $state->data ),
'nonce_action' => OrderWithdrawalFormProcessor::NONCE_ACTION,
'nonce_field' => OrderWithdrawalFormProcessor::NONCE_FIELD,
'action_field' => OrderWithdrawalFormProcessor::ACTION_FIELD,
'action_review' => OrderWithdrawalFormProcessor::ACTION_REVIEW,
'action_confirm' => OrderWithdrawalFormProcessor::ACTION_CONFIRM,
'action_edit' => OrderWithdrawalFormProcessor::ACTION_EDIT,
'form_action_url' => $form_action_url,
'shop_url' => $shop_url,
);
}
/**
* Get form field definitions prepared for the template.
*
* @param array<string,string> $errors Validation errors keyed by field.
* @return array<string,array<string,mixed>>
*/
private function get_prepared_form_fields( array $errors ): array {
$fields = array();
foreach ( $this->get_form_field_schema() as $field_key => $field ) {
$field['name'] = OrderWithdrawalFormProcessor::get_field_name( $field_key );
$field['id'] = OrderWithdrawalFormProcessor::get_field_name( $field_key );
$field['input_class'] = array( 'woocommerce-Input', 'woocommerce-Input--' . (string) $field['type'] );
if ( isset( $errors[ $field_key ] ) ) {
$field['class'][] = 'woocommerce-invalid';
$field['custom_attributes']['aria-invalid'] = 'true';
$field['custom_attributes']['aria-errormessage'] = OrderWithdrawalFormProcessor::get_field_name( $field_key ) . '_error';
}
if ( OrderWithdrawalFormProcessor::FIELD_ADDITIONAL_DETAILS === $field_key ) {
$field['custom_attributes']['rows'] = '5';
}
$fields[ $field_key ] = $field;
}
return $fields;
}
/**
* Get hidden fields for review actions.
*
* @param array<string,string> $data Form data.
* @return array<int,array{name:string,value:string}>
*/
private function get_hidden_fields( array $data ): array {
$hidden_fields = array();
foreach ( $data as $field_key => $value ) {
$hidden_fields[] = array(
'name' => OrderWithdrawalFormProcessor::get_field_name( $field_key ),
'value' => $value,
);
}
return $hidden_fields;
}
/**
* Get rows for the review screen.
*
* @param array<string,string> $data Form data.
* @return array<int,array{label:string,value:string}>
*/
private function get_review_rows( array $data ): array {
return array(
array(
'label' => __( 'Name', 'woocommerce' ),
'value' => $this->get_customer_name( $data ),
),
array(
'label' => __( 'Email address', 'woocommerce' ),
'value' => $data[ OrderWithdrawalFormProcessor::FIELD_EMAIL ],
),
array(
'label' => __( 'Order number', 'woocommerce' ),
'value' => $data[ OrderWithdrawalFormProcessor::FIELD_ORDER_NUMBER ],
),
array(
'label' => __( 'Withdrawing', 'woocommerce' ),
'value' => $this->get_withdrawal_type_label( $data[ OrderWithdrawalFormProcessor::FIELD_WITHDRAWAL_TYPE ] ),
),
array(
'label' => __( 'Additional details', 'woocommerce' ),
'value' => '' === $data[ OrderWithdrawalFormProcessor::FIELD_ADDITIONAL_DETAILS ] ? __( 'None provided', 'woocommerce' ) : $data[ OrderWithdrawalFormProcessor::FIELD_ADDITIONAL_DETAILS ],
),
);
}
/**
* Get the form field definitions for the template.
*
* @return array<string,array<string,mixed>>
*/
private function get_form_field_schema(): array {
return array(
OrderWithdrawalFormProcessor::FIELD_FIRST_NAME => array(
'label' => __( 'First name', 'woocommerce' ),
'type' => 'text',
'class' => array( 'woocommerce-form-row', 'woocommerce-form-row--first', 'form-row-first' ),
'autocomplete' => 'given-name',
'required' => true,
),
OrderWithdrawalFormProcessor::FIELD_LAST_NAME => array(
'label' => __( 'Last name', 'woocommerce' ),
'type' => 'text',
'class' => array( 'woocommerce-form-row', 'woocommerce-form-row--last', 'form-row-last' ),
'autocomplete' => 'family-name',
'required' => true,
),
OrderWithdrawalFormProcessor::FIELD_EMAIL => array(
'label' => __( 'Email address', 'woocommerce' ),
'type' => 'email',
'class' => array( 'woocommerce-form-row', 'woocommerce-form-row--wide', 'form-row-wide' ),
'autocomplete' => 'email',
'required' => true,
),
OrderWithdrawalFormProcessor::FIELD_EMAIL_CONFIRMATION => array(
'label' => __( 'Confirm email address', 'woocommerce' ),
'type' => 'email',
'class' => array( 'woocommerce-form-row', 'woocommerce-form-row--wide', 'form-row-wide' ),
'autocomplete' => 'email',
'required' => true,
),
OrderWithdrawalFormProcessor::FIELD_ORDER_NUMBER => array(
'label' => __( 'Order number', 'woocommerce' ),
'type' => 'text',
'class' => array( 'woocommerce-form-row', 'woocommerce-form-row--wide', 'form-row-wide' ),
'required' => true,
),
OrderWithdrawalFormProcessor::FIELD_WITHDRAWAL_TYPE => array(
'label' => __( 'What do you want to withdraw?', 'woocommerce' ),
'type' => 'radio',
'required' => true,
),
OrderWithdrawalFormProcessor::FIELD_ADDITIONAL_DETAILS => array(
'label' => __( 'Additional details', 'woocommerce' ),
'type' => 'textarea',
'class' => array( 'woocommerce-form-row', 'woocommerce-form-row--wide', 'form-row-wide' ),
'required' => false,
),
);
}
/**
* Get the available withdrawal type options.
*
* @return array<string,string>
*/
private function get_withdrawal_type_options(): array {
return array(
OrderWithdrawalFormProcessor::WITHDRAWAL_TYPE_FULL => __( 'The full order', 'woocommerce' ),
OrderWithdrawalFormProcessor::WITHDRAWAL_TYPE_SPECIFIC => __( 'Specific items only', 'woocommerce' ),
);
}
/**
* Get the label for a withdrawal type value.
*
* @param string $withdrawal_type Withdrawal type value.
*/
private function get_withdrawal_type_label( string $withdrawal_type ): string {
$options = $this->get_withdrawal_type_options();
return $options[ $withdrawal_type ] ?? '';
}
/**
* Get the customer's full name for display.
*
* @param array<string,string> $data Form data.
*/
private function get_customer_name( array $data ): string {
return trim( $data[ OrderWithdrawalFormProcessor::FIELD_FIRST_NAME ] . ' ' . $data[ OrderWithdrawalFormProcessor::FIELD_LAST_NAME ] );
}
}