Server : Apache/2.4.58 (Ubuntu) System : Linux yumsem00.cafe24.com 5.4.0-131-generic #147-Ubuntu SMP Fri Oct 14 17:07:22 UTC 2022 x86_64 User : root ( 0) PHP Version : 8.2.14 Disable Function : NONE Directory : /var/www/html/wp-content/plugins/kboard/class/ |
Upload File : |
<?php /** * KBoard 주문 정보 * @link www.cosmosfarm.com * @copyright Copyright 2021 Cosmosfarm. All rights reserved. * @license http://www.gnu.org/licenses/gpl.html */ class KBOrder { var $order_id; var $board; var $title; var $row; var $amount; var $items; var $items_count; var $use_points; public function __construct($order_id=''){ $this->row = new stdClass(); $this->amount = 0; $this->items = array(); $this->items_count = 0; $this->use_points = 0; } public function __get($key){ $key = sanitize_key($key); if(isset($this->row->{$key})){ return $this->row->{$key}; } return apply_filters('kboard_order_default_value', '', $key, $this->board); } public function __set($key, $value){ $key = sanitize_key($key); $value = sanitize_text_field($value); if($key == 'use_points'){ // 포인트 사용시 -값은 있을 수 없음 if($value <= 0) $value = 0; } $value = apply_filters('kboard_order_update_value', $value, $key, $this->board); $this->row->{$key} = $value; } public function initWithID($order_id){ $this->row = new stdClass(); $this->amount = 0; $this->items = array(); $this->items_count = 0; $this->use_points = 0; $this->order_id = intval($order_id); if($this->order_id){ $this->row = get_post($this->order_id); if(!$this->row){ $this->order_id = ''; } } } public function initWithImpUID($imp_uid){ $this->row = new stdClass(); $this->amount = 0; $this->items = array(); $this->items_count = 0; $this->use_points = 0; $this->order_id = 0; if($imp_uid){ $orders = get_posts(array( 'post_type' => 'kboard_order', 'meta_query' => array(array('key'=>'imp_uid', 'value'=>$imp_uid)) )); foreach($orders as $post){ $this->row = $post; $this->order_id = $post->ID; } } } public function initWithMerchantUID($merchant_uid){ $this->row = new stdClass(); $this->amount = 0; $this->items = array(); $this->items_count = 0; $this->use_points = 0; $this->order_id = 0; if($merchant_uid){ $orders = get_posts(array( 'post_type' => 'kboard_order', 'meta_query' => array(array('key'=>'merchant_uid', 'value'=>$merchant_uid)) )); foreach($orders as $post){ $this->row = $post; $this->order_id = $post->ID; } } } /** * 주문 정보를 초기화한다. */ public function initOrder(){ if(isset($_POST['kboard_order']) && is_array($_POST['kboard_order'])){ foreach($_POST['kboard_order'] as $key=>$value){ if($key == 'use_points'){ if($this->board->isUsePointOrder()){ // 실제로 포인트가 있는지 체크 해야함 $value = intval($value); $balance = mycred_get_users_balance(get_current_user_id()); if($balance < 0){ $balance = 0; } if($value > 0 && $value > $balance){ $value = $balance; } } else{ $value = 0; } } $this->{$key} = $value; } } } /** * 주문 항목을 초기화한다. */ public function initOrderItems(){ global $wpdb; $this->amount = 0; if(!$this->order_id && $this->board_id && isset($_POST['kboard_order_item']) && is_array($_POST['kboard_order_item'])){ foreach($_POST['kboard_order_item'][$this->board_id] as $order_item_key=>$order_item){ $order_item_key = intval($order_item_key); if(!$order_item_key) continue; if(!isset($order_item['uid']) || !$order_item['uid']) continue; if(!isset($order_item['quantity']) || $order_item['quantity'] <= 0) continue; if(isset($order_item['delete']) && $order_item['delete']) continue; $content = new KBContent(); $content->initWithUID($order_item['uid']); // 주문 가격 체크 if($content->option->price){ if(!isset($order_item['price']) || !$order_item['price']) continue; if($content->option->price != $order_item['price']) continue; } // 적립 포인트 체크 if(isset($order_item['reward_point']) && $order_item['reward_point']){ if($content->option->reward_point != $order_item['reward_point']) continue; } $item = new KBOrderItem(); foreach($order_item as $key=>$value){ $item->{$key} = $value; } $item->board = $this->board; $item->board_id = $this->board_id; $item->uid = intval($item->uid); $item->title = wp_strip_all_tags($item->title); $item->price = floatval($item->price); $item->use_points = floatval($this->use_points); $item->reward_point = floatval($item->reward_point); $item->order_status = $item->price > 0 ? 'pay_waiting' : 'paid'; $item->quantity = intval($item->quantity); $item->total = $item->price * $item->quantity; $item->total_reward_point = $item->reward_point * $item->quantity; if($content->member_uid){ $item_user = get_userdata($content->member_uid); $item->item_user_id = $item_user->ID; $item->item_user_name = $item_user->display_name; } $this->amount += $item->total; $this->items[$order_item_key] = $item; $this->items_count = count($this->items); // 총 결제금액 이상으로 포인트를 사용할 수 없다. if($this->board->isUsePointOrder() && $this->use_points > $this->amount){ $this->use_points = $this->amount; } // 주문 제목 생성 $first_item = reset($this->items); $this->title = wp_strip_all_tags($first_item->title); if($this->items_count > 1){ $this->title = $this->title . ' (+'.($this->items_count-1).')'; } } } else if($this->order_id){ $results = $wpdb->get_results("SELECT `order_item_id` FROM `{$wpdb->prefix}kboard_order_item` WHERE `order_id`='{$this->order_id}'"); foreach($results as $item){ $this->items[$item->order_item_id] = new KBOrderItem(); $this->items[$item->order_item_id]->initWithID($item->order_item_id); $this->items[$item->order_item_id]->board = $this->board; $this->items[$item->order_item_id]->total = $this->items[$item->order_item_id]->price * $this->items[$item->order_item_id]->quantity; $this->amount += $this->items[$item->order_item_id]->total; $this->items_count = count($this->items); } } else{ $this->items = array(); $this->items_count = 0; } } public function isEmptyCart(){ if(!$this->items){ return true; } return false; } /** * 주문 입력 필드 이름을 반환한다. * @param string $name * @return string */ public function getFieldName($name){ $name = sanitize_key($name); return "kboard_order[{$name}]"; } /** * 아이템 입력 필드 이름을 반환한다. * @param string $item_key * @param string $name * @return string */ public function getItemFieldName($item_key, $name){ if($this->board_id){ $item_key = intval($item_key); $name = sanitize_key($name); return "kboard_order_item[{$this->board_id}][{$item_key}][{$name}]"; } return ''; } public function getPasswordFieldName(){ return 'kboard_order_password'; } public function getTotal(){ return floatval($this->amount); } public function getAmount(){ return floatval($this->amount-$this->use_points); } /** * 주문을 저장한다. */ public function create(){ if($this->items_count > 0){ $post_password = isset($_POST[$this->getPasswordFieldName()]) ? $_POST[$this->getPasswordFieldName()] : ''; if(is_user_logged_in()){ $order_user = wp_get_current_user(); $this->user_id = $order_user->ID; $this->user_name = $order_user->display_name; } else{ $nonmember_key_1 = $this->email; $nonmember_key_2 = $this->name . $post_password; list($nonmember_key_1, $nonmember_key_2) = apply_filters('kboard_order_nonmember_key', array($nonmember_key_1, $nonmember_key_2), $this->board); $this->nonmember_key = kboard_hash($nonmember_key_1, $nonmember_key_2); $post_password = $nonmember_key_2; } $order_id = wp_insert_post(array( 'post_author' => $this->user_id, 'post_title' => $this->title, 'post_content' => '', 'post_status' => 'publish', 'comment_status'=> 'closed', 'ping_status' => 'closed', 'post_password' => wp_hash_password($post_password), 'post_name' => sanitize_title($this->title), 'post_parent' => $this->board_id, 'post_type' => 'kboard_order', 'meta_input' => get_object_vars($this->row) )); if(is_wp_error($order_id)){ $this->order_id = ''; } else{ $this->order_id = $order_id; } } else{ $this->order_id = ''; } } /** * 주문 정보를 저장한다. * @param array $data */ public function update($data){ if($this->order_id){ foreach($data as $meta_key=>$meta_value){ $this->{$meta_key} = $meta_value; update_post_meta($this->order_id, $meta_key, $meta_value); } } } /** * 주문 항목을 저장한다. */ public function createItems($data=array()){ if($this->order_id){ foreach($this->items as $item){ $item->board = $this->board; $item->board_id = $this->board_id; $item->order_id = $this->order_id; $item->create(); if($data){ $item->update($data); } } } } } ?>