クラス
CartPages
ソース ソース
ファイル: src/Pages/CartPages.php
class CartPages { /** * Registers hooks * * @author Evan D Shaw <evandanielshaw@gmail.com> * @return void */ public static function init() { $loader = function () { $loadcore = apply_filters('wcexics_filter_load_cart_table_default_css', true); if ($loadcore === true) { Cart::loadCss(); } do_action('wcexics_load_cart_table_assets'); }; (new ConditionalAssetsLoader())->loadCartPageAssets($loader); (new ConditionalAssetsLoader())->loadConfirmPageAssets($loader); (new ConditionalAssetsLoader())->loadMemberPageAssets($loader); (new ConditionalAssetsLoader())->loadOrderCompletionPageAssets(function () use ($loader) { $loader(); Loader::loadCoreCss(); }); add_filter('usces_filter_cart_item_name_nl', [get_class(), 'displayGroupItemsInCartItemNameEmail'], 10, 2); add_filter('usces_filter_cart_item_name', [get_class(), 'displayGroupItemsInCartItemName'], 10, 2); add_filter('usces_filter_cart_row', [get_class(), 'addComboSetItemsInput'], 20, 3); } /** * Adds group items underneath the cart item name in emails and PDF files * * Unfortunately, this same filter is used when displaying the cart item name in PDF files so * we need to make sure to not use HTML in that case. The only way to do that is by checking * whether an `index` key exists in the `$args` parameter. It's an ugly solution but it's the * only one available. * * @author Evan D Shaw <evandanielshaw@gmail.com> * @param string $cartItemName * @param array $args * @return string */ public static function displayGroupItemsInCartItemNameEmail($cartItemName, $args) { if (usces_is_html_mail() && !isset($args['index'])) { return self::displayGroupItemsInCartItemName($cartItemName, $args); } $data = self::getComboSetCart($args['cart_row']); if (empty($data)) { return $cartItemName; } return $cartItemName . Cart::getComboSetCartDetailsNoHtml($data['cartRows'], !isset($args['index'])); } /** * Adds group items HTML underneath the cart item name * * Applies to the member page, cart page, confirm page, and order completion page * * @author Evan D Shaw <evandanielshaw@gmail.com> * @param string $cartItemName * @param array $args * @return string */ public static function displayGroupItemsInCartItemName($cartItemName, $args) { if (empty($args['cart_row'])) { return $cartItemName; } $data = self::getComboSetCart($args['cart_row']); if (empty($data)) { return $cartItemName; } return $cartItemName . Cart::getComboSetCartDetailsHtml($data['cartRows']); } /** * Returns cart data for a combo-set cart row * * @author Evan D Shaw <evandanielshaw@gmail.com> * @global \usc_e_shop $usces * @global \wpdb $wpdb * @param array $cart_row * @return null|array */ public static function getComboSetCart($cart_row) { global $usces, $wpdb; $cserial = null; $isordercart = false; $grouplabelmap = []; $itemlabelmap = []; $ordercart = []; if (!empty($cart_row['serial'])) { $cserial = $cart_row['serial']; } elseif (!empty($cart_row['cart_serial'])) { $cserial = $cart_row['cart_serial']; $isordercart = true; } if ($cserial === null) { return null; } $sels = unserialize($cserial); if (empty($sels['comboSetId']) || !isset($sels['comboSetItems'])) { return null; } if ($isordercart === true) { $csgioct = Schema::getComboSetGroupItemsOrderCartTable(); $results = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$csgioct} WHERE combo_set_cart_id = %d ORDER BY cart_id ASC", $cart_row['cart_id'] ), ARRAY_A ); if ($results !== null) { $index = 0; foreach ($sels['comboSetItems'] as $gitem) { if (empty($results[$index]['cart_serial'])) { continue; } $gocserial = $results[$index]['cart_serial']; $gisels = unserialize($gocserial); $grouplabelmap[$gisels['groupId']] = !empty($gisels['groupLabel']) ? $gisels['groupLabel'] : ''; $itemlabelmap[$gisels['itemId']] = !empty($gisels['itemLabel']) ? $gisels['itemLabel'] : ''; $ordercart[$gisels['itemId']] = $results[$index]; $index++; } } } else { $cscart = !empty($_SESSION['usces_cart'][$cserial]) ? $_SESSION['usces_cart'][$cserial] : []; $grouplabelmap = !empty($cscart['grouplabelmap']) ? $cscart['grouplabelmap'] : []; $itemlabelmap = !empty($cscart['itemlabelmap']) ? $cscart['itemlabelmap'] : []; $ordercart = []; } $rows = []; foreach ($sels['comboSetItems'] as $serial => $gitem) { $gisels = unserialize($serial); $gicsels = (new \usces_cart())->key_unserialize($serial); $rows[$gisels['groupId']]['groupLabel'] = ''; $glabel = ''; if (!empty($grouplabelmap[$gisels['groupId']])) { $glabel = $grouplabelmap[$gisels['groupId']]; } $itemLabel = ''; if (!empty($itemlabelmap[$gisels['itemId']])) { $itemLabel = $itemlabelmap[$gisels['itemId']]; } else { $itemLabel = wcexics_get_group_item_default_label( $usces->getItemName($gicsels['post_id']), $usces->getItemSkuDisp($gicsels['post_id'], urldecode($gicsels['sku'])), $gitem['quant'], $gitem['price'] ); } $opts = !empty($gicsels['options']) ? $gicsels['options'] : []; $giordercart = isset($ordercart[$gisels['itemId']]) ? $ordercart[$gisels['itemId']] : null; if (is_array($giordercart) && isset($giordercart['cart_id'])) { $options = wcexics_api_get_group_item_ordercart_meta('option', $giordercart['cart_id']); $options = is_array($options) ? $options : []; foreach ($options as $opt) { $optv = maybe_unserialize($opt['meta_value']); if (is_array($optv)) { $optva = []; foreach ($optv as $optvav) { $optva[urlencode((string)$optvav)] = urlencode((string)$optvav); } $optv = $optva; } else { $optv = urlencode((string)$optv); } $opts[urlencode($opt['meta_key'])] = $optv; } } $rows[$gisels['groupId']]['groupLabel'] = $glabel; $rows[$gisels['groupId']]['groupItems'][] = [ 'name' => $itemLabel, 'itemId' => $gisels['itemId'], 'ordercart' => $giordercart, 'options' => $opts, ]; } return [ 'cserial' => $cserial, 'grouplabelmap' => $grouplabelmap, 'groupItems' => $sels['comboSetItems'], 'cartRows' => $rows, ]; } /** * Adds combo-set ID and group items inputs for use in `up_serialize` * * @author Evan D Shaw <evandanielshaw@gmail.com> * @param string $row * @param array $cart * @param array $materials * @return string */ public static function addComboSetItemsInput($row, $cart, $materials) { $sels = unserialize($materials['cart_row']['serial']); if (empty($sels['comboSetId']) || empty($sels['comboSetItems'])) { return $row; } $i = $materials['i']; $comboSetId = $sels['comboSetId']; $comboSetItems = serialize($sels['comboSetItems']); $row .= "<input type='hidden' name='comboSetId[{$i}]' value='{$comboSetId}' />"; $row .= "<input type='hidden' name='comboSetItems[{$i}]' value='{$comboSetItems}' />"; return $row; } }
- addComboSetItemsInput — Adds combo-set ID and group items inputs for use in `up_serialize`
- displayGroupItemsInCartItemName — Adds group items HTML underneath the cart item name
- displayGroupItemsInCartItemNameEmail — Adds group items underneath the cart item name in emails and PDF files
- getComboSetCart — Returns cart data for a combo-set cart row
- init — Registers hooks