<meta http-equiv="Conten-Type" content="text/html; charset=UTF-8">

<?php

function leftBrackets(){
	// $leftBrackets = "\^\[\^" では誤作動
	//	return "\^\[\^"; // encode 中で使う '(' -- クライアント側との約束 lib.js
	return "^[^"; // encode 中で使う '(' -- クライアント側との約束 lib.js
}
function rightBrackets(){
	return "^]^"; // encode 中で使う '(' -- クライアント側との約束 lib.js
	//	return "\^\]\^"; // encode 中で使う '(' -- クライアント側との約束 lib.js
}
function decodeObject($buff){
	// "key(value)" 形式の文字列を OBJECT に decode して返す
	$obj = array();
	//	echo "decodeObject ===\n$buff\n"; //##
	for ($p=$begin=$nest=0, $len=strlen($buff); $p < $len; $p++){
		$ch = substr($buff, $p, 1);
		if (strcmp($ch, "(") == 0){
			if ($nest == 0){
				$key = trim(substr($buff, $begin, $p - $begin)); // key 終端
				$begin = $p + 1; // value 開始位置
			}
			$nest++;
		} else if (strcmp($ch, ")") == 0){
			if (--$nest == 0){
				if ($nest == 0){
					// value 終端 ( trim しない )
					$value = substr($buff,$begin,$p-$begin);
					$begin = $p + 1; // key 開始位置
				}
				if (ereg(")", $value)){ // まだ入れ子になっているなら
					$obj[$key] = decodeObject($value);
				} else {
					// 特定文字を "(", ")" へ戻す
					$array = explode(leftBrackets(), $value);
					$value = join("(", $array);
					$array = explode(rightBrackets(), $value);
					$value = join(")", $array);
					
					$obj[$key] = $value;
				}
				//echo "$key{".$obj[$key]."}\n"; //##
			}
		}
	}
	return $obj;
}

function decodeSTRING($val){
	// #, &, +  < > などが URI 送信で化けるため encode して送られたものを decode
	$array = explode("%x0;", $val);
	$val = implode("#", $array);
	$array = explode("%x1;", $val);
	$val = implode("&", $array);
	$array = explode("%x2;", $val);
	$val = implode("+", $array);
	$array = explode("%x3;", $val);
	$val = implode("<", $array);
	$array = explode("%x4;", $val);
	$val = implode(">", $array);
	$array = explode("%x5;", $val);
	$val = implode(" ", $array);
	$array = explode("%x6;", $val);
	$val = implode("\n", $array);
	$array = explode("%x7;", $val);
	$val = implode("\"", $array);
	$array = explode("%x8;", $val);
	$val = implode("$", $array);
	return $val;
}
		
function rowidOfGroup($groupName){
	// 約束処方がみつかればその rowid みつからなければ (-1) を返す
	$query="select * from PriceList where code=120 and name='$groupName'";
	$result=mysql_query($query);
	
	// ここで rowid あるいは (-1) を返すようにする
	if (mysql_num_rows($result) > 0){
		$row=mysql_fetch_array($result);
		return $row['rowid'];
	}
	return (-1);
}

function rowidOfUsage($code, $item){
	// 用法がみつかればその rowid みつからなければ (-1) を返す
	$query="select * from `PriceList` where `code`='$code' and `name`='$item'";
	$result=mysql_query($query);
	
	// ここで rowid あるいは (-1) を返すようにする
	if (mysql_num_rows($result) > 0){
		$row=mysql_fetch_array($result);
		return $row['rowid'];
	}
	return (-1);
}

function timestamp(){
	// 現在のタイムスタンプを返す updateTime に使う
	return date("Y-m-d H:i:s",time());
}
		
function usageList(){
	// 用法データすべてを返す
	// pareametar: $type
	// prescription.php 初期化される際 GET でカルテデータが呼ばれる時同時に読込む
	$sql = "SELECT * FROM `PriceList` WHERE `code`='129' ORDER BY `name`";
	$result=mysql_query($sql);
    echo "$sql \n";
	
	$array = array();
	while ($row=mysql_fetch_array($result)){
		$type = $row['alias'];
		$value = $row['name'];
		$array[] = array('type'=>$row['alias'],'value'=>$row['name']);
	}

	return $array;
//	return json_encode($array);
}

function getList($code){
	// code に合致した薬剤名リストを返す(約束処方も含む)
	$query="SELECT * FROM `PriceList` WHERE `code` LIKE '%$code%' ORDER BY `alias`";
	$result=mysql_query($query);
    echo "$sql \n"; //##
	
	$array = array();
	while ($row=mysql_fetch_array($result)){
		$array[] = array(
						 'code'=>$row['code'],'alias'=>$row['alias'],'name'=>$row['name'],'generic'=>$row['generic'],
						 'point'=>$row['point'],'unit'=>$row['unitName'],'handan'=>$row['handan'],
						 'min'=>$row['min'],'standard'=>$row['standard'],'max'=>$row['max'],
						 'width'=>$row['width'],'effect'=>$row['effect'],'memo'=>$row['memo']
						 );
	}
	return $array;
}
    
