<?php
//-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*
//	自動でクラスを参照する
//	関数名	：	__autoload()
//	備考	：	参照先は./class/XXX.phpとする
//	更新	：	2012/10/19 KMK-Teraoka
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
function __autoload($className)
{
	$fPath = "./class/" . str_replace("_", "/", $className) . ".php";
	require_once $fPath;
}

//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
//	GCMで指定端末にイベントを送る
//	関数名	：	sendGcmEvent
//	備考	：	
//	更新	：	2013/03/19 KMK-Teraoka
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
function sendGcmEvent($gcmId_, $events_)
{
	$url = "https://android.googleapis.com/gcm/send";
	
	$header = array(
		"Content-Type: application/x-www-form-urlencoded;charset=UTF-8",
		"Authorization: key=AIzaSyCtFNuvqkLxtwe0hfTp38Xk17Nq8_YHGVw",		//API key
	);
	
	$post_list = array(
		"registration_id"	=>	$gcmId_,
		"collapse_key"		=>	time(),
		"data.message"		=>	time(). "#". (strlen(bin2hex($events_)) / 2). "#". $events_,
	);
	
	$post = http_build_query($post_list, "&");
	
	$ch = curl_init($url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_FAILONERROR, 1);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
	curl_setopt($ch, CURLOPT_POST, TRUE);
	curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
	curl_setopt($ch, CURLOPT_TIMEOUT, 5);
	$ret = curl_exec($ch);
	
	//var_dump($ret);
	
	return $ret;
}

//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
//	イベントテーブルにデータを挿入
//	関数名	：	sendGcmEvent
//	戻り	：	登録ID
//	備考	：	
//	更新	：	2013/04/19 KMK-Teraoka
//-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
function insertSendEventsTable($conn_, $appId_, $constId_, $gcmId_, $toAndroidId_, $eventId1_, $eventId2_, $eventId3_, $eventId4_)
{
	$insGcmEv = "INSERT INTO qgis.gcm_event";
	$insGcmEv .= " (event_id, app_id, const_id, from_android_id, to_android_id, to_gcm_id, ev_01, ev_02, ev_03, ev_04, snddatetime, upddatetime, regdatetime)";
	$insGcmEv .= " VALUES (";
	$insGcmEv .= " nextval('qgis.gcm_event_event_id_seq'),";
	$insGcmEv .= "'". $appId_. "'";
	$insGcmEv .= ",'". $constId_. "'";
	$insGcmEv .= ",''";
	$insGcmEv .= ",'". $toAndroidId_. "'";
	$insGcmEv .= ",'". $gcmId_. "'";
	$insGcmEv .= ",'". $eventId1_. "'";
	$insGcmEv .= ",'". $eventId2_. "'";
	$insGcmEv .= ",'". $eventId3_. "'";
	$insGcmEv .= ",'". $eventId4_. "'";
	$insGcmEv .= ",current_timestamp";
	$insGcmEv .= ",current_timestamp";
	$insGcmEv .= ",current_timestamp";
	$insGcmEv .= ");";
	
	Debug::write($insGcmEv);
	$resGcmEv = pg_query($conn_, $insGcmEv);
	
	$resLsSeqId = pg_query($conn_, "SELECT currval('qgis.gcm_event_event_id_seq');");
	$rowLsSeqId = pg_fetch_assoc($resLsSeqId);
	
	return $rowLsSeqId["currval"];
}

//===============================================
//	DEBUG_MODE
//	備考		：	
//	更新		：	2012/10/19 KMK-Teraoka
//===============================================
define("DEBUG_MODE", "0");
Debug::setMode(DEBUG_MODE);
if (DEBUG_MODE == 1)
{
	Stopwatch::start();
}

//===============================================
//	CommonUtilities
//	備考		：	
//	更新		：	2012/11/27 KMK-Teraoka
//===============================================
$PENTA_OCEAN = "五洋建設株式会社";
$TAIL_PENTA_OCEAN = "penta-ocean";
$SCRIPT_TITLE = "運行管理-旭川- 音声ガイダンス送信";
$APP_ID = "8";
$CONST_ID = "1";
$HOST = "192.168.100.153";
$DB = "ansys";
$USER = "postgres";
$PASS = "am#71ZJ*";
$LOG_FILE = "./log/send_msg.log";
$WORK_STATUS = "0";

$CONST_NAME = "";
switch($WORK_STATUS)
{
	case 0:
		$CONST_NAME = "五洋建設 管理者用";
		break;
	case 1:
		$CONST_NAME = "北海道TC生コン(株) 管理者用";
		break;
	case 2:
		$CONST_NAME = "(株)野田生コンクリート 管理者用";
		break;
	case 3:
		$CONST_NAME = "三共宇部生コン(株) 管理者用";
		break;
	default:
		throw new Exception("作業ステータスが選択されていません");
		break;
}

