HEX
Server: Apache
System: Linux 4485441ca2e2 6.8.0-1039-aws #41~22.04.1-Ubuntu SMP Thu Sep 11 11:03:07 UTC 2025 aarch64
User: (1000)
PHP: 8.2.24
Disabled: NONE
Upload Files
File: /var/www/html/wp-content/plugins/ganryu_shop/action/Ajax.php
<?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');
		$data['deliv_cost_type'] = $this->p('deliv_cost_type');
		$data['price_custom_text'] = $this->p('price_custom_text');
		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;
		$taxtotal = 0;

		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];
			$taxtotal += $subitem['subprice_tax']*$ar[1];
		}
		
		$this->js_output(array('success'=>1, 'itemlist'=>$itemlist, 'total'=>$total, 'total_tax'=>$taxtotal/*(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;
		
		if (!$userid && isset($sdt['address']) && isset($sdt['address']['addressid']) && $sdt['address']['addressid']){
			unset($sdt['address']);
		}
		
		$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;
		$udata = $this->currentUser();
		$userid = $udata->get('ID');
		if (isset($sdt['address'])){
			if ($userid || (isset($sdt['isguest']) && $sdt['isguest'])){
				$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;
		$delivcosttype = -1;
		$taxtotal = 0;
		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;
			}
			if ($delivcosttype == -1){
				$delivcosttype = $res['deliv_cost_type'];
			}
			else{
				if (($delivcosttype == 1 && $res['deliv_cost_type'] == 0
				 || $delivcosttype == 0 && $res['deliv_cost_type'] == 1)){
					$delivcosttype = 2;
				}
			}

			$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);
			$totaltax = $subitem['subprice_tax'] * $ar[1];
			$itemlist[] = array('item'=>$res, 'num'=>$ar[1], 'subitem'=>$subitem, 'point'=>$pt, 'point_rate'=>$prate, 'price_total_tax'=>$totaltax);
			$total += $subitem['subprice']*$ar[1];
			$taxtotal += $totaltax;
			$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;
			}
			$data['delivcost_separate_ticket'] = $this->p('delivcost_separate_ticket');
		}
		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;
		$pcost = 0;
		$tcost = 0;
		if ($delivcosttype == 0 || $delivcosttype == 2){
			foreach ($prefcode as $pcode){
				$res = $cf->getPrefectureCodeDelivCost($pcode);
				if ($res === false){
					$this->js_output(array('success'=>0));
					return;
				}
				$pcost+= $res;
			}
		}
		if ($delivcosttype == 1|| $delivcosttype == 2){
			$tcost = $cf->getDelivCostTicket();
		}
		if ($delivcosttype == 0){
			$cost = $pcost;
		}
		else if ($delivcosttype == 1){
			$cost = $tcost;
		}
		else if ($delivcosttype == 2){
			if ($data['delivcost_separate_ticket']){
				$cost = $pcost + $tcost;
			}
			else{
				$cost = $pcost;
			}
		}
		else {
			$this->error();
			return;
		}
		
		$pricetax = $taxtotal;//(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,11,12))){
				$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 || $data['paytype'] == 11 || $data['paytype'] == 12)){
			$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'] = $data['paytype'];
			$ssdata['pay_point'] = $data['pay_point'];
			$ssdata['memo'] = $data['memo'];
			$ssdata['wish_day'] = $data['wish_day'];
			$ssdata['wish_time'] = $data['wish_time'];
			$ssdata['delivcost_separate_ticket'] = $data['delivcost_separate_ticket'];
			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,
				'credit_userid'=>$userid?'GRYUSR'.$userid:'GRYUSR_guest_'.$purresult['purchasecode'],
				'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'],
			);
			if ($data['paytype'] == 1){
				$senddata['st_code'] = '11000-0000-00000-00000-00000-00000-00000';
			}
			else if ($data['paytype'] == 11){
				$senddata['st_code'] = '00010-0000-00000-00000-00000-00000-00000';
			}
			else if ($data['paytype'] == 12){
				$senddata['st_code'] = '00001-0000-00000-00000-00000-00000-00000';
			}

			$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, 'msg'=>'not payment complete'));
				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['paytype'] == 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);
		}
		if ($data['paytype'] == 2){
			$res = $this->forMail('cart_complete_bank', $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 frontFanclubpay(){
		$mode = $this->p('mode');
		if (!in_array($mode, array('confirm','send','update','eps'))){
			$this->js_output(array('success'=>0));
			return;
		}

		$user = $this->currentUser();
		$userid = $user->get('ID');
	
		$msg = array();
		
		$pur = $this->loadModel('FanPurchase');

			
		if (in_array($mode, array('send','update'))){
			if($mode == "send") $process_code = 1;
			else if($mode == "update") $process_code = 4;

			$res = $pur->createPurchaseForCredit();
			if (!$res){
				$this->js_output(array('success'=>0,'message'=>'fan_purchase_error1'));
				return;
			}
			$purresult = $res;
			$this->finish(true);

			$ss = grys_get_fanclub_value('fanclub_session');
			if (!$ss){
				$ss = grys_generate_session();
			}
			$cachename = grys_get_fanclub_value("cachename", $ss);
			$so = $this->loadModel('Session');
			$res = $so->getSession($cachename);

			$sdt = null;
			if ($res){
				$sdt = $res;
			}
			if (!$sdt) $sdt = array();
			$sdt['pay_purchasecode'] = $purresult['purchasecode'];
			$sdt['mode'] = $mode;
			
			$this->begin();
			$res = $so->setSession($cachename, $sdt, grys_get_fanclub_value("cacheexpire"));
			if (!$res){
				$this->js_output(array('success'=>0,'message'=>'session error 1'));
				return;
			}
			$this->finish(true);
			grys_set_fanclub_cookie($ss);

			if ($userid){
				$email = $user->get('user_email');
			}
			else{
				$this->js_output(array('success'=>0,'message'=>'not loggedin'));
				return;
			}
			
			
			$cf = $this->loadModel('Config');
			$senddata = array(
				'credit_userid'=>'GRYUSR'.$userid,
				'order_number'=>$purresult['purchasecode'],
				'price'=>$cf->getConfig('fanclub_monthly_price'),
				'item_name'=>'巌流島ファンクラブ',
				'item_code'=>'ganryu-fanclub',
				'process_code'=>$process_code,
				'user_mail_add'=>$email,
				'user_name'=>$user->get('display_name'),
			);
			

			$eps_target = $cf->getConfig('eps_connect');
			$res = grys_eps_fanclub_purchase($eps_target, $senddata);
			if (!$res){
				$this->js_output(array('success'=>0,'message'=>'eps error 1'));
				return;
			}
			if ($res['result'] != 1){
				$this->js_output(array('success'=>0,'message'=>@$res['err_detail']));
				return;
			}
			
			$this->js_output(array('success'=>1, 'noerror'=>1, 'created'=>2, 'eps_connect'=>$res['redirect']));
			return;
		}

		$so = $this->loadModel('Session');
		$ss = grys_get_fanclub_value('fanclub_session');
		if (!$ss){
			$this->js_output(array('success'=>0));
			return;
		}
		$sskey= grys_get_fanclub_value('cachename', $ss);
		$res = $so->getSession($sskey);
		if (!$res){
			$this->js_output(array('success'=>0));
			return;
		}
		$data = $res;

		if ($mode == "eps"){
			if (!$data['pay_purchasecode']){
				$this->js_output(array('success'=>0));
				return;
			}

			if($data['mode'] == "send") { 
				update_user_meta($userid,'fanclub_member_flg',1);
				update_user_meta($userid,'fanclub_registered_date',date("Y-m-d"));
				update_user_meta($userid,'fanclub_updated_date',date("Y-m-d"));
				update_user_meta($userid,'fanclub_unregist_date',"");
			}
		}
		else{
			$data['pay_purchasecode'] = null;
		}
		
		$this->begin();

		$data['paytype'] = 1;
		$data['payment_status'] = ($mode == "eps")?2:1; 
		$data['process_code'] = ($data["mode"]== "update")?2:1; 

		$res = $pur->createPurchase($userid, $data);
		if (!$res){
			$this->finish();
			$this->js_output(array('success'=>0));
			return;
		}
		$payresult = $res;
		$payid = $payresult['purchaseid'];

		$so->deleteSession($sskey);
		$this->finish(true);
		
		grys_set_fanclub_cookie('');

		$this->js_output(array('success'=>1, 'noerror'=>1, 'created'=>1, 'purchaseid'=>$payid));

	}

	function frontFanclubcancel(){
		$user = $this->currentUser();
		$userid = $user->get('ID');
	
		$msg = array();

		if (!$userid){
			$this->js_output(array('success'=>0,'message'=>'not loggedin'));
			return;
		}
			
		$cf = $this->loadModel('Config');
		$senddata = array(
			'credit_userid'=>'GRYUSR'.$userid,
			'item_code'=>'ganryu-fanclub',
		);

		$eps_target = $cf->getConfig('eps_connect');
		$res = grys_eps_fanclub_cancel($eps_target, $senddata);
		if (!$res){
			$this->js_output(array('success'=>0,'message'=>'eps error 1'));
			return;
		}
		if ($res['result'] != 1){
			$this->js_output(array('success'=>0,'message'=>@$res['err_detail']));
			return;
		}
		$can = $this->loadModel('FanCancel');
		$res = $can->createCancel($userid);
		if (!$res){
			$this->js_output(array('success'=>0,'message'=>'fan_cancel_error1'));
			return;
		}

		update_user_meta($userid,'fanclub_member_flg',0);
		update_user_meta($userid,'fanclub_unregist_date',date("Y-m-d"));
		
		$this->js_output(array('success'=>1, 'noerror'=>1, 'created'=>2, 'eps_connect'=>$res['redirect']));
		return;

	}


	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 = "";
		$cf = $this->loadModel('Config');
		$res = $cf->getCurrentTax();
		if (!$res){
			return;
		}
		$tax = $res;
		$taxtotal = 0;

		foreach ($ilist as $iar){
			$res = $itm->getSubitem($iar[0]);
			if (!$res){
				continue;
			}
			$subitem = $res;
			$subitem['subprice_tax'] = (int)($subitem['subprice']*$tax*0.01);
			
			$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];
			$taxtotal += $subitem['subprice_tax'] * $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, 'tax_total'=>$taxtotal,
			'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){
				$res = $this->forMail('deliv_complete', $pid);
				if ($res){
					grys_mail($res);
				}
			}
		}
		
		$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['wish_day'] = $this->p('deliv'.($i+1).'_wish_day');
				$adata['wish_time'] = $this->p('deliv'.($i+1).'_wish_time');
				$adata['company_name'] = $this->p('deliv'.($i+1).'_company_name');
				$adata['itemcart'] = $this->p('deliv'.($i+1).'_itemcart');
				$delivlist[] = $adata;
				$admsg = $this->checkAddress($adata);
				if ($adata['wish_day']){
					if (!preg_match('/^\d{8}$/', $adata['wish_day'])){
						$admsg['wish_day'] = '配送希望日が不正です';
					}
					else if (!checkdate(substr($adata['wish_day'], 4, 2),substr($adata['wish_day'], 6, 2),substr($adata['wish_day'], 0, 4))){
						$admsg['wish_day'] = '配送希望日が不正です';
					}
				}
				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));
		
	}

}