File "send_msg.php"
Full path: /www/ansys/qgis/003_asahikawa/intercomm/send_msg.php
File size: 14.7 KiB (15050 bytes)
MIME-type: text/x-php
Charset: utf-8
<?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 = "6";
$CONST_ID = "2";
$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>";
?>