クラス
Container
ソース ソース
ファイル: src/Components/CheckoutReview/Container.php
abstract class Container
{
/**
* Slug name for our entry js script
*/
const ENTRY_SCRIPT_SLUG = 'wcex-checkout-review';
/**
* Array of child components
*
* @var VueComponentLoader[]
*/
public $childComponents;
/**
* AmazonPay module instance
*
* @var AmazonPay
*/
protected $module;
/**
* Initializes member model var and registers hooks for quickpay page
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @param AmazonPay $module
*/
public function __construct(AmazonPay $module) {
$this->module = $module;
}
/**
* Instantiates child components
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @return void
*/
public function buildComponents() {
$opts = $this->module->getActingOpts();
$mmeta = !empty($_SESSION['usces_member']['ID']) ? new MemberMeta((int)$_SESSION['usces_member']['ID']) : -1;
$buyerEmail = $_SESSION['amazonCheckoutSession']['buyer']['email'];
$welcartEmail = !empty($_SESSION['usces_member']['mailaddress1']) ? $_SESSION['usces_member']['mailaddress1'] : '';
$loadCouponForm = false;
if (defined('WCEX_COUPON')) {
$wccp = get_option('wccp');
if ($wccp['front_display'] === '0' || ($wccp['front_display'] === '1' && usces_is_login())) {
$loadCouponForm = true;
}
}
$loadPointsForm = usces_is_member_system() && usces_is_member_system_point() && usces_is_login() && usces_is_available_point();
$loadGiftForm = !usces_is_login();
$amazonCheckoutDetailsComponent = $this->getAmazonCheckoutDetailsComponent();
$purchaseButtonComponent = $this->getPurchaseButtonComponent();
$this->childComponents = [
'orderSummary' => new VueComponentLoader(
new Components\OrderSummary\OrderSummary(),
$this->filterLoadOrderSummary(true)
),
'pointsForm' => new VueComponentLoader(
new Components\PointsForm\PointsForm(),
$this->filterLoadPointsForm($loadPointsForm)
),
'couponForm' => new VueComponentLoader(
new Components\CouponForm\CouponForm(),
$this->filterLoadCouponForm($loadCouponForm)
),
'deliveryForm' => new VueComponentLoader(
new Components\DeliveryForm\DeliveryForm(),
$this->filterLoadDeliveryForm(true)
),
'notesForm' => new VueComponentLoader(
new Components\Notes\Notes(),
$this->filterLoadNotesForm($opts['quickpay_notes_field'] === 'on')
),
'giftForm' => new VueComponentLoader(
new Components\GiftForm\GiftForm(),
$this->filterLoadGiftForm($loadGiftForm)
),
'customCustomerFields' => new VueComponentLoader(
new Components\CustomFields\CustomFields([
'ident' => 'customer',
'template' => 'welcart',
/**
* Filters whether or not error messages show directly above each カスタム・フィールド on
* the Quickpay checkout review page
*
* Used for all 4 custom field types:
* - カスタム・カスタマーフィールド
* - カスタム・デリバリーフィールド
* - カスタム・オーダーフィールド
* - カスタム・メンバーフィールド
*
* @param bool $flag Default: `false`
*/
'display_errors' => apply_filters('wcexaap_checkout_review_filter_display_custom_fields_errors', false),
]),
$this->filterLoadCustomCustomerFields(!usces_is_login())
),
'customOrderFields' => new VueComponentLoader(
new Components\CustomFields\CustomFields([
'ident' => 'order',
'template' => 'welcart',
/**
* Filters whether or not error messages show directly above each カスタム・フィールド on
* the Quickpay checkout review page
*
* Used for all 4 custom field types:
* - カスタム・カスタマーフィールド
* - カスタム・デリバリーフィールド
* - カスタム・オーダーフィールド
* - カスタム・メンバーフィールド
*
* @param bool $flag Default: `false`
*/
'display_errors' => apply_filters('wcexaap_checkout_review_filter_display_custom_fields_errors', false),
]),
$this->filterLoadCustomOrderFields($opts['quickpay_custom_order_fields'] === 'on')
),
'customDeliveryFields' => new VueComponentLoader(
new Components\CustomFields\CustomFields([
'ident' => 'delivery',
'template' => 'welcart',
/**
* Filters whether or not error messages show directly above each カスタム・フィールド on
* the Quickpay checkout review page
*
* Used for all 4 custom field types:
* - カスタム・カスタマーフィールド
* - カスタム・デリバリーフィールド
* - カスタム・オーダーフィールド
* - カスタム・メンバーフィールド
*
* @param bool $flag Default: `false`
*/
'display_errors' => apply_filters('wcexaap_checkout_review_filter_display_custom_fields_errors', false),
]),
$this->filterLoadCustomDeliveryFields($opts['quickpay_custom_delivery_fields'] === 'on')
),
'amazonCheckoutDetails' => new VueComponentLoader($amazonCheckoutDetailsComponent, true),
'purchaseButton' => new VueComponentLoader($purchaseButtonComponent, true),
'registerWithAmazonForm' => new VueComponentLoader(
new Components\RegisterWithAmazon\RegisterWithAmazon(),
!usces_is_login()
),
'linkMembersToAmazonForm' => new VueComponentLoader(
new Components\LinkMembersToAmazon\LinkMembersToAmazon(),
// Amazonアカウントと連携していない場合、チェックボックスを表示する。
usces_is_login() && $mmeta->getAllowAmazonToWelcartLogin() === false && ($buyerEmail === $welcartEmail)
),
];
}
/**
* Load page and assets then exit
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @return void
*/
public function loadPage() {
$this->buildComponents();
add_action('wcexaap_checkout_review_template', [$this, 'containerTemplate']);
add_action('wp_enqueue_scripts', [$this, 'enqueueAssets']);
usces_get_entries();
usces_get_carts();
usces_get_members();
$this->beforeTemplateInclude();
$parent_path = get_template_directory() . '/wc_templates';
$child_path = get_stylesheet_directory() . '/wc_templates';
$plugins_url_path = WP_PLUGIN_DIR . '/wcex-amazonpay/templates';
$theme_template = wp_get_theme()->template;
// TCD Welcartの場合、プラグイン内のファイルを取り込む
if (file_exists($child_path . '/cart/wc_amazon_quickpay_page.php')) {
include($child_path . '/cart/wc_amazon_quickpay_page.php');
} elseif (file_exists($parent_path . '/cart/wc_amazon_quickpay_page.php') && !defined('USCES_PARENT_LOAD')) {
include($parent_path . '/cart/wc_amazon_quickpay_page.php');
} elseif ($theme_template === 'glamour_tcd073') {
include($plugins_url_path . '/glamour_tcd073/cart/wc_amazon_quickpay_page.php');
} elseif ($theme_template === 'ego_welcart_tcd079') {
include($plugins_url_path . '/ego_welcart_tcd079/cart/wc_amazon_quickpay_page.php');
} elseif ($theme_template === 'iconic_tcd062') {
include($plugins_url_path . '/iconic_tcd062/cart/wc_amazon_quickpay_page.php');
} else {
echo $this->getPageTemplate();
}
$this->afterTemplateInclude();
exit;
}
/**
* Enqueues necessary assets
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @global \usc_e_shop $usces
* @return void
*/
public function enqueueAssets() {
Theme::enqueueThemeCss(WCEXAAP_PLUGIN_URL);
wp_enqueue_style(
self::ENTRY_SCRIPT_SLUG,
WCEXAAP_PLUGIN_URL . '/src/Components/CheckoutReview/style.css',
[],
WCEXAAP_VERSION
);
// scripts
wp_enqueue_script(
self::ENTRY_SCRIPT_SLUG,
WCEXAAP_PLUGIN_URL . '/dist/checkoutReview.js',
[],
WCEXAAP_VERSION,
true
);
$this->loadCustomAssets();
/**
* Fires after enqueuing CSS and JS for the Quickpay page
*
* Use this hook to load custom CSS or JS on the Quickpay page
*
* @important
*/
do_action('wcexaap_quickpay_custom_assets');
wp_set_script_translations(self::ENTRY_SCRIPT_SLUG, 'wcexaap', WCEXAAP_LANGDIR);
wp_localize_script(self::ENTRY_SCRIPT_SLUG, AmazonPay::L10N, $this->makeJSvars());
}
/**
* Javascript variables to be sent into script(s)
*
* @return array
*/
public function makeJSvars() {
$entries = new API\WelcartEntries();
$jsvars = [];
$jsvars['order'] = $entries->getOrder();
$jsvars['childComponents'] = $this->childComponents;
$jsvars = $this->filterJSVars($jsvars);
$jsvars = array_merge($jsvars, $this->module->getScriptInjectionVariables());
return $jsvars;
}
/**
* Loads components inside `#cart` div
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @return void
*/
protected function loadCartComponents() {
$order = [
'orderSummary',
'pointsForm',
'couponForm',
'deliveryForm',
'customDeliveryFields',
'customCustomerFields',
'customOrderFields',
'notesForm',
'giftForm',
];
$order = $this->filterCartComponentsOrder($order);
foreach ($order as $compname) {
$this->childComponents[$compname]->templateIfLoad();
}
}
/**
* Loads components above `#info-confirm` div
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @return void
*/
protected function loadConfirmComponents() {
$order = [
'amazonCheckoutDetails',
'purchaseButton',
'registerWithAmazonForm',
'linkMembersToAmazonForm',
];
$order = $this->filterConfirmComponentsOrder($order);
foreach ($order as $compname) {
$this->childComponents[$compname]->templateIfLoad();
}
}
/**
* Template HTML
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @return string
*/
public function getPageTemplate() {
/**
* Filters whether or not to call `get_header()` and `get_footer()` on the Quickpay page
*
* *This filter will not run for themes using their own `wc_amazon_quickpay_page.php`
* template file*
*
* @param bool $flag Default: `true`
*/
$withHeaderFooter = apply_filters('wcexaap_filter_checkout_review_template_header_footer_flag', true);
ob_start();
if ($withHeaderFooter === true) {
get_header();
}
?>
<div id="primary" class="site-content">
<div id="content" class="cart-page" role="main">
<?php if (have_posts()) :
usces_remove_filter(); ?>
<article class="post" id="wc_confirm">
<?php
/**
* Used to load all Vue components on the Quickpay page
*/
do_action('wcexaap_checkout_review_template');
?>
</article>
<?php else : ?>
<p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
<?php endif; ?>
</div>
</div>
<?php
if ($withHeaderFooter === true) {
get_footer();
}
$template = ob_get_clean();
/**
* Filters all Quickpay page HTML
*
* *This filter will not run for themes using their own `wc_amazon_quickpay_page.php`
* template file*
*
* @param string $template
* @param \Aivec\Welcart\SettlementModules\AmazonPay\Components\CheckoutReview\Container $instance
*/
return apply_filters('wcexaap_filter_checkout_review_template', $template, $this);
}
/**
* Prints container wrapper with components for checkout review page
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @return void
*/
public function containerTemplate() {
/**
* Filters the HTML id name for the div that wraps the `checkout_review` Vue app
*
* @param string $wrapperid Default: `quickpay_wrapper`
*/
$wrapperid = apply_filters('wcexaap_filter_quickpay_wrapper_div_id', 'quickpay_wrapper');
?>
<div id="<?php echo esc_attr($wrapperid); ?>">
<div id="checkout_review" class="wcexaap">
<div id="info-confirm">
<h1 class="cart_page_title"><?php _e('Confirmation', 'usces'); ?></h1>
<div class="confiem_notice">
<?php _e('Please do not change product addition and amount of it with the other window with displaying this page.', 'usces'); ?>
</div>
<div class="header_explanation">
<?php
/**
* Mirrored Welcart action hook
*
* @ignore
*/
do_action('usces_action_confirm_page_header');
?>
<?php echo $this->filterTemplateTopErrorMessage(''); ?>
</div>
<?php
/**
* Mirrored Welcart action hook
*
* @ignore
*/
do_action('usces_action_delivery_page_inform');
?>
<div id="cart">
<?php $this->loadCartComponents(); ?>
</div>
<?php $this->loadConfirmComponents(); ?>
<div class="footer_explanation">
<?php echo $this->filterTemplateBottomErrorMessage(''); ?>
<?php
/**
* Mirrored Welcart action hook
*
* @ignore
*/
do_action('usces_action_confirm_page_footer');
?>
</div>
</div>
</div>
</div>
<?php
}
/**
* Should return an instance of `AmazonCheckoutDetails`
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @return Components\AmazonCheckoutDetails\AmazonCheckoutDetails
*/
abstract protected function getAmazonCheckoutDetailsComponent();
/**
* Should return an instance of `VueComponent`
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @return VueComponent
*/
abstract protected function getPurchaseButtonComponent();
/**
* Executes before template file has been included
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @return void
*/
protected function beforeTemplateInclude() {
}
/**
* Executes after template file has been included
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @return void
*/
protected function afterTemplateInclude() {
}
/**
* Filters whether to load `deliveryForm` component or not
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @param bool $load
* @return bool
*/
protected function filterLoadDeliveryForm($load) {
return $load;
}
/**
* Filters whether to load `notesForm` component or not
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @param bool $load
* @return bool
*/
protected function filterLoadNotesForm($load) {
return $load;
}
/**
* Filters whether to load `giftForm` component or not
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @param bool $load
* @return bool
*/
protected function filterLoadGiftForm($load) {
return $load;
}
/**
* Filters whether to load `pointsForm` component or not
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @param bool $load
* @return bool
*/
protected function filterLoadPointsForm($load) {
return $load;
}
/**
* Filters whether to load `couponForm` component or not
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @param bool $load
* @return bool
*/
protected function filterLoadCouponForm($load) {
return $load;
}
/**
* Filters whether to load `orderSummary` component or not
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @param bool $load
* @return bool
*/
protected function filterLoadOrderSummary($load) {
return $load;
}
/**
* Filters whether to load `customCustomerFields` component or not
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @param bool $load
* @return bool
*/
protected function filterLoadCustomCustomerFields($load) {
return $load;
}
/**
* Filters whether to load `customOrderFields` component or not
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @param bool $load
* @return bool
*/
protected function filterLoadCustomOrderFields($load) {
return $load;
}
/**
* Filters whether to load `customDeliveryFields` component or not
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @param bool $load
* @return bool
*/
protected function filterLoadCustomDeliveryFields($load) {
return $load;
}
/**
* Filters script injection variables
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @param array $jsvars
* @return array
*/
protected function filterJSVars(array $jsvars) {
return $jsvars;
}
/**
* Filters order of top components
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @param array $order
* @return array
*/
protected function filterConfirmComponentsOrder(array $order) {
return $order;
}
/**
* Filters order of cart components
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @param array $order
* @return array
*/
protected function filterCartComponentsOrder(array $order) {
return $order;
}
/**
* Filters error message displayed at the top of the page
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @param string $emessage
* @return string
*/
public function filterTemplateTopErrorMessage($emessage) {
return $emessage;
}
/**
* Filters error message displayed at the bottom of the page
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @param string $emessage
* @return string
*/
public function filterTemplateBottomErrorMessage($emessage) {
return $emessage;
}
/**
* Invoked after scripts and styles are enqueued
*
* @author Evan D Shaw <evandanielshaw@gmail.com>
* @return void
*/
protected function loadCustomAssets() {
}
}
- __construct — Initializes member model var and registers hooks for quickpay page
- afterTemplateInclude — Executes after template file has been included
- beforeTemplateInclude — Executes before template file has been included
- buildComponents — Instantiates child components
- containerTemplate — Prints container wrapper with components for checkout review page
- enqueueAssets — Enqueues necessary assets
- filterCartComponentsOrder — Filters order of cart components
- filterConfirmComponentsOrder — Filters order of top components
- filterJSVars — Filters script injection variables
- filterLoadCouponForm — Filters whether to load `couponForm` component or not
- filterLoadCustomCustomerFields — Filters whether to load `customCustomerFields` component or not
- filterLoadCustomDeliveryFields — Filters whether to load `customDeliveryFields` component or not
- filterLoadCustomOrderFields — Filters whether to load `customOrderFields` component or not
- filterLoadDeliveryForm — Filters whether to load `deliveryForm` component or not
- filterLoadGiftForm — Filters whether to load `giftForm` component or not
- filterLoadNotesForm — Filters whether to load `notesForm` component or not
- filterLoadOrderSummary — Filters whether to load `orderSummary` component or not
- filterLoadPointsForm — Filters whether to load `pointsForm` component or not
- filterTemplateBottomErrorMessage — Filters error message displayed at the bottom of the page
- filterTemplateTopErrorMessage — Filters error message displayed at the top of the page
- getAmazonCheckoutDetailsComponent — Should return an instance of `AmazonCheckoutDetails`
- getPageTemplate — Template HTML
- getPurchaseButtonComponent — Should return an instance of `VueComponent`
- loadCartComponents — Loads components inside `#cart` div
- loadConfirmComponents — Loads components above `#info-confirm` div
- loadCustomAssets — Invoked after scripts and styles are enqueued
- loadPage — Load page and assets then exit
- makeJSvars — Javascript variables to be sent into script(s)