• プラグイン一覧
    - WCEX Item Combo Set
    - WCEX Amazon Pay
    - WCEX Wishlist お気に入りリスト
  • リリース情報
  • お役立ちコラム
  • お問い合わせ
  • サポート
    • よくある質問
      • WCEX Amazon Pay
      • WCEX Wishlist お気に入りリスト
      • wcex-item-combo-set
    • リファレンス
      • WCEX Amazon Pay
      • WCEX Wishlist お気に入りリスト
      • wcex-item-combo-set
新規会員登録
ログイン
新規会員登録
ログイン
カート
  • プラグイン一覧
    • - WCEX Item Combo Set
    • - WCEX Amazon Pay
    • - WCEX Wishlist お気に入りリスト
  • リリース情報
  • お役立ちコラム
  • サポート
    • - よくある質問
      • - WCEX Amazon Pay
      • - WCEX Wishlist お気に入りリスト
      • - wcex-item-combo-set
    • - リファレンス
      • - WCEX Amazon Pay
      • - WCEX Wishlist お気に入りリスト
      • - wcex-item-combo-set
  • お問い合わせ
Aivec APPs > WCEX Wishlist お気に入りリスト > クラス > Validation
レファレンス
バージョン
3.1.6
絞り込み:
目的から探す
お気に入りデータを取得 お気に入りページのHTMLを取得 スナックバーアラート

目次

  • ソース
  • 関数

フック

  • アクション
  • フィルター

ファンクション

  • データ取得
  • ユーティリティー
  • 条件判断
  • 表示系

クラス

Validation

Contains methods that verify whether an item can be added to the wishlist or cart

ソース #ソース

ファイル: src/API/Validation.php

class Validation
{
    /**
     * Master object
     *
     * @var Master
     */
    private $master;

    /**
     * Sets up `Validation`
     *
     * @author Evan D Shaw <evandanielshaw@gmail.com>
     * @param Master $master
     * @return void
     */
    public function __construct(Master $master) {
        $this->master = $master;
    }

    /**
     * Returns `GenericError` instance if the user is not logged in
     *
     * @author Evan D Shaw <evandanielshaw@gmail.com>
     * @return GenericError|void
     */
    public function isLoggedIn() {
        if (!usces_is_login()) {
            return $this->master->estore->getErrorResponse(Store::NOT_LOGGED_IN);
        }
    }

    /**
     * Returns `GenericError` instance if the item has been deleted or put in the 'trash',
     * `true` otherwise
     *
     * @author Evan D Shaw <evandanielshaw@gmail.com>
     * @global \wpdb $wpdb
     * @param int    $post_id
     * @param string $sku Optional. This is only used for error message construction.
     * @return GenericError|true
     */
    public function itemExists($post_id, $sku = '') {
        global $wpdb;

        $p = get_post($post_id);
        if ($p === null) {
            return $this->master->estore->getErrorResponse(Store::ITEM_DELETED, [$post_id], [$sku]);
        }

        $pstatus = $wpdb->get_var($wpdb->prepare("SELECT post_status FROM {$wpdb->posts} WHERE ID = %d", $post_id));
        if ($pstatus === 'trash') {
            return $this->master->estore->getErrorResponse(Store::POST_IN_TRASH, [$post_id], [$sku]);
        }

        return true;
    }

    /**
     * Checks for dlseller cart restrictions and returns a descriptive error if the item is not allowed
     * to be added to cart
     *
     * @author Evan D Shaw <evandanielshaw@gmail.com>
     * @param int $post_id
     * @return GenericError|true
     */
    public function cartAllowsThisItem($post_id) {
        global $usces;

        if (!defined('WCEX_DLSELLER')) {
            // don't worry about charge types if dlseller isn't active
            return true;
        }

        if (empty($usces->cart->num_row())) {
            return true;
        }

        $chargingtype = $usces->getItemChargingType($post_id);
        $chargingtype = !empty($chargingtype) ? strtolower($chargingtype) : '';
        $carts = $usces->cart->get_cart();
        $carts = !empty($carts) ? (array)$carts : [];

        // check if a continue charge type item already exists in cart
        $exists = false;
        foreach ($carts as $cart) {
            $cartitemct = $usces->getItemChargingType($cart['post_id']);
            $cartitemct = !empty($cartitemct) ? strtolower($cartitemct) : '';
            if ($cartitemct === 'continue') {
                $exists = true;
                break;
            }
        }

        if ($exists === true) {
            if ($chargingtype === 'continue') {
                $emessage = __('You can add only one continuation charging item in your shopping cart.', 'dlseller');
                return $this->master->estore->getErrorResponse(
                    Store::CART_CONTAINS_CONTINUE_CHARGE,
                    [$emessage],
                    [$emessage]
                );
            }

            $emessage = __('This is the continuation charging item. If you want to add this item, you have to clear your cart. Is it ok to clear your cart?', 'dlseller');
            return $this->master->estore->getErrorResponse(
                Store::CART_CONTAINS_CONTINUE_CHARGE,
                [$emessage],
                [$emessage]
            );
        }

        if ($chargingtype === 'continue') {
            $emessage = __(
                'You have the continuation charging item in your shopping cart. If you want to add this item, you have to clear the item in your cart. Is it ok to clear your cart?',
                'dlseller'
            );
            return $this->master->estore->getErrorResponse(
                Store::CONTINUE_CHARGE_REQUIRES_EMPTY_CART,
                [$emessage],
                [$emessage]
            );
        }

        return true;
    }

