settings = $settings; $this->state = $state; $this->fields = $fields; $this->dcc_applies = $dcc_applies; $this->messages_apply = $messages_apply; $this->dcc_product_status = $dcc_product_status; } /** * Returns notices list. * * @return array */ public function messages() : array { $messages = array(); if ( $this->is_paypal_checkout_screen() && $this->paypal_vaulting_is_enabled() || $this->is_paypal_checkout_screen() && $this->pay_later_messaging_is_enabled() ) { $vaulting_title = __( 'PayPal vaulting', 'woocommerce-paypal-payments' ); $pay_later_messages_title = __( 'Pay Later Messaging', 'woocommerce-paypal-payments' ); $enabled = $this->paypal_vaulting_is_enabled() ? $vaulting_title : $pay_later_messages_title; $disabled = $this->pay_later_messaging_is_enabled() ? $vaulting_title : $pay_later_messages_title; $pay_later_messages_or_vaulting_text = sprintf( // translators: %1$s and %2$s is translated PayPal vaulting and Pay Later Messaging strings. __( 'You have %1$s enabled, that\'s why %2$s options are unavailable now. You cannot use both features at the same time', 'woocommerce-paypal-payments' ), $enabled, $disabled ); $messages[] = new Message( $pay_later_messages_or_vaulting_text, 'warning' ); } //phpcs:disable WordPress.Security.NonceVerification.Recommended //phpcs:disable WordPress.Security.NonceVerification.Missing if ( ! isset( $_GET['ppcp-onboarding-error'] ) || ! empty( $_POST ) ) { return $messages; } //phpcs:enable WordPress.Security.NonceVerification.Recommended //phpcs:enable WordPress.Security.NonceVerification.Missing $messages[] = new Message( __( 'We could not complete the onboarding process. Some features, such as card processing, will not be available. To fix this, please try again.', 'woocommerce-paypal-payments' ), 'error', false ); return $messages; } /** * Check whether PayPal vaulting is enabled. * * @return bool */ private function paypal_vaulting_is_enabled(): bool { $saving_paypal_account_is_enabled = $this->settings->has( 'save_paypal_account' ) && (bool) $this->settings->get( 'save_paypal_account' ); $vault_is_enabled = $this->settings->has( 'vault_enabled' ) && (bool) $this->settings->get( 'vault_enabled' ); return $saving_paypal_account_is_enabled || $vault_is_enabled; } /** * Check whether Pay Later message is enabled either for checkout, cart or product page. * * @return bool */ private function pay_later_messaging_is_enabled(): bool { $pay_later_message_enabled_for_checkout = $this->settings->has( 'message_enabled' ) && (bool) $this->settings->get( 'message_enabled' ); $pay_later_message_enabled_for_cart = $this->settings->has( 'message_cart_enabled' ) && (bool) $this->settings->get( 'message_cart_enabled' ); $pay_later_message_enabled_for_product = $this->settings->has( 'message_product_enabled' ) && (bool) $this->settings->get( 'message_product_enabled' ); return $pay_later_message_enabled_for_checkout || $pay_later_message_enabled_for_cart || $pay_later_message_enabled_for_product; } /** * Check if current screen is PayPal checkout settings screen. * * @return bool Whether is PayPal checkout screen or not. */ private function is_paypal_checkout_screen(): bool { $current_screen = get_current_screen(); //phpcs:disable WordPress.Security.NonceVerification.Recommended //phpcs:disable WordPress.Security.NonceVerification.Missing if ( isset( $current_screen->id ) && 'woocommerce_page_wc-settings' === $current_screen->id && isset( $_GET['section'] ) && 'ppcp-gateway' === $_GET['section'] ) { if ( isset( $_GET['ppcp-tab'] ) && 'ppcp-gateway' !== $_GET['ppcp-tab'] ) { return false; } return true; } //phpcs:enable return false; } /** * Renders the multiselect field. * * @param string $field The current field HTML. * @param string $key The current key. * @param array $config The configuration array. * @param string $value The current value. * * @return string */ public function render_multiselect( $field, $key, $config, $value ): string { if ( 'ppcp-multiselect' !== $config['type'] ) { return $field; } $options = array(); foreach ( $config['options'] as $option_key => $option_value ) { $selected = ( in_array( $option_key, $value, true ) ) ? 'selected="selected"' : ''; $options[] = ''; } $html = sprintf( '', esc_attr( implode( ' ', isset( $config['input_class'] ) ? $config['input_class'] : array() ) ), esc_attr( $key ) . '[]', implode( '', $options ) ); return $html; } /** * Renders the password input field. * * @param string $field The current field HTML. * @param string $key The current key. * @param array $config The configuration array. * @param string $value The current value. * * @return string */ public function render_password( $field, $key, $config, $value ): string { if ( 'ppcp-password' !== $config['type'] ) { return $field; } $html = sprintf( '', esc_attr( implode( ' ', $config['class'] ) ), esc_attr( $key ), esc_attr( $value ) ); return $html; } /** * Renders the text input field. * * @param string $field The current field HTML. * @param string $key The current key. * @param array $config The configuration array. * @param string $value The current value. * * @return string */ public function render_text_input( $field, $key, $config, $value ): string { if ( 'ppcp-text-input' !== $config['type'] ) { return $field; } $html = sprintf( '', esc_attr( implode( ' ', $config['class'] ) ), esc_attr( $key ), esc_attr( $value ) ); return $html; } /** * Renders the heading field. * * @param string $field The current field HTML. * @param string $key The current key. * @param array $config The configuration array. * @param string $value The current value. * * @return string */ public function render_heading( $field, $key, $config, $value ): string { if ( 'ppcp-heading' !== $config['type'] ) { return $field; } $html = sprintf( '
', '' ) ); ?>