function genericForName($name){
    // $name に対応する generic を返す
	$query="SELECT * FROM `PriceList` WHERE ((`code` like '%21%') OR (`code` like '%22%')) AND `name` = '$name'";
    echo "query: $query\n"; //##
    
	$result=mysql_query($query);
	while ($row=mysql_fetch_array($result)){
        if ($row['generic']) return $row['generic'];
    }
    return "";
}


$command=$_GET['command']; $command=htmlspecialchars($command);
$code=$_GET['code']; $code=htmlspecialchars($code);
$patientId = $_GET['patientId']; $patientId = htmlspecialchars($patientId);
$currentDate = $_GET['currentDate']; $currentDate = htmlspecialchars($currentDate);
$groupName = $_GET['groupName']; $groupName = htmlspecialchars($groupName);
$effect = $_GET['effect']; $effect = htmlspecialchars($effect);
$records = $_GET['records']; $records = htmlspecialchars($records);
$type = $_GET['type']; $type = htmlspecialchars($type);
$item = $_GET['item']; $item = htmlspecialchars($item);
$freq = $_GET['freq']; $freq = htmlspecialchars($freq);
$value = $_GET['value']; $value=htmlspecialchars($value);
$value = decodeSTRING($value); // lib.php

// DB を開いて該当レコードを読み込む
// ### セキュリティーを保つには、以下のファイルを外からアクセスできない 
// ### directory に置き、以下の cfg.php の pass をそこへ変更
require_once('../XNOA/cfg.php');

$dbc = mysql_connect($db['host'], $db['user'], $db['pwd']);
$db_select=mysql_select_db($db['dbname']);
mysql_query("set names utf8");

