File: /var/www/html/wp-content/plugins/ganryu_shop/action/Ajax.php.bak20160824
<?php
require_once dirname(__FILE__).'/Abstract.php';
class ganryu_shop_action_Ajax extends ganryu_shop_action_Abstract{
function config(){
$data = array();
$data['point_rate_base'] = $this->p('point_rate_base');
$msg = array();
if (strlen($data['point_rate_base']) == 0){
$msg['point_rate_base'] = "ポイントレートが設定されていません";
}
else if (!grys_check_number($data['point_rate_base']) ){
$msg['point_rate_base'] = "ポイントレートが数値で設定されていません";
}
if ($msg){
$this->js_output(array('success'=>1, 'updated'=>0, 'message'=>$msg));
return;
}
$this->begin();
$cf = $this->loadModel('Config');
$res = $cf->setConfigArray($data);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$this->finish(true);
$this->js_output(array('success'=>1, 'updated'=>1));
return;
}
function inputAdd(){
$data = array();
$data['itemcode'] = $this->p('itemcode');
$data['itemname'] = $this->p('itemname');
$data['itemtype'] = $this->p_list('itemtype_');
$data['itemdetail'] = $this->p('itemdetail');
$data['images'] = $this->p('images');
$data['sozai'] = $this->p('sozai');
$data['gensan'] = $this->p('gensan');
$data['sizetabledata'] = $this->p('sizetabledata');
$data['point_rate'] = $this->p('point_rate');
$data['relation_item'] = $this->p('relation_item');
return $data;
}
function checkAdd($data){
$msg = array();
if (!$data['itemcode']){
$msg['itemcode'] = "商品コードを入力してください";
}
if (!$data['itemname']){
$msg['itemname'] = "商品名を入力してください";
}
if (!$data['itemtype']){
$msg['itemtype'] = "商品種類を入力してください";
}
if (!$data['itemdetail']){
$msg['itemdetail'] = "商品詳細を入力してください";
}
if (strlen($data['point_rate']) == 0){
}
else if (!grys_check_number($data['point_rate'])){
$msg['point_rate'] = "ポイントを数値で入力してください";
}
return $msg;
}
function add(){
$data = $this->inputAdd();
$msg = $this->checkAdd($data);
if ($msg){
$this->js_output(array('success'=>1, 'updated'=>0, 'message'=>$msg));
return;
}
$this->begin();
$itm = $this->loadModel('Item');
if ($data['images']){
$imgs = preg_split('/,/', $data['images']);
$data['image'] = $imgs[0];
foreach ($imgs as $img){
$res = $itm->getItemImage($img, "600x600");
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$imagedata = $res;
if ($imagedata['expire_date']){
$res = $itm->getItemImage($img, "600x600", true);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$binary = $res;
$f = $this->createFile($binary);
$fs = $f->resizeRect(200, 200);
$f->clean();
if (!$fs){
$this->js_output(array('success'=>0));
return;
}
$res = $itm->addItemImage($img, '200x200', $fs);
$fs->clean();
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$res = $itm->imageRelease($img, "600x600");
if (!$res){
$this->js_output(array('success'=>0));
return;
}
}
}
}
else{
$data['image'] = "";
}
$res = $itm->addItem($data);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$itemid = $res;
$res = $itm->updateItemType($itemid, $data['itemtype']);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$this->finish(true);
$this->js_output(array('success'=>1, 'updated'=>1, 'itemid'=>$itemid));
}
function edit(){
$itm = $this->loadModel('Item');
$itemid = $this->g('itemid');
$res = $itm->getItem($itemid);
if (!$res){
$this->js_output(array('success'=>0, 'message'=>'itemid error'));
return;
}
$itemdata = $res;
$data = $this->inputAdd();
$msg = $this->checkAdd($data);
if ($msg){
$this->js_output(array('success'=>1, 'updated'=>0, 'message'=>$msg));
return;
}
$this->begin();
if ($data['images'] == $itemdata['images']){
$data['image'] = $itemdata['image'];
}
else{
$curimgs = array();
$nextimgs = array();
if ($itemdata['images']){
$curimgs = preg_split('/,/', $itemdata['images']);
}
if ($data['images']){
$nextimgs = preg_split('/,/', $data['images']);
}
if ($nextimgs){
$data['image'] = $nextimgs[0];
}
$delimgs = array();
$stayimgs = array();
$addimgs = array();
foreach ($curimgs as $img){
if (!in_array($img, $nextimgs)){
$delimgs[] = $img;
}
else{
$stayimgs[] = $img;
}
}
foreach ($nextimgs as $img){
if (!in_array($img, $stayimgs)){
$addimgs[] = $img;
}
}
foreach ($delimgs as $img){
$res = $itm->deleteItemImage($img);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
}
foreach ($addimgs as $img){
$res = $itm->getItemImage($img, "600x600");
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$imagedata = $res;
if ($imagedata['expire_date']){
$res = $itm->getItemImage($img, "600x600", true);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$binary = $res;
$f = $this->createFile($binary);
$fs = $f->resizeRect(200, 200);
$f->clean();
if (!$fs){
$this->js_output(array('success'=>0));
return;
}
$res = $itm->addItemImage($img, '200x200', $fs);
$fs->clean();
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$res = $itm->imageRelease($img, "600x600");
if (!$res){
$this->js_output(array('success'=>0));
return;
}
}
}
}
$res = $itm->updateItem($itemid, $data);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$itemid = $res;
$res = $itm->updateItemType($itemid, $data['itemtype']);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$this->finish(true);
$this->js_output(array('success'=>1, 'updated'=>1, 'itemid'=>$itemid));
}
function delete(){
$itemid = $this->p('itemid');
$itm = $this->loadModel('Item');
$res = $itm->getItem($itemid);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$itemdata = $res;
$this->begin();
$res = $itm->deleteItem($itemid);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$this->finish(true);
$this->js_output(array('success'=>1, 'deleted'=>1));
return;
}
function open(){
$itemid = $this->p('itemid');
$itm = $this->loadModel('Item');
$res = $itm->getItem($itemid);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$itemdata = $res;
$toisclose = $this->p('to_is_close');
if (!in_array($to_is_close, array(0, 1))){
$this->js_output(array('success'=>0));
return;
}
$this->begin();
$res = $itm->openItem($itemid, $toisclose);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$this->finish(true);
$this->js_output(array('success'=>1, 'updated'=>1, 'is_close'=>$toisclose));
return;
}
function itemImageUpload(){
$mode = $this->p('mode');
if ($mode == "delete"){
$image = $this->p('image');
$itm = $this->loadModel('Item');
$res = $itm->getItemImage($image, "600x600");
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$imgdata = $res;
if ($imgdata['expire_date']){
$this->begin();
$res = $itm->deleteItemImage($image);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$this->finish(true);
}
$this->js_output(array('success'=>1, 'deleted'=>1));
}
else{
$file = $this->f('uploadfile');
if (!$file || !$file->isImageFile()){
$this->js_output(array('success'=>1, 'uploaded'=>0, 'message'=>array('uploadfile'=>'not uploaded')));
return;
}
$itm = $this->loadModel('Item');
$this->begin();
$resizefile = $file->resizeRect(600,600);
$res = $itm->addItemImageTemporary($resizefile, '600x600');
$resizefile->clean();
if (!$res){
$this->finish();
$this->js_output(array('success'=>0));
return;
}
$ss = $res;
$this->finish(true);
$url = home_url().'?grys_action=item_image&sz=temporary.'.$ss.'.600x600';
$this->js_output(array('success'=>1, 'uploaded'=>1, 'url'=>$url, 'image'=>$ss));
}
}
function subitemImageUpload(){
$mode = $this->p('mode');
if ($mode == "delete"){
$image = $this->p('image');
$itm = $this->loadModel('Item');
$res = $itm->getItemImage($image, "600x600");
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$imgdata = $res;
if ($imgdata['expire_date']){
$this->begin();
$res = $itm->deleteItemImage($image);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$this->finish(true);
}
$this->js_output(array('success'=>1, 'deleted'=>1));
}
else{
$oldimage = $this->p('image');
$file = $this->f('uploadfile');
if (!$file || !$file->isImageFile()){
$this->js_output(array('success'=>1, 'uploaded'=>0, 'message'=>array('uploadfile'=>'not uploaded')));
return;
}
$itm = $this->loadModel('Item');
$this->begin();
if ($oldimage){
$res = $itm->getItemImage($oldimage, "600x600");
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$imgdata = $res;
if ($imgdata['expire_date']){
$res = $itm->deleteItemImage($oldimage);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
}
}
$resizefile = $file->resizeRect(600,600);
$res = $itm->addItemImageTemporary($resizefile, '600x600');
$resizefile->clean();
if (!$res){
$this->finish();
$this->js_output(array('success'=>0));
return;
}
$ss = $res;
$this->finish(true);
$url = home_url().'/?grys_action=subitem_image&sz=temporary.'.$ss.'.600x600';
$this->js_output(array('success'=>1, 'uploaded'=>1, 'image'=>$ss, 'url'=>$url));
}
}
function subitemSetup(){
$itm = $this->loadModel('Item');
$itemid = $this->g('itemid');
$res = $itm->getItem($itemid);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$conflist = array();
$loadimgs = array();
for($i = 0; $i < 2; $i++){
$lab = $this->p('lab_'.$i);
if ($lab == null || strlen($lab) == 0) continue;
$dvals = array();
$ids = $this->p_vals('cateid_'.$i.'_');
$vs = $this->p_vals('catelabel_'.$i.'_');
$imgs = $this->p_vals('cateimage_'.$i.'_');
foreach ($ids as $j=>$v){
$dvals[] = array('id'=>$v, 'label'=>$vs[$j], 'image'=>$imgs[$j]);
if ($imgs[$j]){
$loadimgs[] = $imgs[$j];
}
}
$conflist[] = array('lab'=>$lab, 'datas'=>$dvals);
}
$this->begin();
foreach ($loadimgs as $img){
$res = $itm->getItemImage($img, "600x600");
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$imagedata = $res;
if ($imagedata['expire_date']){
$res = $itm->getItemImage($img, "600x600", true);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$binary = $res;
$f = $this->createFile($binary);
$fs = $f->resizeRect(200, 200);
$f->clean();
if (!$fs){
$this->js_output(array('success'=>0));
return;
}
$res = $itm->addItemImage($img, '200x200', $fs);
$fs->clean();
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$res = $itm->imageRelease($img, "600x600");
if (!$res){
$this->js_output(array('success'=>0));
return;
}
}
}
$res = $itm->updateCategorySetup($itemid, $conflist);
if ($res === false){
$this->js_output(array('success'=>0));
return;
}
$delimgs = $res;
foreach ($delimgs as $img){
$res = $itm->deleteItemImage($img);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
}
$this->finish(true);
$this->js_output(array('success'=>1, 'updated'=>1));
}
function subitemEntry(){
$itm = $this->loadModel('Item');
$itemid = $this->g('itemid');
$res = $itm->getItem($itemid);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$itemdata =$res;
$res = $itm->getCategorySetup($itemid);
if ($res === false){
$this->error("アイテムがありません");
return;
}
$catelist = $res;
$cateconf = $itm->generateCategoryConfig($catelist, array());
$subitemlist = array();
foreach ($cateconf as $conf){
$useflag = $this->p('use_'.$conf['idtxt']);
if (!$useflag){
continue;
}
$subdata = array(
'subprice'=>$this->p('subprice_'.$conf['idtxt']),
'stock_count'=>$this->p('stock_count_'.$conf['idtxt']),
'stock_nolimit'=>$this->p('stock_nolimit_'.$conf['idtxt']),
'limit_count'=>$this->p('limit_count_'.$conf['idtxt']),
'conf'=>$conf
);
$subitemlist[] = $subdata;
}
$msg = array();
foreach ($subitemlist as $subitem){
if (strlen($subitem['subprice']) == 0){
$msg['subprice_'.$subitem['conf']['idtxt']] = '値段を設定してください';
}
else if (!grys_check_number($subitem['subprice'])){
$msg['subprice_'.$subitem['conf']['idtxt']] = '値段を設定してください';
}
if (!$subitem['stock_nolimit']){
if (strlen($subitem['stock_count']) == 0){
$msg['stock_count_'.$subitem['conf']['idtxt']] = '在庫を設定してください';
}
else if (!grys_check_number($subitem['stock_count'])){
$msg['stock_count_'.$subitem['conf']['idtxt']] = '在庫を設定してください';
}
}
if (strlen($subitem['limit_count']) == 0){
}
else if (!grys_check_number($subitem['limit_count'])){
$msg['limit_count_'.$subitem['conf']['idtxt']] = '販売制限数を設定してください';
}
}
if ($msg){
$this->js_output(array('success'=>1, 'updated'=>0, 'message'=>$msg));
return;
}
$this->begin();
$res = $itm->updateSubitemList($itemid, $subitemlist);
if (!$res){
$this->finish();
$this->js_output(array('success'=>0));
return;
}
$this->finish(true);
$this->js_output(array('success'=>1, 'updated'=>1));
}
function frontLogincheck(){
$msg = "";
if (!$this->p('log')){
$msg = "メールアドレスを入力してください";
}
else if (!$this->p('pwd')){
$msg = "パスワードを入力してください";
}
if ($msg){
$this->js_output(array('success'=>1, 'login'=>0, 'message'=>$msg));
return;
}
$user = wp_signon('', false);
if (is_wp_error($user)){
$msg = "ログインできません";
$this->js_output(array('success'=>1, 'login'=>0, 'message'=>$msg));
return;
}
$this->js_output(array('success'=>1, 'login'=>1));
}
function frontCartin(){
$itemid = $this->p('itemid');
$num = $this->p('num');
$addition = $this->p('addition');
if ($num == 0 && $addition != "delete"){
$this->js_output(array('success'=>0));
return;
}
$cartck = grys_get_cart_cookie();
$itemids = array();
if ($cartck){
$itemids = preg_split('/,/', $cartck);
}
$nitemids = array();
$addflag = $addition == "add";
foreach ($itemids as $itemv){
if (strpos($itemv, ".")){
$ar = preg_split('/\./', $itemv, 2);
}
else{
$ar = array($itemv, 1);
}
if ($addition == "add"){
if ($ar[0] == $itemid){
$ar[1] += $num;
$addflag = false;
}
}
else if ($addition == "delete"){
if ($ar[0] == $itemid){
continue;
}
}
else if ($addition == "change"){
if ($ar[0] == $itemid){
$ar[1] = $num;
}
}
$nitemids[] = $ar;
}
if ($addflag){
$nitemids[] = array($itemid, $num);
}
$itm = $this->loadModel('Item');
$nids = array();
$total = 0;
$count = 0;
foreach ($nitemids as $iid){
$res = $itm->getSubitem($iid[0]);
if (!$res){
continue;
}
if ($res['is_close'] == 1){
continue;
}
if ($res['deleted'] == 1){
continue;
}
$subitem = $res;
if (!$subitem['stock_nolimit']){
if ($subitem['stock_count'] <= 0){
$this->js_output(array('success'=>0));
return;
}
if ($iid[1] > $subitem['stock_count']){
$iid[1] = $subitem['stock_count'];
}
if ($subitem['limit_count'] && $iid[1] > $subitem['limit_count']){
$iid[1] = $subitem['limit_count'];
}
}
$res = $itm->getItem($subitem['itemid']);
if (!$res){
continue;
}
if ($res['is_close'] == 1){
continue;
}
if ($res['deleted'] == 1){
continue;
}
if ($iid[1] > 1){
$itxt = $iid[0].'.'.$iid[1];
}
else{
$itxt = $iid[0];
}
$nids[] = $itxt;
$total += $subitem['subprice']*$iid[1];
$count += $iid[1];
}
grys_set_cart_cookie(join(',', $nids));
$this->js_output(array('success'=>1, 'cart_count'=>$count, 'cart_price'=>$total));
}
function frontCartlist(){
$cartck = grys_get_cart_cookie();
$itm = $this->loadModel('Item');
$itemlist = array();
$total = 0;
$iids = array();
if ($cartck){
$iids = preg_split('/,/', $cartck);
}
$cf = $this->loadModel('Config');
$res = $cf->getCurrentTax();
if (!$res){
return;
}
$tax = $res;
foreach ($iids as $iid){
if (strpos($iid,'.')){
$ar = preg_split('/\./', $iid, 2);
}
else{
$ar = array($iid, 1);
}
$res = $itm->getSubitem($ar[0]);
if (!$res){
continue;
}
if ($res['is_close']){
continue;
}
if ($res['deleted']){
continue;
}
$subitem = $res;
$subitem['subprice_tax'] = (int)($subitem['subprice']*$tax*0.01);
$res = $itm->getItem($subitem['itemid']);
if (!$res){
continue;
}
if ($res['is_close']){
continue;
}
if ($res['deleted']){
continue;
}
$item = $res;
$subitem['cates'] = array();
if ($subitem['category1']){
$subitem['cates'][] = $itm->getItemCategory($subitem['category1']);
}
if ($subitem['category2']){
$subitem['cates'][] = $itm->getItemCategory($subitem['category2']);
}
$item['category_labels'] = $itm->getCategorySetupLabels($item['itemid']);
$itemlist[] = array('item'=>$item, 'subitem'=>$subitem, 'num'=>$ar[1]);
$total += $subitem['subprice']*$ar[1];
}
$this->js_output(array('success'=>1, 'itemlist'=>$itemlist, 'total'=>$total, 'total_tax'=>(int)($total*$tax*0.01)));
}
function frontCartstart(){
$cartck = grys_get_cart_cookie();
if (!$cartck){
$this->js_output(array('success'=>0));
return;
}
$ss = grys_get_shopping_value('shopping_session');
if (!$ss){
$ss = grys_generate_session();
}
$cachename = grys_get_shopping_value("cachename", $ss);
$so = $this->loadModel('Session');
$res = $so->getSession($cachename);
$sdt = null;
if ($res){
$sdt = $res;
}
if (!$sdt) $sdt = array();
$this->begin();
$sdt['cartitem'] = $cartck;
$res = $so->setSession($cachename, $sdt, grys_get_shopping_value("cacheexpire"));
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$this->finish(true);
grys_set_shopping_cookie($ss);
$addressset = 0;
if (isset($sdt['address'])){
$addressset = 1;
}
$this->js_output(array('success'=>1, 'address_set'=>$addressset));
}
function frontCartpay(){
$mode = $this->p('mode');
if (!in_array($mode, array('confirm','send','eps'))){
$this->js_output(array('success'=>0));
return;
}
$cf = $this->loadModel('Config');
$res = $cf->getCurrentTax();
if (!$res){
return;
}
$tax = $res;
$itm = $this->loadModel('Item');
$itemlist = array();
$total = 0;
$count = 0;
$point = 0;
$iids = array();
$cf = $this->loadModel('Config');
$res = $cf->getConfig('point_rate_base');
if ($res === false){
$this->js_output(array('success'=>0));
return;
}
$prate_base = $res+0;
$user = $this->currentUser();
$userid = $user->get('ID');
$so = $this->loadModel('Session');
$ss = grys_get_shopping_value('shopping_session');
if (!$ss){
$this->js_output(array('success'=>0));
return;
}
$sskey= grys_get_shopping_value('cachename', $ss);
$res = $so->getSession($sskey);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$ssdata = $res;
$cartck = $ssdata['cartitem'];
if ($cartck){
$iids = preg_split('/,/', $cartck);
}
$itemerror = false;
$stockerr = false;
foreach ($iids as $iid){
if (strpos($iid,'.')){
$ar = preg_split('/\./', $iid, 2);
}
else{
$ar = array($iid, 1);
}
$res = $itm->getSubitem($ar[0]);
if (!$res){
$itemerror = true;
break;
}
if ($res['is_close']){
$itemerror = true;
break;
}
if ($res['deleted']){
$itemerror = true;
break;
}
$subitem = $res;
$subitem['subprice_tax'] = (int)($subitem['subprice']*$tax*0.01);
if (!$subitem['stock_nolimit'] && $subitem['stock_count'] < $ar[1]){
$stockerr = true;
$subitem['stockerr'] = true;
}
$res = $itm->getItem($subitem['itemid']);
if (!$res){
$itemerror = true;
break;
}
if ($res['is_close']){
$itemerror = true;
break;
}
if ($res['deleted']){
$itemerror = true;
break;
}
$item = $res;
$pt = 0;
$prate = 0;
if ($userid){
$prate = $item['point_rate'];
if (strlen($prate) == 0){
$prate = $prate_base;
}
$pt = (int)($subitem['subprice']*$ar[1] * $prate / 100);
}
$totaltax = (int)($subitem['subprice']*$ar[1]*$tax*0.01);
$itemlist[] = array('item'=>$res, 'num'=>$ar[1], 'subitem'=>$subitem, 'point'=>$pt, 'point_rate'=>$prate, 'price_total_tax'=>$totaltax);
$total += $subitem['subprice']*$ar[1];
$count += $ar[1];
$point += $pt;
}
if ($itemerror || $stockerr || count($itemlist) == 0){
$this->js_output(array('success'=>0, 'message'=>'購入できないアイテムがあります'));
return;
}
$delivcart = array();
if (isset($ssdata['deliv_itemcart']) && $ssdata['deliv_itemcart']){
$delivcart = preg_split('/ /', $ssdata['deliv_itemcart']);
}
else{
$delivcart[] = $ssdata['cartitem'];
}
$data = array();
if ($mode == "confirm"){
$data['addressid'] = $this->p('addressid');
if (!$data['addressid']){
$data['zip1'] = $this->p('zip1');
$data['zip2'] = $this->p('zip2');
$data['prefecture_code'] = $this->p('prefecture_code');
$data['address_1'] = $this->p('address_1');
$data['address_2'] = $this->p('address_2');
$data['tel1'] = $this->p('tel1');
$data['tel2'] = $this->p('tel2');
$data['tel3'] = $this->p('tel3');
$data['address_name_sei'] = $this->p('address_name_sei');
$data['address_name_mei'] = $this->p('address_name_mei');
$data['address_name_kana_sei'] = $this->p('address_name_kana_sei');
$data['address_name_kana_mei'] = $this->p('address_name_kana_mei');
$data['company_name'] = $this->p('company_name');
}
if (!$userid){
$data['email'] = $this->p('email');
$data['email_conf'] = $this->p('email_conf');
}
}
elseif ($mode == "send"){
$data = $ssdata['address'];
$data['paytype'] = $this->p('paytype');
$data['memo'] = $this->p('memo');
$data['wish_day'] = $this->p('wish_day');
$data['wish_time'] = $this->p('wish_time');
if ($userid){
$data['pay_point'] = $this->p('pay_point')+0;
}
else{
$data['pay_point'] = 0;
}
}
elseif ($mode == "eps"){
$data = $ssdata;
foreach ($ssdata['address'] as $k=>$v){
$data[$k] = $v;
}
}
$msg = array();
$address = null;
$addr = $this->loadModel('Address');
$prefcode = array();
$mainaddrs = array();
if (!$data['addressid']){
$addrmsg = $this->checkAddress($data);
$msg = array_merge($msg, $addrmsg);
$prefcode[] = $data['prefecture_code'];
$data['itemcart'] = $delivcart[0];
}
else{
$addids = preg_split('/,/', $data['addressid']);
$pidx = 0;
foreach ($addids as $aid){
$res = $addr->getAddress($aid);
if (!$res){
continue;
}
if ($res['userid'] != $userid){
continue;
}
$res['itemcart'] = $delivcart[$pidx];
$pidx++;
$mainaddrs[] = $res;
$prefcode[] = $res['prefecture_code'];
}
if (!$mainaddrs){
$msg['addressid'] = '住所を選択してください';
}
}
if (!$userid){
if (!$data['email']){
$msg['email'] = 'メールアドレスを入力してください';
}
else if (!grys_check_email($data['email'])){
$msg['email'] = 'メールアドレスを正しく入力してください';
}
else if ($data['email'] != $data['email_conf']){
$msg['email'] = 'メールアドレスが確認と一致しません';
}
}
$cost = 0;
foreach ($prefcode as $pcode){
$res = $cf->getPrefectureCodeDelivCost($pcode);
if ($res === false){
$this->js_output(array('success'=>0));
return;
}
$cost+= $res;
}
$pricetax = (int)($total*$tax/100);
$paytotal = $total+$cost+$pricetax;
$curpt = 0;
$pt = $this->loadModel('Point');
if ($userid){
$res = $pt->getUserPoint($userid);
if ($res === false){
$this->js_output(array('success'=>0));
return;
}
if ($res){
$curpt = $res['current_point'];
}
}
if ($mode == "send" || $mode == "eps"){
if (!$data['pay_point']){
}
else if ($data['pay_point'] > $curpt){
$msg['pay_point'] = '利用ポイント設定が保有ポイントを超えています';
}
else if ($data['pay_point'] > $paytotal){
$msg['pay_point'] = '利用ポイント設定が支払い額を超えています';
}
else if ($data['pay_point'] == $paytotal){
$data['paytype'] = 0;
}
if ($data['paytype'] === null){
$msg['paytype'] = '支払い方法を入力してください';
}
else if ($data['paytype'] === 0){
}
else if (!in_array($data['paytype'], array(1,2,3))){
$msg['paytype'] = '支払い方法を入力してください';
}
}
if ($msg){
$this->js_output(array('success'=>1, 'noerror'=>0, 'errmsg'=>$msg));
return;
}
if ($mode == "confirm"){
$ssdata['address'] = $data;
$this->begin();
$res = $so->setSession($sskey, $ssdata, grys_get_shopping_value('cacheexpire'));
if ($res === false){
$this->js_output(array('success'=>0));
return;
}
$this->finish(true);
$this->js_output(array('success'=>1, 'noerror'=>1));
return;
}
$pur = $this->loadModel('Purchase');
if ($mode == "send" && $data['paytype'] == 1){
$ss = grys_get_shopping_value("shopping_session");
if (!$ss){
$this->js_output(array('success'=>0));
exit;
}
$cachename = grys_get_shopping_value('cachename', $ss);
$c = $this->loadModel('Session');
$res = $c->getSession($cachename);
if (!$res){
$this->js_output(array('success'=>0));
exit;
}
$ssdata = $res;
$ssdata['paytype'] = 1;
$ssdata['pay_point'] = $data['pay_point'];
$ssdata['memo'] = $data['memo'];
$ssdata['wish_day'] = $data['wish_day'];
$ssdata['wish_time'] = $data['wish_time'];
if (!$userid){
$ssdata['email'] = $data['email'];
}
$this->begin();
$res = $c->setSession($cachename, $ssdata, grys_get_shopping_value('cacheexpire'));
if (!$res){
$this->js_output(array('success'=>0));
exit;
}
$res = $pur->createPurchaseForCredit();
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$purresult = $res;
$this->finish(true);
if ($userid){
$email = $user->get('user_email');
}
else{
$email = $ssdata['email'];
}
$maddr = $data;
if ($mainaddrs){
$maddr = $mainaddrs[0];
}
$uaddr = null;
if ($userid){
$uaddr = $addr->getAddressMain($userid);
}
if (!$uaddr){
$uaddr = $maddr;
}
$senddata = array(
'credit_userid'=>'GRYUSR'.$userid,
'order_number'=>$purresult['purchasecode'],
'price'=>$paytotal - $data['pay_point'],
'item_name'=>'巌流島SHOP',
'item_code'=>'ganryu-shop',
'user_mail_add'=>$email,
'user_name'=>$maddr['address_name_sei'].' '.$maddr['address_name_mei'],
'process_code'=>2,
'delivery_code'=>99,
'consignee_postal'=>$maddr['zip1'].$maddr['zip2'],
'consignee_name'=>$maddr['address_name_sei'].' '.$maddr['address_name_mei'],
'consignee_address'=>grys_prefecture_name($maddr['prefecture_code']).$maddr['address_1'].$maddr['address_2'],
'consignee_tel'=>$maddr['tel1'].$maddr['tel2'].$maddr['tel3'],
'orderer_postal'=>$uaddr['zip1'].$uaddr['zip2'],
'orderer_name'=>$uaddr['address_name_sei'].' '.$uaddr['address_name_mei'],
'orderer_address'=>grys_prefecture_name($uaddr['prefecture_code']).$uaddr['address_1'].$uaddr['address_2'],
'orderer_tel'=>$uaddr['tel1'].$uaddr['tel2'].$uaddr['tel3'],
);
$eps_target = $cf->getConfig('eps_connect');
$res = grys_eps_purchase($eps_target, $senddata);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
if ($res['result'] != 1){
$this->js_output(array('success'=>0));
return;
}
grys_set_shopping_cookie($ss);
$this->js_output(array('success'=>1, 'noerror'=>1, 'created'=>2, 'eps_connect'=>$res['redirect']));
return;
}
if ($data['pay_point']){
for($i = 0; $i < count($itemlist); $i++){
$itemlist[$i]['point'] = 0;
}
$point = 0;
}
if ($mode == "eps"){
if (!$data['pay_purchasecode']){
$this->js_output(array('success'=>0));
return;
}
}
else{
$data['pay_purchasecode'] = null;
}
$this->begin();
$data['status'] = 1;
$data['count_sum'] = $count;
$data['price_sum'] = $total;
$data['price_tax_sum'] = $total+$pricetax;
$data['get_point'] = $point;
$data['tax_cost'] = $pricetax;
$data['deliv_cost'] = $cost;
$data['extra_cost'] = ($data['pay_type'] == 3)?324:0;
$data['payment_status'] = ($mode == "eps")?2:1;
$data['pay_money'] = $paytotal - $data['pay_point'];
if ($data['paytype'] == 0 && $data['pay_money'] > 0){
$this->js_output(array('success'=>0));
return;
}
$res = $pur->createPurchase($userid, $data, $itemlist);
if (!$res){
$this->finish();
$this->js_output(array('success'=>0));
return;
}
$payresult = $res;
$payid = $payresult['purchaseid'];
if ($mainaddrs){
$mainaddrs[0]['wish_day'] = $data['wish_day'];
$mainaddrs[0]['wish_time'] = $data['wish_time'];
$res = $pur->updatePurchaseDeliv($payid, $mainaddrs);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
}
else{
$res = $pur->updatePurchaseDeliv($payid, array($data));
if (!$res){
$this->js_output(array('success'=>0));
return;
}
}
foreach ($itemlist as $subitm){
if ($subitm['stock_nolimit']) continue;
$res = $itm->minusStock($subitm['subitem']['subitemid'], $subitm['num']);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
}
if ($userid && $data['pay_point'] ){
$ptdata = array(
'point_category'=>'pointuse',
'point_type'=>'pointuse_shopping',
'point_value'=>-$data['pay_point'],
'point_name'=>'ポイント利用',
'extent_info'=>json_encode(array('purchaseid'=>$payid))
);
$res = $pt->addPoint($userid, $ptdata);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
}
if ($mode == "eps" && $data['get_point']){
$ptdata = array(
'point_category'=>'shopping',
'point_type'=>'shopping_buy',
'point_value'=>$data['get_point'],
'point_name'=>'お買い物ポイント',
'extent_info'=>json_encode(array('purchaseid'=>$payid))
);
$res = $pt->addPoint($userid, $ptdata);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
}
if ($userid){
$addrid = 0;
if (!$data['addressid']){
$res = $addr->getAddressCount($userid);
if ($res === false){
$this->js_output(array('success'=>0));
return;
}
if ($res < 20){
$res = $addr->insertAddress($userid, $data);
if ($res === false){
$this->js_output(array('success'=>0));
return;
}
$addrid = $res;
}
}
else{
$addrid = $data['addressid'];
}
if ($addrid){
$res = $addr->updateLastUse($addrid);
if ($res === false){
$this->js_output(array('success'=>0));
return;
}
}
}
$so->deleteSession($sskey);
$this->finish(true);
$res = $this->forMail('cart_complete', $payid);
if ($res){
grys_mail($res);
}
$res = $this->forMail('cart_complete_admin', $payid);
if ($res){
grys_mail($res);
}
grys_set_cart_cookie('');
grys_set_shopping_cookie('');
$this->js_output(array('success'=>1, 'noerror'=>1, 'created'=>1, 'purchaseid'=>$payid));
}
function inputAddress(){
$data = array();
$data['zip1'] = $this->p('zip1');
$data['zip2'] = $this->p('zip2');
$data['prefecture_code'] = $this->p('prefecture_code');
$data['address_1'] = $this->p('address_1');
$data['address_2'] = $this->p('address_2');
$data['tel1'] = $this->p('tel1');
$data['tel2'] = $this->p('tel2');
$data['tel3'] = $this->p('tel3');
$data['address_name_sei'] = $this->p('address_name_sei');
$data['address_name_mei'] = $this->p('address_name_mei');
$data['address_name_kana_sei'] = $this->p('address_name_kana_sei');
$data['address_name_kana_mei'] = $this->p('address_name_kana_mei');
$data['company_name'] = $this->p('company_name');
return $data;
}
function checkAddress($data){
$msg = array();
if (strlen($data['zip1']) == 0 || strlen($data['zip2']) == 0){
$msg['zip'] = '郵便番号を入力してください';
}
else if (!preg_match('/^[\d]{3}$/', $data['zip1']) || !preg_match('/^[\d]{4}$/', $data['zip2'])){
$msg['zip'] = '郵便番号を正しく入力してください';
}
if (strlen($data['prefecture_code']) == 0){
$msg['prefecture_code'] = '都道府県を入力してください';
}
if (strlen($data['address_1']) == 0){
$msg['address'] = '住所を入力してください';
}
else if (strlen($data['address_2']) == 0){
$msg['address'] = '住所を入力してください';
}
if (strlen($data['tel1']) == 0 ||strlen($data['tel2']) == 0 ||strlen($data['tel3']) == 0){
$msg['tel'] = '電話番号を入力してください';
}
else if (!preg_match('/^[\d]+$/', $data['tel1']) ||!preg_match('/^[\d]+$/', $data['tel2']) ||!preg_match('/^[\d]+$/', $data['tel3'])){
$msg['tel'] = '電話番号を正しく入力してください';
}
else{
$tel10 = $data['tel1'].$data['tel2'].$data['tel3'];
if ($tel10[0] != "0" || strlen($tel10) < 10 || strlen($tel10) > 12){
$msg['tel'] = '電話番号を正しく入力してください';
}
}
if (strlen($data['address_name_sei']) == 0 || strlen($data['address_name_mei']) == 0){
$msg['address_name'] = 'お名前を入力してください';
}
if (strlen($data['address_name_kana_sei']) == 0 || strlen($data['address_name_kana_mei']) == 0){
$msg['address_name_kana'] = 'お名前(カナ)を入力してください';
}
else if (!grys_check_kana($data['address_name_kana_sei']) || !grys_check_kana($data['address_name_kana_mei'])){
$msg['address_name_kana'] = 'お名前(カナ)を正しく入力してください';
}
return $msg;
}
function frontAddress(){
$md = $this->g('md');
$curuser = $this->currentUser();
if (!$curuser){
$this->js_output(array('success'=>0));
return;
}
$userid = $curuser->get('ID');
$addr = $this->loadModel('Address');
if ($md == "add"){
$data = $this->inputAddress();
$msg = $this->checkAddress($data);
if ($msg){
$this->js_output(array('success'=>1, 'updated'=>0, 'message'=>$msg));
return;
}
$res = $addr->getAddressCount($userid);
if ($res === false){
$this->js_output(array('success'=>0));
return;
}
if ($res >= 20){
$this->js_output(array('success'=>0, 'message'=>'これ以上登録できません'));
return;
}
$this->begin();
$res = $addr->insertAddress($userid, $data);
if ($res === false){
$this->js_output(array('success'=>0));
return;
}
$this->finish(true);
$data['addressid'] = $res;
$this->js_output(array('success'=>1, 'updated'=>1, 'address_data'=>$data));
}
else if ($md == "edit"){
$addressid = $this->g('addressid');
$res = $addr->getAddress($addressid);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
if ($res['userid'] != $userid){
$this->js_output(array('success'=>0));
return;
}
$data = $this->inputAddress();
$msg = $this->checkAddress($data);
if ($msg){
$this->js_output(array('success'=>1, 'updated'=>0, 'message'=>$msg));
return;
}
$this->begin();
$res = $addr->updateAddress($addressid, $data);
if ($res === false){
$this->js_output(array('success'=>0));
return;
}
$this->finish(true);
$data['addressid'] = $addressid;
$this->js_output(array('success'=>1, 'updated'=>1, 'address_data'=>$data));
}
else if ($md == "delete"){
$addressid = $this->g('addressid');
$res = $addr->getAddress($addressid);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
if ($res['userid'] != $userid){
$this->js_output(array('success'=>0));
return;
}
$this->begin();
$res = $addr->deleteAddress($addressid);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$this->finish(true);
$this->js_output(array('success'=>1, 'deleted'=>1));
}
}
function frontFav(){
$curuser = $this->currentUser();
$userid = $curuser->get('ID');
if (!$userid){
$this->js_output(array('success'=>0));
return;
}
$itemid = $this->g('itemid');
$itm = $this->loadModel('Item');
$res = $itm->getItem($itemid);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$itemdata = $res;
$this->begin();
$res = $itm->getItemFav($userid, $itemid);
if ($res === false){
$this->js_output(array('success'=>0));
return;
}
$curfav = $res;
$nextfav = $curfav?0:1;
$res = $itm->setItemFav($userid, $itemid, $nextfav);
if ($res === false){
$this->js_output(array('success'=>0));
return;
}
$this->finish(true);
$this->js_output(array('success'=>1, 'updated'=>1, 'fav'=>$nextfav));
}
function itemtype(){
$mode = $this->g('mode');
$cf = $this->loadModel('Config');
$res = $cf->getItemTypeList();
if ($res === false){
$this->js_output(array('success'=>0));
return;
}
$catelist = $res;
if ($mode == "edit"){
$data = array();
$data['typeid'] = $this->p('typeid');
$data['typename'] = $this->p('typename');
$msg = null;
if (strlen($data['typename']) == 0){
$msg = "カテゴリ名を入力してください";
}
if ($msg){
$this->js_output(array('success'=>1, 'updated'=>0, 'message'=>$msg));
return;
}
$idx = -1;
if ($data['typeid']){
for($i = 0; $i < count($catelist['typelist']); $i++){
if ($catelist['typelist'][$i]['typeid'] == $data['typeid']){
$idx = $i;
break;
}
}
if ($idx < 0){
$this->js_output(array('success'=>0));
return;
}
$catelist['typelist'][$idx]['typename'] = $data['typename'];
$dt = $catelist['typelist'][$idx];
}
else{
$dt = array(
'typeid'=>$catelist['typeid_base'],
'typename'=>$data['typename']
);
$idx = count($catelist['typelist']);
$catelist['typelist'][] = $dt;
$catelist['typeid_base']++;
}
$this->begin();
$res = $cf->setItemTypeList($catelist);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$this->finish(true);
$this->js_output(array('success'=>1, 'updated'=>1, 'data_index'=>$idx, 'data'=>$dt));
}
else if ($mode == "order"){
$data = array();
$typeid = $this->p('typeid');
$dir = $this->p('dir');
if (!in_array($dir, array('up', 'down'))){
$this->js_output(array('success'=>0));
return;
}
$idx = -1;
for($i = 0; $i < count($catelist['typelist']); $i++){
if ($catelist['typelist'][$i]['typeid'] == $typeid){
$idx = $i;
break;
}
}
if ($idx < 0){
$this->js_output(array('success'=>0));
return;
}
if ($idx == 0 && $dir == "up"){
$this->js_output(array('success'=>0));
return;
}
if ($idx == count($catelist['typelist'])-1 && $dir == "down"){
$this->js_output(array('success'=>0));
return;
}
$idx0 = $idx;
$idx1 = $idx+(($dir=='up')?-1:1);
$tmp = $catelist['typelist'][$idx0];
$catelist['typelist'][$idx0] = $catelist['typelist'][$idx1];
$catelist['typelist'][$idx1] = $tmp;
$this->begin();
$res = $cf->setItemTypeList($catelist);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$this->finish(true);
$this->js_output(array('success'=>1, 'data_index0'=>$idx0, 'data_index1'=>$idx1));
}
else if ($mode == "delete"){
$idx = -1;
$typeid = $this->p('typeid');
for($i = 0; $i < count($catelist['typelist']); $i++){
if ($catelist['typelist'][$i]['typeid'] == $typeid){
$idx = $i;
break;
}
}
if ($idx < 0){
$this->js_output(array('success'=>0));
return;
}
$itm = $this->loadModel('Item');
$res = $itm->getItemCountWithType($typeid);
if ($res === false){
$this->js_output(array('success'=>0));
return;
}
$typect = $res;
if ($typect > 0){
$this->js_output(array('success'=>1, 'deleted'=>0, 'message'=>'カテゴリ配下にアイテムがあるため削除できません'));
return;
}
array_splice($catelist['typelist'], $idx, 1);
$this->begin();
$res = $cf->setItemTypeList($catelist);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$this->finish(true);
$this->js_output(array('success'=>1, 'deleted'=>1, 'data_index'=>$idx));
}
else{
$this->js_output(array('success'=>0));
return;
}
}
function taxlist(){
$cf = $this->loadModel('Config');
$res = $cf->getTaxList();
if ($res === false){
$this->js_output(array('success'=>0));
return;
}
$taxlist = $res;
$mode = $this->g('mode');
if ($mode == "edit"){
$data = array();
$data['i'] = $this->p('i');
$data['tax'] = $this->p('tax');
$data['start'] = $this->p('start');
$msg = array();
if ($data['i'] == 'new'){
}
else if(!grys_check_number($data['i'])){
$msg[] = '送信データが不正です';
}
else if($data['i'] >= count($taxlist)){
$msg[] = '送信データが不正です';
}
if (strlen($data['tax']) == 0){
$msg[] = '税率を設定してください';
}
else if(!grys_check_number($data['tax'])){
$msg[] = '税率を正しく設定してください';
}
if ($data['i'] != 0){
if (strlen($data['start']) == 0){
$msg[] = '開始を設定してください';
}
else if (strlen($data['start']) != 8){
$msg[] = '開始を正しく設定してください';
}
else if(!checkdate(substr($data['start'], 4, 2), substr($data['start'], 6, 2), substr($data['start'], 0, 4))){
$msg[] = '開始を正しく設定してください';
}
}
if ($msg){
$this->js_output(array('success'=>1, 'updated'=>0, 'message'=>join("\n", $msg)));
return;
}
$insdata = array();
$insdata['tax'] = $data['tax'];
if ($data['start']){
$insdata['start'] = $data['start'];
}
if ($data['i'] == 'new'){
$taxlist[] = $data;
}
else{
$taxlist[(int)$data['i']] = $insdata;
}
usort($taxlist, array($cf, 'sortCallbackTax'));
$this->begin();
$res = $cf->setTaxList($taxlist);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$this->finish(true);
$this->js_output(array('success'=>1, 'updated'=>1, 'taxlist'=>$taxlist));
}
else if ($mode == "delete"){
$i = $this->p('i');
if ($i <= 0 || $i >= count($taxlist)){
$this->js_output(array('success'=>0));
return;
}
$this->begin();
array_splice($taxlist, $i, 1);
$res = $cf->setTaxList($taxlist);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$this->finish(true);
$this->js_output(array('success'=>1, 'deleted'=>1, 'taxlist'=>$taxlist));
}
else{
$this->js_output(array('success'=>0));
}
}
function deliverylist(){
$tg = $this->p('target');
$cf = $this->loadModel('Config');
$res = $cf->getDeliveryList();
if ($res === false){
$this->js_output(array('success'=>0));
return;
}
$delivlist = $res;
if (!array_key_exists($tg, $delivlist)){
$this->js_output(array('success'=>0));
return;
}
$delivdata = $delivlist[$tg];
$data = array();
$data['deliv_all'] = $this->p('deliv_all');
$data['deliv_partial'] = $this->p_vals('delivprice_');
$err = false;
if (preg_match('/\D/', $data['deliv_all'])){
$err = true;
}
else{
foreach ($data['deliv_partial'] as $k=>$v){
if (preg_match('/\D/', $v)){
$err = true;
break;
}
}
}
if ($err){
$this->js_output(array('success'=>1, 'updated'=>0, 'message'=>'入力値に数値以外が含まれます'));
return;
}
$delivlist[$tg] = $data;
$this->begin();
$res = $cf->setDeliveryList($delivlist);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$this->finish(true);
$this->js_output(array('success'=>1, 'updated'=>1));
}
function mailTemplate(){
$code = $this->p('bodycode');
$cf = $this->loadModel('Config');
$data = array();
$data['mailfrom'] = $this->p('mailfrom');
$data['mailto'] = $this->p('mailto');
$data['mailtitle'] = $this->p('mailtitle');
$data['mailheader'] = $this->p('mailheader');
$data['mailfooter'] = $this->p('mailfooter');
$this->begin();
$res = $cf->setMailTemplate($code, $data);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$this->finish(true);
$this->js_output(array('success'=>1, 'updated'=>1));
}
function purchaseItemsearch(){
$itemid = $this->p('itemid');
$itm = $this->loadModel('Item');
$res = $itm->getItem($itemid);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
if ($res['deleted']){
$this->js_output(array('success'=>0));
return;
}
$item = $res;
$res = $itm->getSubitemList($itemid);
if ($res === false){
$this->js_output(array('success'=>0));
return;
}
$sublist = $res;
if (!count($sublist)){
$this->js_output(array('success'=>0));
return;
}
for($i = 0; $i < count($sublist); $i++){
$cate = array();
if ($sublist[$i]['category1']){
$cate[] = $itm->getItemCategory($sublist[$i]['category1']);
}
if ($sublist[$i]['category2']){
$cate[] = $itm->getItemCategory($sublist[$i]['category2']);
}
$sublist[$i]['cate'] = $cate;
}
$item['labels'] = $itm->getCategorySetupLabels($itemid);
$this->js_output(array('success'=>1, 'item'=>$item, 'sublist'=>$sublist));
}
function purchaseItemcalc(){
$value = $this->p('value');
$nopt = $this->p('nopt');
$mode = $this->p('mode');
$tgnum = $this->p('num');
$tgiid = $this->p('itemid');
$cf = $this->loadModel('Config');
$itm = $this->loadModel('Item');
$pratebase = $cf->getConfig('point_rate_base');
$list = array();
$count = 0;
$total = 0;
$point = 0;
$ilist = array();
$ar = preg_split('/,/', $value);
$addflg = false;
foreach ($ar as $v){
$iar = preg_split('/\./', $v, 2);
$iid = $iar[0];
$ict = 1;
if (count($iar) == 2){
$ict = $iar[1];
}
if ($mode == "change"){
if ($tgiid == $iid){
if ($tgnum == 0){
continue;
}
$ict = $tgnum;
}
}
if ($mode == "add" && !$addflg){
if ($tgiid == $iid){
$ict += $tgnum;
$addflg = true;
}
}
$ilist[] = array($iid, $ict);
}
if ($mode == "add" && !$addflg){
$ilist[] = array($tgiid, $tgnum);
}
$ncart = "";
foreach ($ilist as $iar){
$res = $itm->getSubitem($iar[0]);
if (!$res){
continue;
}
$subitem = $res;
$res = $itm->getItem($subitem['itemid']);
if (!$res){
continue;
}
$item = $res;
$item['labels'] = $itm->getCategorySetupLabels($item['itemid']);
$subitem['cate'] = array();
if ($subitem['category1']){
$subitem['cate'][] = $itm->getItemCategory($subitem['category1']);
}
if ($subitem['category2']){
$subitem['cate'][] = $itm->getItemCategory($subitem['category2']);
}
$pt = 0;
if (!$nopt){
if (strlen($item['point_rate']) == 0){
$prate = $pratebase;
}
else{
$prate = $item['point_rate'];
}
$pt = (int)($iar[1]*$subitem['subprice']*$prate/100);
}
$list[] = array('item'=>$item, 'subitem'=>$subitem, 'num'=>$iar[1], 'point'=>$pt);
$total += $subitem['subprice'] * $iar[1];
$count += $iar[1];
$point += $pt;
if ($ncart){
$ncart .= ",";
}
$ncart .= $iar[0];
if ($iar[1]> 1){
$ncart .= ".".$iar[1];
}
}
$this->js_output(array('success'=>1,
'list'=>$list,
'total'=>$total, 'count'=>$count, 'point'=>$point,
'itemcart'=>$ncart
));
}
function purchaseStatuschange(){
$tg = $this->p('tg');
$st = $this->p('st');
$pid = $this->p('pid');
$ismail = $this->p('ismail');
$p = $this->loadModel('Purchase');
$res = $p->getPurchase($pid);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$pdata = $res;
if ($tg == "status"){
if (!in_array($st, array(1,9))){
$this->js_output(array('success'=>0));
return;
}
if ($pdata['status'] == $st){
$this->js_output(array('success'=>0));
return;
}
}
else if ($tg == "payment_status"){
if (!in_array($st, array(1,2))){
$this->js_output(array('success'=>0));
return;
}
if ($pdata['payment_status'] == $st){
$this->js_output(array('success'=>0));
return;
}
if ($pdata['payment_status'] == 2){
$this->js_output(array('success'=>0));
return;
}
}
else if ($tg == "deliv_status"){
if (!in_array($st, array(1,2))){
$this->js_output(array('success'=>0));
return;
}
if ($pdata['deliv_status'] == $st){
$this->js_output(array('success'=>0));
return;
}
}
else {
$this->js_output(array('success'=>0));
return;
}
$this->begin();
$res = $p->updateStatus($pid, $tg, $st);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$pt = $this->loadModel('Point');
if ($tg == "payment_status" && $st == 2){
if ($pdata['userid'] > 0 && $pdata['get_point'] > 0){
$ptdata = array(
'point_category'=>'shopping',
'point_type'=>'shopping_buy',
'point_value'=>$pdata['get_point'],
'point_name'=>'お買い物ポイント',
'extent_info'=>json_encode(array('purchaseid'=>$pid)),
);
$res = $pt->addPoint($pdata['userid'], $ptdata);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
}
}
if ($tg == "deliv_status" && $st == 2){
if ($ismail){
$this->forMail('deliv_complate', $pid);
}
}
$this->finish(true);
$this->js_output(array('success'=>1));
}
function purchaseUpdate(){
$pid = $this->p('pid');
$p = $this->loadModel('Purchase');
$itm = $this->loadModel('Item');
$cf = $this->loadModel('Config');
$res = $p->getPurchase($pid);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$pdata = $res;
if ($pdata['status'] == 9){
$this->js_output(array('success'=>1, 'rejected'=>1, 'message'=>'キャンセルされています'));
return;
}
if ($pdata['payment_status'] != 1 && $pdata['deliv_status'] != 1 ){
$this->js_output(array('success'=>1, 'rejected'=>1, 'message'=>'すでに入金、配送を完了しています'));
return;
}
$data = array();
$msg = array();
if ($pdata['payment_status'] == 1){
$data['paytype'] = $this->p('paytype');
$data['itemcart'] = $this->p('itemcart');
if (!in_array($data['paytype'], array(2,3))){
$msg['paytype'] = '支払い方法を正しく選択してください';
}
if (strlen($data['itemcart']) == 0){
$msg['itemcart'] = '購入商品がありません';
}
}
$delivlist = array();
if ($pdata['deliv_status'] == 1){
$delivct = $this->p('delivct');
if (!$delivct){
$msg['global'] = '配送先が設定されていません';
}
for($i = 0; $i < count($delivct); $i++){
$adata = array();
$adata['address_name_sei'] = $this->p('deliv'.($i+1).'_address_name_sei');
$adata['address_name_mei'] = $this->p('deliv'.($i+1).'_address_name_mei');
$adata['address_name_kana_sei'] = $this->p('deliv'.($i+1).'_address_name_kana_sei');
$adata['address_name_kana_mei'] = $this->p('deliv'.($i+1).'_address_name_kana_mei');
$adata['zip1'] = $this->p('deliv'.($i+1).'_zip1');
$adata['zip2'] = $this->p('deliv'.($i+1).'_zip2');
$adata['prefecture_code'] = $this->p('deliv'.($i+1).'_prefecture_code');
$adata['address_1'] = $this->p('deliv'.($i+1).'_address_1');
$adata['address_2'] = $this->p('deliv'.($i+1).'_address_2');
$adata['tel1'] = $this->p('deliv'.($i+1).'_tel1');
$adata['tel2'] = $this->p('deliv'.($i+1).'_tel2');
$adata['tel3'] = $this->p('deliv'.($i+1).'_tel3');
$adata['company_name'] = $this->p('deliv'.($i+1).'_company_name');
$adata['itemcart'] = $this->p('deliv'.($i+1).'_itemcart');
$delivlist[] = $adata;
$admsg = $this->checkAddress($adata);
foreach ($admsg as $k=>$v){
$msg['deliv'.($i+1).'_'.$k] = $v;
}
}
}
if ($msg){
$this->js_output(array('success'=>1, 'updated'=>0, 'errmsg'=>$msg));
return;
}
$this->begin();
if ($pdata['payment_status'] == 1){
if ($pdata['paytype'] != $data['paytype']){
$res = $p->updatePaytype($pid, $data);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
}
$res = $p->getPurchaseItem($pid);
if ($res === false){
$this->js_output(array('success'=>0));
return;
}
$itemlist = $res;
$cart = $p->getPurchaseItemCart($itemlist);
if ($data['itemcart'] != $cart){
$total = 0;
$count = 0;
$point = 0;
$newitemlist = array();
$nopt = ($pdata['pay_point'] > 0) || $userid == 0;
$pratebase = $cf->getConfig('point_rate_base');
$ar = preg_split('/,/', $data['itemcart']);
foreach ($ar as $v){
$iar = preg_split('/\./', $v, 2);
$iid = $iar[0];
$ict = 1;
if (count($iar) == 2){
$ict = $iar[1];
}
$res = $itm->getSubitem($iid);
if (!$res){
continue;
}
if ($res['deleted']){
continue;
}
$subitem = $res;
$res = $itm->getItem($subitem['itemid']);
if (!$res){
continue;
}
if ($res['deleted']){
continue;
}
$item = $res;
$prate = 0;
if (!$nopt){
if (strlen($item['point_rate']) == 0){
$prate = $pratebase;
}
else{
$prate = $item['point_rate'];
}
}
$pt = (int)($subitem['subprice']*$ict*$prate/100);
$total += $subitem['subprice']*$ict;
$count += $ict;
$point += $pt;
$newitemlist[] = array(
'subitem'=>$subitem,
'item'=>$item,
'num'=>$ict,
'point'=>$pt
);
}
$res = $p->updatePurchaseItem($pid, $newitemlist);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
$paytotal = $total+$pdata['deliv_cost'];
$ctdata = array(
'price_sum'=>$total,
'count_sum'=>$count,
'get_point'=>$point,
'pay_money'=>$paytotal-$pdata['pay_point']
);
$res = $p->updatePurchaseSum($ctdata);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
}
}
if ($pdata['deliv_status'] == 1){
$res = $p->updatePurchaseDeliv($pid, $delivlist);
if (!$res){
$this->js_output(array('success'=>0));
return;
}
}
$this->finish(true);
$this->js_output(array('success'=>1, 'updated'=>1));
}
}