$EVENTS_LIST = array(
	"0"		=>	array("ev_id1"	=>	"13",	"ev_id2"	=>	"20",	"ev_id3"	=>	"-1",	"ev_id4"	=>	"-1",	"ev_info"	=>	"通常ルートで渋滞が発生しています"),
	"1"		=>	array("ev_id1"	=>	"14",	"ev_id2"	=>	"20",	"ev_id3"	=>	"-1",	"ev_id4"	=>	"-1",	"ev_info"	=>	"別ルートで渋滞が発生しています"),
	"2"		=>	array("ev_id1"	=>	"14",	"ev_id2"	=>	"21",	"ev_id3"	=>	"-1",	"ev_id4"	=>	"-1",	"ev_info"	=>	"別ルートへ迂回して下さい"),
	"3"		=>	array("ev_id1"	=>	"13",	"ev_id2"	=>	"21",	"ev_id3"	=>	"-1",	"ev_id4"	=>	"-1",	"ev_info"	=>	"通常ルートへ迂回して下さい"),
	"4"		=>	array("ev_id1"	=>	"13",	"ev_id2"	=>	"22",	"ev_id3"	=>	"-1",	"ev_id4"	=>	"-1",	"ev_info"	=>	"通常ルートで通行止め区間があります"),
	"5"		=>	array("ev_id1"	=>	"14",	"ev_id2"	=>	"22",	"ev_id3"	=>	"-1",	"ev_id4"	=>	"-1",	"ev_info"	=>	"別ルートで通行止め区間があります"),
	"6"		=>	array("ev_id1"	=>	"23",	"ev_id2"	=>	"-1",	"ev_id3"	=>	"-1",	"ev_id4"	=>	"-1",	"ev_info"	=>	"出荷を待って下さい"),
	"7"		=>	array("ev_id1"	=>	"24",	"ev_id2"	=>	"-1",	"ev_id3"	=>	"-1",	"ev_id4"	=>	"-1",	"ev_info"	=>	"出荷してください"),
	"8"		=>	array("ev_id1"	=>	"13",	"ev_id2"	=>	"19",	"ev_id3"	=>	"-1",	"ev_id4"	=>	"-1",	"ev_info"	=>	"通常ルートを走行してください"),
	"9"		=>	array("ev_id1"	=>	"14",	"ev_id2"	=>	"19",	"ev_id3"	=>	"-1",	"ev_id4"	=>	"-1",	"ev_info"	=>	"別ルートを走行してください"),
);

$EVENT_HISTORY = array(
	"0"	=>	array("view"	=>	"端末名称",		"value"		=>	"terminal_name",	"type"	=>	"0"),
	"1"	=>	array("view"	=>	"状態",			"value"		=>	"ret",				"type"	=>	"1"),
	"2"	=>	array("view"	=>	"要求時間",		"value"		=>	"snddatetime",		"type"	=>	"0")
);

//===============================================
//	HTML-HEAD-
//	備考		：	
//	更新		：	2012/11/27 KMK-Teraoka
//===============================================
print "<html>";
print "<head>";
print "<meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\">";
print "<title>". $SCRIPT_TITLE. "</title>";
print "<link rel=\"stylesheet\" type=\"text/css\" href=\"/ansys/config/css/style.css\">";
print "<link rel=\"shortcut icon\" href=\"/ansys/config/favicon.ico\">";
print "</head>";

//===============================================
//	HTML-BODY部開始-
//	備考		：	
//	更新		：	2012/11/27 KMK-Teraoka
//===============================================
print "<body>";