if (strcmp($command, "GET_LIST") == 0){
	// code に合致した薬剤名リストを返す(約束処方も含む)
	$array = getList($code);
	echo "<SEPARATOR>";
	echo json_encode($array);
} else if (strcmp($command, "HAS_GROUP") == 0){
	echo "<SEPARATOR>";
	echo (rowidOfGroup($groupName) == (-1)) ? "" : "YES";
} else if (strcmp($command, "PUT_GROUP") == 0){
	$records = stripslashes($records);
	// 以下で rowid をうけとるようにする #####
	$rowid = rowidOfGroup($groupName);
	if ($rowid != (-1)){ // 既に存在するので上書き
		$sql = "UPDATE `PriceList`
			SET `name`='$groupName', `effect`='$effect', `memo`='$records', 
				`updateTime`='".date("Y-m-d H:i:s",time())."'
			WHERE `rowid` = $rowid";
	}
	else {
		$sql = "INSERT INTO `PriceList` (`code` ,`name`,`effect`,`memo` 
			,`updateTime` ,`rowid`) 
			VALUES ('120','$groupName','$effect','$records'
			,'".date("Y-m-d H:i:s",time())."' ,'');";
	}
	mysql_query($sql);

	//$array = getList('120');
	echo "<SEPARATOR>";
	//echo json_encode($array);
} else if (strcmp($command,"REMOVE_GROUP") == 0){
	// 指定された $groupName の約束処方を削除
	
	// 削除する対象データを事前に保存しておく
	$sql="SELECT `memo` FROM `PriceList` WHERE `code`='120' AND `name`='$groupName'";
	$result=mysql_query($sql);
	$row=mysql_fetch_array($result);
	$groupItem = $row['memo'];
	
	$sql = "DELETE FROM `PriceList` WHERE `code`='120' AND `name`='$groupName'";
	mysql_query($sql);
	
	// 変更結果を返す
	echo "<SEPARATOR>";
	echo "約束処方($groupName)を削除しました";
}
else if (strcmp($command,"GET_USAGE_LIST") == 0){
	$array = usageList();
    
	echo "<SEPARATOR>";
    echo json_encode($array);
}
else if (strcmp($command, "PUT_USAGE") == 0){
	// parametar: $item, $freq, $type
	$code = 129; // 決め打ち
	echo "<SEPARATOR>";
	$rowid = rowidOfUsage($code, $item);
	if ($rowid != (-1)){ // 既に存在するので上書き
		$sql = "UPDATE `PriceList`
			SET `code`='$code', `name`='$item', `standard`='$freq',
				`updateTime`='".date("Y-m-d H:i:s",time())."'
			WHERE `rowid` = $rowid";
		echo "用法($item)を更新しました";
	}
	else {
		$sql = "INSERT INTO `PriceList` (`code`,`alias`,`name`,`standard`,`updateTime`) 
			VALUES ('$code',$type,'$item','$freq','".date("Y-m-d H:i:s",time())."')";
		echo "用法($item)を登録しました";
	}
	mysql_query($sql);
//	echo $sql;
}
else if (strcmp($command,"REMOVE_USAGE") == 0){
	// 指定された用法を削除
	// pareametar: $type, $item
	$sql = "DELETE FROM `PriceList`
		WHERE `code`='129' AND `alias`='$type' AND `name`='$item'";
	mysql_query($sql);
	
	// 変更結果を返す
	echo "<SEPARATOR>";
	echo "用法($item)を削除しました";
} else if (strcmp($command, "PUT_PRICE_LIST") == 0){
	// PriceList に薬剤レコードをマージ
	$args = decodeObject($value);
	// client 側との約束ごと
	$code = $args['code'];
	$requestCode = $args['requestCode'];
	$alias = $args['alias'];
	$name = $args['name'];
	$point = $args['point'];
	$unitName = $args['unitName'];
	$min = $args['min'];
	$standard = $args['standard'];
	$max = $args['max'];
	$width = $args['width'];
	$effectCode = $args['effectCode'];
	$effect = $args['effect'];
	$memo = $args['memo'];
	$updateTime = timestamp();
	
	$sql = "SELECT * FROM `PriceList` 
	WHERE `code`='$code' AND `name`='$name'";
	echo "$sql ------\n";
	$result=mysql_query($sql);
	
	$_alias = (strlen($alias)) ? ",`alias`='$alias'" : "";
	$_min = (strlen($min)) ? ",`min`='$min'" : "";
	$_standard = (strlen($standard)) ? ",`standard`='$standard'" : "";
	$_max = (strlen($max)) ? ",`max`='$max'" : "";
	$_width = (strlen($width)) ? ",`width`='$width'" : "";
	$_effect = (strlen($effect)) ? ",`effect`='$effect'" : "";
	$_memo = (strlen($memo)) ? ",`memo`='$memo'" : "";
	
	if (mysql_num_rows ($result)){
		$sql = "UPDATE `PriceList` SET
		`requestCode`='$requestCode'
		$_alias
		,`point`='$point'
		,`unitName`='$unitName' 
		$_min 
		$_standard 
		$_max 
		$_width
		,`effectCode`='$effectCode' $_effect $_memo
		,`updateTime`='$updateTime'
		WHERE `code`='$code' AND `name`='$name'";
	} else {
		$sql = "INSERT INTO `PriceList` 
		(`code`,`requestCode`,`alias`,`name`,`point`,`unitName`
		,`handan`,`min`,`standard`,`max`,`width`,`effectCode`
		,`effect`,`memo`,`updateTime`) 
		VALUES 
		('$code',$requestCode,'$alias','$name','$point','$unitName'
		,'','$min','$standard','$max','$width','$effectCode'
		,'$effect','$memo','$updateTime')";
	}
	mysql_query($sql);
	echo "$sql ------\n";
	echo "<SEPARATOR>";
	echo $value;
} else if (strcmp($command,"GET_GLOBAL_PRICE") == 0){
	$args = decodeObject($value);
	// client 側との約束ごと
	$class = $args['classCode'];
	$effectCode = $args['effectCode'];
	$name = $args['name'];
	if ((strlen($name) > 0) || (strlen($effectCode) > 0)){
		$_effect = (strlen($effectCode)) 
		? "`effectCode` LIKE '$effectCode%' AND " : "";
		$sql = "SELECT * FROM `PriceListGlobal` 
		WHERE $_effect `name` LIKE '%$name%' AND `classCode`='$class'
		ORDER BY `name`";
		echo "$sql ------\n";
		$result=mysql_query($sql);
	} else {
		echo "name($name) effect($effectCode) ... cannnot found\n";
		return;
	}
	
	$records = array();
	while ($row=mysql_fetch_array($result)){
		$array = array();
		$array['code'] = $row['code'];
		$array['classCode'] = $row['classCode'];
		$array['requestCode'] = $row['requestCode'];
		$array['name'] = $row['name'];
		$array['point'] = $row['point'];
		$array['unitCode'] = $row['unitCode'];
		$array['unitName'] = $row['unitName'];
		$array['effectCode'] = $row['effectCode'];
		$array['enforceDate'] = $row['enforceDate'];
		$records[] = $array;
		echo $row['name']."\n";
	}
	echo "<SEPARATOR>";
	echo json_encode($records);
} else if (strcmp($command,"GET_GENERIC") == 0){
	$names = decodeObject($value);
    $ct = count($names);
    $obj = array();
    for ($i=0; $i < $ct; $i++){
        $name = $names[$i];
        $obj[$name] = genericForName($name);
    }
	echo "<SEPARATOR>";
	echo json_encode($obj);
} else
	echo "*** unknown command: $command ***";
		
?>