    /**
     * Returns `GenericError` instance if the given item and quantity prevents adding
     * to cart because of stock, `true` otherwise
     *
     * @author Evan D Shaw <evandanielshaw@gmail.com>
     * @param int    $post_id
     * @param string $sku **MUST** be urlencoded
     * @param int    $quant
     * @return GenericError|true
     */
    public function inStock($post_id, $sku, $quant = 1) {
        global $usces;

        $quant = (int)$quant > 0 ? (int)$quant : 1;
        $sku_code = urldecode($sku);
        $stock = $usces->getItemZaikoNum($post_id, $sku_code);
        if (!isset($stocks[$post_id][$sku])) {
            if (!WCUtils::is_blank($stock)) {
                $stocks[$post_id][$sku] = $stock;
            } else {
                $stocks[$post_id][$sku] = null;
            }
        }
        $checkstock = $stocks[$post_id][$sku];
        $stocks[$post_id][$sku] = $stocks[$post_id][$sku] - $quant;
        $itemRestriction = get_post_meta($post_id, '_itemRestriction', true);
        $itemOrderAcceptable = $usces->getItemOrderAcceptable($post_id);
        $post_status = get_post_status($post_id);

        if (
            !$usces->is_item_zaiko($post_id, $sku_code)
            || ($itemOrderAcceptable != 1
            && WCUtils::is_zero($stock))
            || 'publish' != $post_status
        ) {
            return $this->master->estore->getErrorResponse(Store::ITEM_SOLD_OUT, [$sku], [$sku]);
        }

        if (
            $quant > (int)$itemRestriction
            && !WCUtils::is_blank($itemRestriction)
            && !WCUtils::is_zero($itemRestriction)
        ) {
            return $this->master->estore->getErrorResponse(
                Store::PER_PURCHASE_LIMIT_EXCEEDED,
                [$itemRestriction, $sku],
                [$itemRestriction, $sku]
            );
        }

        if (
            $itemOrderAcceptable != 1
            && 0 > $stocks[$post_id][$sku]
            && !WCUtils::is_blank($stock)
        ) {
            return $this->master->estore->getErrorResponse(
                Store::QUANT_EXCEEDS_STOCK_LIMIT,
                [$sku, $checkstock],
                [$sku, $checkstock]
            );
        }

        return true;
    }

    /**
     * Validates option fields and returns a `GenericError` instance if any required options are
     * blank or if any input values are malformed. Returns `true` if all checks pass.
     *
     * @author Evan D Shaw <evandanielshaw@gmail.com>
     * @param int    $post_id
     * @param string $sku If using `wcex_widget_cart`, **MUST** be URL *decoded*. If not using
     *                    `wcex_widget_cart`, **MUST** be URL *encoded*.
     *
     *                    NOTE: the URL encoded SKU **MUST NOT** be encoded with `rawurlencode`.
     *                    Use `urlencode` instead.
     * @param array  $item_option
     * @return GenericError|true
     */
    public function requiredOptionsProvided($post_id, $sku, array $item_option) {
        global $usces;

        $errorsm = [];
        $ioptkeys = $usces->get_itemOptionKey($post_id, true);
        if ($ioptkeys) {
            foreach ($ioptkeys as $key => $value) {
                $optValues = $usces->get_itemOptions(urldecode($value), $post_id);
                if (0 == $optValues['means']) { // select
                    if ($optValues['essential'] && '#NONE#' == $item_option[$post_id][$sku][$value]) {
                        $errorsm[] = sprintf(__('Chose the %s', 'usces'), urldecode($value));
                    }
                } elseif (1 == $optValues['means']) { // multiselect
                    if ($optValues['essential']) {
                        $mselect = 0;
                        foreach ((array)$item_option[$post_id][$sku][$value] as $mvalue) {
                            if (!empty($mvalue) && '#NONE#' != $mvalue) {
                                $mselect++;
                            }
                        }
                        if ($mselect == 0) {
                            $errorsm[] = sprintf(__('Chose the %s', 'usces'), urldecode($value));
                        }
                    }
                } elseif (in_array($optValues['means'], [3, 4])) { // radio & checkbox
                    if ($optValues['essential']) {
                        if (!isset($item_option[$post_id][$sku][$value])) {
                            $errorsm[] = sprintf(__('Chose the %s', 'usces'), urldecode($value));
                        }
                    }
                } else { // text
                    if ($optValues['essential'] && WCUtils::is_blank($item_option[$post_id][$sku][$value])) {
                        $errorsm[] = sprintf(__('Input the %s', 'usces'), urldecode($value));
                    }
                }
            }
        }

        if (!empty($errorsm)) {
            return $this->master->estore->getErrorResponse(Store::REQUIRED_OPTIONS_MISSING, [$errorsm], [$errorsm]);
        }

        return true;
    }