try
{
	//================================================
	//	データベース接続
	//	備考		：	
	//	更新		：	2012/11/27 KMK-Teraoka
	//================================================
	$conn = pg_connect("
		host	=	". $HOST. "
		dbname	=	". $DB. "
		user	=	". $USER. "
		password=	". $PASS. "
	");
	if (!$conn)
	{
		throw new Exception("データベースへの接続に失敗しました");
	}
	
	//===============================================
	//	端末名称, Id, gcmidの抽出
	//	備考		：	
	//	更新		：	2013/04/18 KMK-Teraoka
	//===============================================
	$selectTerminal = "SELECT ts.android_id, gc.gcm_id, ts.terminal_name FROM qgis.ts_terminal as ts, qgis.gcm_terminals as gc WHERE";
	$selectTerminal .= " ts.android_id = gc.android_id AND ts.app_id='". $APP_ID. "' AND ts.const_id='". $CONST_ID. "' AND gc.app_id='". $APP_ID. "' AND gc.const_id='". $CONST_ID. "'";
	if (strcmp($WORK_STATUS, "0") != 0)
	{
		$selectTerminal .= " AND ts.work_status='". $WORK_STATUS. "'";
	}
	if (DEBUG_MODE != 1)
	{
		$selectTerminal .= " AND ts.android_id != '198903985b36c4b2'";
	}
	$selectTerminal .= " ORDER BY ts.terminal_name";
	$selectTerminal .= ";";
	Debug::write($selectTerminal);
	if (!($resTerminal = pg_query($conn, $selectTerminal)))
	{
		throw new Exception("読み込み失敗<br />". $selectTerminal. "<br />". pg_last_error(). "<br />");
	}
	
	//===============================================
	//	POST、GETパラメータの受け取り
	//	備考		：	
	//	更新		：	2012/11/27 KMK-Teraoka
	//===============================================
	if (DEBUG_MODE == 1)
	{
		extract($_POST);
		extract($_GET);
		Debug::writes($_POST);
	}
	$btnSendEvent = isset($_POST["btnSendEvent"]) ? htmlspecialchars($_POST["btnSendEvent"]) : "";
	if (strcmp($btnSendEvent, "") != 0)
	{
		$selTerm = isset($_POST["selTerm"]) ? htmlspecialchars($_POST["selTerm"]) : "";
		if (strcmp($selTerm, "") == 0)
		{
			throw new Exception("選択した端末は存在しません");
		}
		
		// EventIdの抽出
		$row = count($EVENTS_LIST);
		for($iCount = 0; $iCount < $row; $iCount++)
		{
			if (strcmp($EVENTS_LIST[$iCount]["ev_info"], $btnSendEvent) == 0)
			{
				$sendEvents = $EVENTS_LIST[$iCount];
				break;
			}
		}
		$events = $sendEvents["ev_id1"]. ",". $sendEvents["ev_id2"]. ",". $sendEvents["ev_id3"]. ",". $sendEvents["ev_id4"];
		
		if (strcmp($selTerm, "all,all") == 0)
		{
			// 全件送信を行う
			$row = pg_num_rows($resTerminal);
			for($iCount = 0; $iCount < $row; $iCount++)
			{
				$rowTerminal = pg_fetch_assoc($resTerminal, $iCount);
				
				$regId = insertSendEventsTable($conn, $APP_ID, $CONST_ID, $rowTerminal["gcm_id"], $rowTerminal["android_id"], $sendEvents["ev_id1"], $sendEvents["ev_id2"], $sendEvents["ev_id3"], $sendEvents["ev_id4"]);
				$ret = sendGcmEvent($rowTerminal["gcm_id"], $regId. ",". $events);
				$updReqRet = "UPDATE qgis.gcm_event SET req_ret='". $ret. "',upddatetime=current_timestamp WHERE event_id='". $regId. "';";
				$resReqRet = pg_query($conn, $updReqRet);
			}
		}
		else
		{
			// 選択された端末のみに送る
			$term_info = explode(",", $selTerm, 2);
			$regId = insertSendEventsTable($conn, $APP_ID, $CONST_ID, $term_info[0], $term_info[1], $sendEvents["ev_id1"], $sendEvents["ev_id2"], $sendEvents["ev_id3"], $sendEvents["ev_id4"]);
			$ret = sendGcmEvent($term_info[0], $regId. ",". $events);
			$updReqRet = "UPDATE qgis.gcm_event SET req_ret='". $ret. "',upddatetime=current_timestamp WHERE event_id='". $regId. "';";
			$resReqRet = pg_query($conn, $updReqRet);
		}
	}
	
	//===============================================
	//	見出し
	//	備考		：	Table内TableでBorderを細くする
	//	更新		：	2012/11/27 KMK-Teraoka
	//===============================================
	print "<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"0\" cellpadding=\"0\">";
	print "<tr>";
	print "<td>";
	print "<table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"3\">";
	print "<tr bgcolor=\"#99CCFF\">";
	print "<td align=\"left\">";
	print "音声ガイダンス送信<br />[". $CONST_NAME. "]";
	print "</td>";
	print "</tr>";
	print "</table>";
	print "</td>";
	print "</tr>";
	print "</table>";
	print "<br />";
	
	print "<form action=\"". $_SERVER['PHP_SELF']. "\" method=\"post\" style=\"display:inline\">";
	
	//===============================================
	//	端末選択selectbox
	//	備考		：	
	//	更新		：	2012/11/27 KMK-Teraoka
	//===============================================
	$terminals = array();
	$termIndex = 0;
	
	$terminals[$termIndex]["android_id"] = "all";
	$terminals[$termIndex]["gcm_id"] = "all";
	$terminals[$termIndex]["name"] = "所属端末 全件";
	$termIndex++;
	
	$row = pg_num_rows($resTerminal);
	
	for($iCount = 0; $iCount < $row; $iCount++)
	{
		$rowTerminal = pg_fetch_array($resTerminal, $iCount, PGSQL_ASSOC);
		
		$terminals[$termIndex]["android_id"] = $rowTerminal["android_id"];
		$terminals[$termIndex]["gcm_id"] = $rowTerminal["gcm_id"];
		$terminals[$termIndex]["name"] = $rowTerminal["terminal_name"];
		
		$termIndex++;
	}
	
	print "再生端末⇒";
	print "<select name=\"selTerm\" id=\"select_option\">";
	for($iCount = 0; $iCount < count($terminals); $iCount++)
	{
		$selOption = "";
		if ($iCount == 0)
		{
			$selOption = " selected";
		}
		print "<option value=\"". $terminals[$iCount]["gcm_id"]. ",". $terminals[$iCount]["android_id"]. "\" ". $selOption. ">". $terminals[$iCount]["name"]. "</option>";
	}
	print "</select>";
	print "<br />";
	print "<br />";
	print "<hr />";
	print "<br />";
	
	print "<center>";
	//===============================================
	//	Event送信Button
	//	備考		：	
	//	更新		：	2012/11/27 KMK-Teraoka
	//===============================================
	$row = count($EVENTS_LIST);
	for($iCount = 0; $iCount < $row; $iCount++)
	{
		if ($iCount != 0)
		{
			print "<br />";
		}
		print "<input type=\"submit\" name=\"btnSendEvent\" value=\"". $EVENTS_LIST[$iCount]["ev_info"]. "\" style=\"width:280px\" id=\"submit_button\">";
		print "<br />";
	}
	print "</center>";
	
	print "</form>";
	
	//===============================================
	//	Event送信Button
	//	備考		：	
	//	更新		：	2012/11/27 KMK-Teraoka
	//===============================================
	/*
	$selectReqHis = "SELECT ts.terminal_name, gc.ret, gc.snddatetime FROM qgis.gcm_event AS gc, qgis.ts_terminal AS ts";
	$selectReqHis .= " WHERE gc.to_android_id = ts.android_id";
	$selectReqHis .= " AND ts.const_id='2'";
	$selectReqHis .= " AND ts.app_id='6'";
	$selectReqHis .= " AND ts.work_status='0'";
	$selectReqHis .= " ORDER BY gc.snddatetime DESC";
	$selectReqHis .= " LIMIT 3";
	
	$resReqHis = pg_query($conn, $selectReqHis);
	$row = pg_num_rows($resReqHis);
	
	print "<table width=\"100%\" border=\"0\" bgcolor=\"#000000\" cellspacing=\"0\" cellpadding=\"0\">";
	print "<tr>";
	print "<td>";
	print "<table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"3\">";
	
	print "<tr bgcolor=\"#99CCFF\">";
	print "<td align=\"left\" colspan=\"3\">";
	print "音声ガイダンス送信履歴";
	print "</td>";
	print "</tr>";
	
	print "<tr bgcolor=\"#99CCFF\">";
	$hisRow = count($EVENT_HISTORY);
	for($iCount = 0; $iCount < $hisRow; $iCount++)
	{
		print "<td align=\"left\">";
		print $EVENT_HISTORY[$iCount]["view"];
		print "</td>";
	}
	print "</tr>";
	for($iCount = 0; $iCount < $row; $iCount++)
	{
		$rowReqHis = pg_fetch_assoc($resReqHis, $iCount);
		
		print "<tr bgcolor=\"#FFFFFF\">";
		for($jCount = 0; $jCount < $hisRow; $jCount++)
		{
			print "<td align=\"left\" style=\"width:33%\">";
			if ($EVENT_HISTORY[$jCount]["type"] == 1)
				if (strcmp($rowReqHis[$EVENT_HISTORY[$jCount]["value"]], "t") == 0)
					print "再生済み";
				else
					print "未再生";
			else
				print $rowReqHis[$EVENT_HISTORY[$jCount]["value"]];
			print "</td>";
		}
		print "</tr>";
	}
	print "</table>";
	print "</td>";
	print "</tr>";
	print "</table>";
	*/
}
catch(Exception $exc)
{
	print "<font color=\"#FF0000\">";
	print "【スクリプトエラー】<br />";
	print $exc->getMessage(). "<br />";
	print "</font>";
}

//===============================================
//	Postgresql終了処理
//	備考		：	
//	更新		：	2012/10/19 KMK-Teraoka
//===============================================
pg_close($conn);

//===============================================
//	HTML終了処理
//	備考		：	
//	更新		：	2012/10/18 KMK-Teraoka
//===============================================
print "</body>";
print "</html>";
?>
