serial = $serial; return $instance; } /** * Add to Cart */ public function inCart() { global $usces; $_POST = $usces->stripslashes_deep_post( $_POST ); if ( $_SERVER['HTTP_REFERER'] ) { $_SESSION['usces_previous_url'] = esc_url( $_SERVER['HTTP_REFERER'] ); } else { $_SESSION['usces_previous_url'] = str_replace( 'https://', 'http://', get_home_url() ) . '/'; } $ids = array_keys( $_POST['inCart'] ); $post_id = (int) $ids[0]; $skus = array_keys( $_POST['inCart'][ $post_id ] ); $sku = $skus[0]; $zaiko_id = $usces->getItemZaikoStatusId( $post_id, urldecode( $sku ) ); if ( false === $zaiko_id ) { header( 'HTTP/1.0 400 Bad request' ); die(); } $this->in_serialize( $post_id, $sku ); if ( ! isset( $_SESSION['usces_cart'][ $this->serial ]['quant'] ) ) { $_SESSION['usces_cart'][ $this->serial ]['quant'] = 0; } if ( isset( $_POST['quant'][ $post_id ][ $sku ] ) && ! WCUtils::is_blank( $_POST['quant'][ $post_id ][ $sku ] ) ) { $post_quant = (int) $_POST['quant'][ $post_id ][ $sku ]; $_SESSION['usces_cart'][ $this->serial ]['quant'] = apply_filters( 'usces_filter_post_quant', $post_quant, $_SESSION['usces_cart'][ $this->serial ]['quant'] ); } else { if ( isset( $_SESSION['usces_cart'][ $this->serial ] ) ) { $_SESSION['usces_cart'][ $this->serial ]['quant'] = apply_filters( 'usces_filter_post_quant', 1, $_SESSION['usces_cart'][ $this->serial ]['quant'] ); } else { $_SESSION['usces_cart'][ $this->serial ]['quant'] = 1; } $_SESSION['usces_cart'][ $this->serial ]['quant'] = apply_filters( 'usces_filter_inCart_quant', $_SESSION['usces_cart'][ $this->serial ]['quant'] ); } $price = $this->get_realprice( $post_id, $sku, $_SESSION['usces_cart'][ $this->serial ]['quant'], null, $unit_price ); $price = apply_filters( 'usces_filter_inCart_price', $price, $this->serial ); $_SESSION['usces_cart'][ $this->serial ]['price'] = $price; $_SESSION['usces_cart'][ $this->serial ]['unit_price'] = $unit_price; if ( isset( $_POST['advance'] ) ) { $_SESSION['usces_cart'][ $this->serial ]['advance'] = $this->wc_serialize( $_POST['advance'] ); } unset( $_SESSION['usces_entry']['order']['usedpoint'] ); do_action( 'usces_action_after_inCart', $this->serial ); } /** * Update Cart */ public function upCart() { if ( ! isset( $_POST['quant'] ) ) { return false; } global $usces; $_POST = $usces->stripslashes_deep_post( $_POST ); $keys = array_keys( $_SESSION['usces_cart'] ); $serial_option = apply_filters( 'usces_filter_upcart_serial_option', false ); $index = 0; foreach ( $_POST['quant'] as $vs ) { if ( ! is_array( $vs ) ) { break; } if ( ! isset( $_POST['quant'][ $index ] ) ) { continue; } $res = apply_filters( 'usces_filter_upCart_check', '', $index, $vs ); if ( '' !== $res ) { return $res; } $ids = array_keys( $vs ); $post_id = $ids[0]; $skus = array_keys( $vs[ $post_id ] ); $sku = $skus[0]; $sku_decode = urldecode( $sku ); $skus = $usces->get_skus( $post_id, 'code' ); if ( ! $skus || ! isset( $skus[ $sku_decode ] ) ) { continue; } if ( $serial_option ) { $this->up_serialize( $index, $post_id, $sku ); } else { if ( ! isset( $keys[ $index ] ) ) { /* * The cart in the session has fewer rows than the posted data * ( session GC, deletion in another tab, etc. ). * Skip it, because a null key is converted to "" and would * write a broken row into the session. */ $index++; continue; } $this->serial = $keys[ $index ]; } if ( ! WCUtils::is_blank( $_POST['quant'][ $index ][ $post_id ][ $sku ] ) ) { $_SESSION['usces_cart'][ $this->serial ]['quant'] = (int) $_POST['quant'][ $index ][ $post_id ][ $sku ]; $_SESSION['usces_cart'][ $this->serial ]['advance'] = isset( $_POST['advance'][ $index ][ $post_id ][ $sku ] ) ? $_POST['advance'][ $index ][ $post_id ][ $sku ] : array(); // if ( isset( $_POST['order_action'] ) ) { // $price = (int) $_POST['skuPrice'][ $index ][ $post_id ][ $sku ]; // } else { $price = $this->get_realprice( $post_id, $sku, $_SESSION['usces_cart'][ $this->serial ]['quant'] ); $price = apply_filters( 'usces_filter_upCart_price', $price, $this->serial, $index ); // } $_SESSION['usces_cart'][ $this->serial ]['price'] = $price; } $index++; } unset( $_SESSION['usces_entry']['order']['usedpoint'] ); do_action( 'usces_action_after_upCart' ); return false; } /** * Add to Cart additional information * * @param string $serial Serial key. * @param string $name Advance name. * @param string $key Advance key. * @param mixed $value Advance value. */ public function inCart_advance( $serial, $name, $key, $value ) { $_SESSION['usces_cart'][ $serial ]['advance'][ $name ][ $key ] = $value; } /** * Serialize value * * @param array $value Value. * @return string */ public function wc_serialize( $value ) { $out = null; if ( ! empty( $value ) ) { $out = urlencode( json_encode( $value ) ); } return $out; } /** * Unserialize value * * @param string $str Value. * @return array */ public function wc_unserialize( $str ) { $out = array(); if ( ! empty( $str ) ) { $out = json_decode( urldecode( $str ), true ); } return $out; } /** * Remove Cart */ public function del_row() { $indexs = array_keys( $_POST['delButton'] ); $index = $indexs[0]; $ids = array_keys( $_POST['delButton'][ $index ] ); $post_id = $ids[0]; $skus = array_keys( $_POST['delButton'][ $index ][ $post_id ] ); $sku = $skus[0]; $this->up_serialize( $index, $post_id, $sku ); do_action( 'usces_cart_del_row', $index ); if ( isset( $_SESSION['usces_cart'][ $this->serial ] ) ) { unset( $_SESSION['usces_cart'][ $this->serial ] ); } unset( $_SESSION['usces_entry']['order']['usedpoint'] ); do_action( 'usces_action_after_cart_del_row', $index ); } /** * Number of rows in cart * * @return int|bool */ public function num_row() { if ( ! isset( $_SESSION['usces_cart'] ) ) { return false; } $num = ( is_array( $_SESSION['usces_cart'] ) ) ? count( $_SESSION['usces_cart'] ) : 0; if ( $num > 0 ) { return $num; } else { return false; } } /** * Clear Cart * alias crear_cart() */ public function clear_cart() { $this->crear_cart(); } /** * Clear Cart */ public function crear_cart() { $_SESSION['usces_cart'] = array(); $_SESSION['usces_entry'] = array(); do_action( 'usces_action_after_clear_cart' ); } /** * Get Cart * * @return array */ public function get_cart() { if ( ! isset( $_SESSION['usces_cart'] ) ) { return array(); } $rows = array(); $i = 0; foreach ( (array) $_SESSION['usces_cart'] as $serial => $qua ) { $row = $this->key_unserialize( $serial ); if ( false === $row ) { /* A row that cannot be restored is unusable for display and ordering, so remove it from the session. */ unset( $_SESSION['usces_cart'][ $serial ] ); continue; } $rows[ $i ] = $row; $i++; } return $rows; } /** * Serial key creation * * @param int $id Post ID. * @param string $sku SKU code. */ public function in_serialize( $id, $sku ) { global $usces; $_POST = $usces->stripslashes_deep_post( $_POST ); $pots = array(); $option_field = usces_get_opts( $id, 'name' ); foreach ( $option_field as $opkey => $opval ) { if ( ! isset( $_POST['itemOption'][ $id ][ $sku ][ urlencode( $opkey ) ] ) ) { if ( 3 === (int) $opval['means'] || 4 === (int) $opval['means'] ) { $pots[ urlencode( $opkey ) ] = ''; } } } if ( isset( $_POST['itemOption'][ $id ][ $sku ] ) ) { foreach ( $_POST['itemOption'][ $id ][ $sku ] as $key => $value ) { if ( ! isset( $option_field[ urldecode( $key ) ] ) ) { continue; } $option = $option_field[ urldecode( $key ) ]; if ( 3 === (int) $option['means'] || 4 === (int) $option['means'] ) { if ( is_array( $value ) ) { foreach ( $value as $k => $v ) { $v = trim( wel_safe_text_serialize( $v ) ); $pots[ $key ][ $v ] = $v; } } else { $pots[ $key ] = wel_safe_text_serialize( $value ); } } else { if ( is_array( $value ) ) { foreach ( $value as $k => $v ) { $pots[ $key ][ urlencode( trim( $v ) ) ] = urlencode( trim( $v ) ); } } else { $pots[ $key ] = urlencode( $value ); } } } ksort( $pots ); $sels[ $id ][ $sku ] = $pots; } else { if ( empty( $pots ) ) { $sels[ $id ][ $sku ] = 0; } else { $sels[ $id ][ $sku ] = $pots; } } $sels = apply_filters( 'usces_filter_in_serialize', $sels, $id, $sku ); $this->serial = serialize( $sels ); } /** * Serial key recreation * * @param int $index Cart index. * @param int $id Post ID. * @param string $sku SKU code. */ public function up_serialize( $index, $id, $sku ) { global $usces; $_POST = $usces->stripslashes_deep_post( $_POST ); $pots = array(); $option_field = usces_get_opts( $id, 'name' ); if ( isset( $_POST['itemOption'][ $index ][ $id ][ $sku ] ) && is_array( $_POST['itemOption'][ $index ][ $id ][ $sku ] ) ) { foreach ( $_POST['itemOption'][ $index ][ $id ][ $sku ] as $key => $value ) { if ( is_array( $value ) ) { foreach ( $value as $k => $v ) { $v = wel_safe_text_serialize( $v ); $pots[ $key ][ $v ] = $v; } } else { $pots[ $key ] = wel_safe_text_serialize( $value ); } } ksort( $pots ); $sels[ $id ][ $sku ] = $pots; } else { $sels[ $id ][ $sku ] = 0; } $sels = apply_filters( 'usces_filter_up_serialize', $sels, $index, $id, $sku ); $this->serial = serialize( $sels ); } /** * Serial key decompression * * @param string $serial Serial key. * @return array|false False if the serial key cannot be restored ( unserialize failure or invalid format ). */ public function key_unserialize( $serial ) { $array = wel_safe_unserialize( $serial ); if ( ! is_array( $array ) || empty( $array ) ) { return false; } $ids = array_keys( $array ); if ( ! is_array( $array[ $ids[0] ] ) || empty( $array[ $ids[0] ] ) ) { return false; } $skus = array_keys( $array[ $ids[0] ] ); $row['serial'] = $serial; $row['post_id'] = $ids[0]; $row['sku'] = $skus[0]; $options = $array[ $ids[0] ][ $skus[0] ]; $opt_fields = usces_get_opts( $row['post_id'], 'sort' ); $new_opt = array(); foreach ( $opt_fields as $key => $field ) { $name = urlencode( $field['name'] ); $new_opt[ $name ] = isset( $options[ $name ] ) ? $options[ $name ] : ''; } $row['options'] = apply_filters( 'usces_filter_key_unserialize_options', $new_opt, $ids[0], $skus[0], $serial ); $row['price'] = isset( $_SESSION['usces_cart'][ $serial ]['price'] ) ? $_SESSION['usces_cart'][ $serial ]['price'] : 0; $row['unit_price'] = isset( $_SESSION['usces_cart'][ $serial ]['unit_price'] ) ? $_SESSION['usces_cart'][ $serial ]['unit_price'] : 0; $row['quantity'] = isset( $_SESSION['usces_cart'][ $serial ]['quant'] ) ? $_SESSION['usces_cart'][ $serial ]['quant'] : 0; $row['advance'] = isset( $_SESSION['usces_cart'][ $serial ]['advance'] ) ? $_SESSION['usces_cart'][ $serial ]['advance'] : ''; return $row; } /** * Is condition * * @return bool */ public function is_order_condition() { if ( isset( $_SESSION['usces_entry']['condition'] ) ) { return true; } else { return false; } } /** * Set condition * * @param array $conditions Condition. */ public function set_order_condition( $conditions ) { foreach ( $conditions as $key => $value ) { $_SESSION['usces_entry']['condition'][ $key ] = $value; } } /** * Get condition * * @return mixed */ public function get_order_condition() { if ( isset( $_SESSION['usces_entry']['condition'] ) ) { return $_SESSION['usces_entry']['condition']; } else { return null; } } /** * Set entry information * * @param array $array Entry data. */ public function set_order_entry( $array ) { foreach ( $array as $key => $value ) { $_SESSION['usces_entry']['order'][ $key ] = $value; } } /** * Get entry information * * @param string $key Key. * @return mixed */ public function get_order_entry( $key ) { if ( isset( $_SESSION['usces_entry']['order'][ $key ] ) ) { return $_SESSION['usces_entry']['order'][ $key ]; } else { return null; } } /** * Set entry data */ public function entry() { global $usces; $_POST = $usces->stripslashes_deep_post( $_POST ); if ( isset( $_SESSION['usces_member']['ID'] ) && ! empty( $_SESSION['usces_member']['ID'] ) ) { $usces->set_member_session_data( $_SESSION['usces_member']['ID'] ); if ( 'confirm' !== $usces->page ) { foreach ( $_SESSION['usces_member'] as $key => $value ) { if ( 'custom_member' === $key ) { unset( $_SESSION['usces_entry']['custom_member'] ); foreach ( $_SESSION['usces_member']['custom_member'] as $mbkey => $mbvalue ) { if ( empty( $_SESSION['usces_entry']['custom_customer'][ $mbkey] ) ) { if ( is_array( $mbvalue ) ) { foreach ( $mbvalue as $k => $v ) { $_SESSION['usces_entry']['custom_customer'][ $mbkey ][ $v ] = $v; } } else { $_SESSION['usces_entry']['custom_customer'][ $mbkey ] = $mbvalue; } } } } else { if ( 'country' === $key && empty( $value ) ) { $_SESSION['usces_entry']['customer'][ $key ] = usces_get_base_country(); } else { $_SESSION['usces_entry']['customer'][ $key ] = trim( $value ); } } } } } if ( isset( $_POST['customer'] ) ) { foreach ( $_POST['customer'] as $key => $value ) { if ( 'country' === $key && empty( $value ) ) { $_SESSION['usces_entry']['customer'][ $key ] = usces_get_base_country(); } else { $_SESSION['usces_entry']['customer'][ $key ] = trim( $value ); } } } if ( isset( $_POST['delivery'] ) ) { foreach ( $_POST['delivery'] as $key => $value ) { if ( 'country' === $key && empty( $value ) ) { $_SESSION['usces_entry']['delivery'][ $key ] = usces_get_base_country(); } else { $_SESSION['usces_entry']['delivery'][ $key ] = trim( $value ); } } } if ( isset( $_POST['delivery']['delivery_flag'] ) && 0 === (int) $_POST['delivery']['delivery_flag'] ) { foreach ( $_SESSION['usces_entry']['customer'] as $key => $value ) { if ( 'country' === $key && empty( $value ) ) { $_SESSION['usces_entry']['delivery'][ $key ] = usces_get_base_country(); } else { $_SESSION['usces_entry']['delivery'][ $key ] = trim( $value ); } } } if ( isset( $_POST['offer'] ) ) { foreach ( $_POST['offer'] as $key => $value ) { $_SESSION['usces_entry']['order'][ $key ] = trim( $value ); } } if ( isset( $_POST['reserve'] ) ) { foreach ( $_POST['reserve'] as $key => $value ) { $_SESSION['usces_entry']['reserve'][ $key ] = trim( wel_safe_text_serialize( $value ) ); } } if ( isset( $_POST['custom_order'] ) ) { unset( $_SESSION['usces_entry']['custom_order'] ); $csod_meta = usces_has_custom_field_meta( 'order' ); foreach ( $_POST['custom_order'] as $key => $value ) { if ( ! is_array( $csod_meta ) || ! isset( $csod_meta[ $key ] ) ) { continue; } $value = wel_safe_text_serialize( $value ); if ( is_array( $value ) ) { foreach ( $value as $k => $v ) { $_SESSION['usces_entry']['custom_order'][ $key ][ trim( $v ) ] = trim( $v ); } } else { $_SESSION['usces_entry']['custom_order'][ $key ] = trim( $value ); } } } if ( isset( $_SESSION['usces_entry']['delivery']['delivery_flag'] ) && 0 === (int) $_SESSION['usces_entry']['delivery']['delivery_flag'] ) { $this->set_custom_customer_delivery(); } if ( isset( $_POST['custom_customer'] ) ) { unset( $_SESSION['usces_entry']['custom_customer'] ); foreach ( $_POST['custom_customer'] as $key => $value ) { $value = wel_safe_text_serialize( $value ); if ( is_array( $value ) ) { foreach ( $value as $k => $v ) { $_SESSION['usces_entry']['custom_customer'][ $key ][ trim( $v ) ] = trim( $v ); } } else { $_SESSION['usces_entry']['custom_customer'][ $key ] = trim( $value ); } } } if ( isset( $_POST['custom_delivery'] ) ) { unset( $_SESSION['usces_entry']['custom_delivery'] ); foreach ( $_POST['custom_delivery'] as $key => $value ) { $value = wel_safe_text_serialize( $value ); if ( is_array( $value ) ) { foreach ( $value as $k => $v ) { $_SESSION['usces_entry']['custom_delivery'][ $key ][ trim( $v ) ] = trim( $v ); } } else { $_SESSION['usces_entry']['custom_delivery'][ $key ] = trim( $value ); } } } if ( isset( $_POST['delivery']['delivery_flag'] ) && 0 === (int) $_POST['delivery']['delivery_flag'] ) { $this->set_custom_customer_delivery(); } } /** * Get entry data * * @return array */ public function get_entry() { $res['customer'] = array( 'mailaddress1' => '', 'mailaddress2' => '', 'password1' => '', 'password2' => '', 'name1' => '', 'name2' => '', 'name3' => '', 'name4' => '', 'zipcode' => '', 'address1' => '', 'address2' => '', 'address3' => '', 'tel' => '', 'fax' => '', 'country' => '', 'pref' => '', ); if ( isset( $_SESSION['usces_entry']['customer'] ) ) { foreach ( (array) $_SESSION['usces_entry']['customer'] as $key => $val ) { $res['customer'][ $key ] = $val; } } $res['delivery'] = array( 'name1' => '', 'name2' => '', 'name3' => '', 'name4' => '', 'zipcode' => '', 'address1' => '', 'address2' => '', 'address3' => '', 'tel' => '', 'fax' => '', 'country' => '', 'pref' => '', 'delivery_flag' => '0', ); if ( isset( $_SESSION['usces_entry']['delivery'] ) ) { foreach ( (array) $_SESSION['usces_entry']['delivery'] as $key => $val ) { $res['delivery'][ $key ] = $val; } } $res['order'] = array( 'usedpoint' => '', 'total_items_price' => '', 'discount' => '', 'shipping_charge' => '', 'cod_fee' => '', 'shipping_charge' => '', 'payment_name' => '', 'delivery_method' => '', 'delivery_date' => '', 'delivery_time' => '', 'total_full_price' => '', 'note' => '', 'tax' => '', 'payment_name' => '', 'delidue_date' => '', ); if ( isset( $_SESSION['usces_entry']['order'] ) ) { foreach ( (array) $_SESSION['usces_entry']['order'] as $key => $val ) { $res['order'][ $key ] = $val; } } if ( isset( $_SESSION['usces_entry']['reserve'] ) ) { $res['reserve'] = $_SESSION['usces_entry']['reserve']; } else { $res['reserve'] = null; } if ( isset( $_SESSION['usces_entry']['condition'] ) ) { $res['condition'] = $_SESSION['usces_entry']['condition']; } else { $res['condition'] = null; } if ( isset( $_SESSION['usces_entry']['custom_order'] ) ) { $res['custom_order'] = $_SESSION['usces_entry']['custom_order']; } else { $res['custom_order'] = null; } if ( isset( $_SESSION['usces_entry']['custom_customer'] ) ) { $res['custom_customer'] = $_SESSION['usces_entry']['custom_customer']; } else { $res['custom_customer'] = null; } if ( isset( $_SESSION['usces_entry']['custom_delivery'] ) ) { $res['custom_delivery'] = $_SESSION['usces_entry']['custom_delivery']; } else { $res['custom_delivery'] = null; } return $res; } /** * Get sales price * * @param int $post_id Post ID. * @param string $sku SKU code. * @param int $quant Quantity. * @param float $price Sales price. * @param float $unit_price Unit price. * @return float */ public function get_realprice( $post_id, $sku, $quant, $price = null, &$unit_price = null ) { global $usces; $sku = urldecode( $sku ); $skus = $usces->get_skus( $post_id, 'code' ); if ( null === $price ) { $p = isset( $skus[ $sku ]['price'] ) ? $skus[ $sku ]['price'] : ''; } else { $p = $price; } $p = apply_filters( 'usces_filter_realprice', $p, $this->serial ); $unit_price = $p; if ( isset( $skus[ $sku ]['price'] ) && ! $skus[ $sku ]['gp'] ) { return $p; } $realprice = usces_get_gp_price( $post_id, $p, $quant ); return $realprice; } /** * Set Pre-Order ID * * @param string $id Pre-Order ID. * @return void */ public function set_pre_order_id( $id ) { $_SESSION['usces_entry']['reserve']['pre_order_id'] = $id; } /** * Transcribe membership information to shipping address information * * @return void */ public function set_custom_customer_delivery() { if ( isset( $_SESSION['usces_entry']['custom_customer'] ) ) { $delivery = array(); $csde_meta = usces_has_custom_field_meta( 'delivery' ); if ( ! empty( $csde_meta ) && is_array( $csde_meta ) ) { foreach ( $csde_meta as $key => $entry ) { $delivery[ $key ] = $key; } } foreach ( $_SESSION['usces_entry']['custom_customer'] as $mbkey => $mbvalue ) { if ( array_key_exists( $mbkey, $delivery ) ) { if ( is_array( $mbvalue ) ) { foreach ( $mbvalue as $k => $v ) { $_SESSION['usces_entry']['custom_delivery'][ $mbkey ][ $v ] = $v; } } else { $_SESSION['usces_entry']['custom_delivery'][ $mbkey ] = $mbvalue; } } } } if ( ! empty( $_SESSION['usces_entry']['custom_delivery'] ) ) { foreach ( $_SESSION['usces_entry']['custom_delivery'] as $key => $value ) { if ( ! isset( $_SESSION['usces_entry']['custom_customer'] ) || ! array_key_exists( $key, $_SESSION['usces_entry']['custom_customer'] ) ) { // Set item empty. if ( is_array( $value ) ) { foreach ( $value as $k => $v ) { $_SESSION['usces_entry']['custom_delivery'][ $key ][ $v ] = ''; } } else { $_SESSION['usces_entry']['custom_delivery'][ $key ] = ''; } } } } } }