    /**
     * Checks whether the provided option array is valid for an item
     *
     * @author Evan D Shaw <evandanielshaw@gmail.com>
     * @param int   $post_id
     * @param array $item_option
     * @return bool
     */
    public static function optionsAreValid($post_id, array $item_option) {
        global $usces;

        $ioptkeys = $usces->get_itemOptionKey($post_id, true);
        $ioptkeys = is_array($ioptkeys) ? $ioptkeys : [];

        // first, make sure our option array contains options that actually exist for the item
        foreach ((array)$item_option as $key => $val) {
            if (!in_array($key, $ioptkeys, true)) {
                return false;
            }
        }

        // next, make sure selected values actually exist for their respective options and that
        // required options have values
        foreach ($ioptkeys as $key => $value) {
            $optValues = $usces->get_itemOptions(urldecode($value), $post_id);
            $means = (int)$optValues['means'];
            $essential = (int)$optValues['essential'];
            $curval = isset($item_option[$value]) ? $item_option[$value] : null;
            if (0 === $means) { // select
                if ($essential && ('#NONE#' == $curval || $curval === null)) {
                    return false;
                }
            } elseif (1 === $means) { // multiselect
                if ($essential) {
                    $mselect = 0;
                    foreach ((array)$curval as $mvalue) {
                        if (!empty($mvalue) && '#NONE#' != $mvalue) {
                            $mselect++;
                        }
                    }
                    if ($mselect == 0) {
                        return false;
                    }
                }
            } elseif (in_array($means, [3, 4], true)) { // radio & checkbox
                if ($essential) {
                    if (empty($curval)) {
                        return false;
                    }
                }
            } else { // text
                if ($essential && WCUtils::is_blank($curval)) {
                    return false;
                }
            }

            // an empty value here means that the current option is not required, so an
            // existence check for the value on a selection based option isn't necessary
            if (empty($curval)) {
                continue;
            }

            // check whether the selection exists for the current option
            switch ($means) {
                case 0:
                case 3:
                    $possiblevals = array_map(function ($v) {
                        return trim($v);
                    }, explode("\n", $optValues['value']));
                    if (!in_array(urldecode($curval), $possiblevals, true)) {
                        return false;
                    }
                    break;
                case 1:
                case 4:
                    $possiblevals = array_map(function ($v) {
                        return trim($v);
                    }, explode("\n", $optValues['value']));
                    if (defined('WCEX_WIDGET_CART') && $means === 1) {
                        // `wcex_widget_cart` concatenates multi-select values with a comma for serialization
                        $curval = explode(',', urldecode($curval[array_keys($curval)[0]]));
                    }
                    foreach ($curval as $selkey => $selval) {
                        $selval = defined('WCEX_WIDGET_CART') && $means === 1 ? $selval : urldecode($selval);
                        if (!in_array($selval, $possiblevals, true)) {
                            return false;
                        }
                    }
                    break;
            }
        }

        return true;
    }
}

ソースを伸ばす ソースを縮める


関数 #関数

Top ↑

  • __construct — Sets up `Validation`
  • cartAllowsThisItem — Checks for dlseller cart restrictions and returns a descriptive error if the item is not allowed to be added to cart
  • inStock — Returns `GenericError` instance if the given item and quantity prevents adding to cart because of stock, `true` otherwise
  • isLoggedIn — Returns `GenericError` instance if the user is not logged in
  • itemExists — Returns `GenericError` instance if the item has been deleted or put in the 'trash', `true` otherwise
  • optionsAreValid — Checks whether the provided option array is valid for an item
  • requiredOptionsProvided — Validates option fields and returns a `GenericError` instance if any required options are blank or if any input values are malformed. Returns `true` if all checks pass.

  • 新規会員登録
  • ログイン
    • プラグイン一覧
    • 会社概要
    • リリース情報
    • よくある質問
    • お役立ちコラム
    • お問い合わせ
    • 個人情報保護方針
    • 特定商取引法に基づく表記
    • 情報セキュリティ基本方針
    • 利用規約

アイベック合同会社は「Welcart」「Amazon Pay」の公式パートナーです。

※Amazon、Amazon.co.jp、Amazon Payおよびそれらのロゴは、Amazon.com,inc.またはその関連会社の商標です。

© 2025 Aivec llc All Rights Reserved.