<?php
/*
 * postLDAPadmin
 *
 * Copyright (C) 2006,2007 DesigNET, INC.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.

 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.

 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 */

/***********************************************************
 * SyLASѥ饤֥
 *
 * $RCSfile: dglibsylas,v $
 * $Revision: 1.23 $
 * $Date: 2014/07/22 02:50:41 $
 **********************************************************/
define("LOGNAME_MAXLEN",     64);
define("FACILITY_MAXLEN",    64);
define("S_TAB_MAXLEN",       64);
define("APPLICATION_MAXLEN", 64);
define("MAXKEYWORD",        "128");
define("MINKEYWORD",        "1");
define("MAXSUBJECT",        "256");
define("MINSUBJECT",        "0");
define("MAXBODY",           "512");
define("MINBODY",           "0");
define("LOCK",              "lock");
define("DISP_KEY",          "40");
define("MAILTO_DISP",       "᡼밸");
define("MAILTO_LOG",        "Mail To");
define("MAILTO_SET",        "\$ActionMailTo");
define("IP_DISP",           "IPɥ쥹");
define("IP_LOG",            "IP Address");
define("IP_SET",            "\$fromhost-ip");
define("KEYWORD_DISP",      "");
define("KEYWORD_LOG",       "Keyword");
define("KEYWORD_SET",       "\$msg contains");
define("SUBJECT_DISP",      "᡼̾");
define("SUBJECT_LOG",       "Mail Subject");
define("SUBJECT_SET",       "\$template mail_subject");
define("BODY_DISP",         "᡼ʸ");
define("BODY_LOG",          "Mail Body");
define("BODY_SET",           "\$template mail_body");
define("LOG_NAME_DISP",     "̾");
define("LOG_NAME_LOG",      "Log name");
define("FACILITY_DISP",     "եƥ");
define("FACILITY_LOG",      "Facility");
define("FACILITY_SET",      "\$syslogfacility");
define("DEGREE_SET",        "\$syslogseverity");
define("ALL_FACILITY",      ".ALL");
define("ALL_TYPE",          "٤");
define("SEARCH_TAB_DISP",   "ơ֥");
define("SEARCH_TAB_LOG",    "Search table");
define("APPLICATION_DISP",  "ץꥱ");
define("APPLICATION_LOG",   "Application");
define("CHECK_SQL",         "SELECT * FROM loginfo WHERE log_name=\"%s\";");
define("HOSTCHECK_SQL",     "select * from search_hosts " . 
                            "left join hosts on " . 
                            "search_hosts.host_id = hosts.host_id " . 
                            "where hosts.host_id=\"%s\";");
define("HOSTDEL_SQL",       "DELETE FROM hosts WHERE host_id=\"%s\";");
define("CHECK_GROUP_SQL",   "SELECT * FROM loggroup WHERE group_name=\"%s\";");
define("ELS_KEYWORD_MAXLEN", 256);
define("ELS_HOSTNAME_MAXLEN", 1024);
define("DHCP_IPADDRESS_MAXLEN", 39);
define("DHCP_MACADDRESS_MAXLEN", 128);
define("DHCP_INTERFACE_MAXLEN", 32);
define("EASY_SEARCH_SQL",   "SELECT DeviceReportedTime, FromHost, Message " . 
                            "FROM %s " .
                            "WHERE %s " . 
                            "ORDER BY DeviceReportedTime DESC;");
define("DHCP_SEARCH_SQL",   "SELECT DeviceReportedTime, FromHost, Message " . 
                            "FROM %s " .
                            "WHERE %s %s %s" . 
                            "ORDER BY DeviceReportedTime ASC;");
define("EASY_ALLSEARCH_SQL","SELECT DeviceReportedTime, FromHost, Message " . 
                            "FROM %s " .
                            "ORDER BY DeviceReportedTime DESC;");
define("ESL_LOGGROUP_SQL",  "SELECT A.group_id, A.group_name, " . 
                            "C.facility_name, C.search_tab, C.app_name, ". 
                            "D.host_id, D.host_name " . 
                            "FROM loggroup A, search_hosts B, " .
                            "loginfo C, hosts D " . 
                            "WHERE A.group_id = B.group_id " .
                            "AND A.log_id = C.log_id " . 
                            "AND B.host_id = D.host_id " .
                            "AND A.group_id =\"%s\" ORDER BY host_id;");
//define("ADD_MODE",           0);
define("UPDATE_MODE",        1);
define("START",              0);
define("END",                1);
define("BEGIN",             "begin");
define("ROLLBACK",          "rollback");
define("COMMIT",            "commit");
define("CHECK_SH_SQL",      "SELECT * FROM search_hosts WHERE group_id=%s;");
define("DELETE_SH_SQL",     "DELETE FROM search_hosts WHERE group_id=%s;");
define("INSERT_SH_SQL",     "INSERT INTO search_hosts (group_id, host_id) " .
                            "VALUES (\"%s\", \"%s\");");
define("MYSQL",             "mysql");
define("ELASTICSEARCH",     "elasticsearch");

/* DB˳Ǽեƥб */
define("BAD_FACILITY",     "10000");
$mysql_facilitynumbers = array(
                         "kern"     => 0,
                         "user"     => 1,
                         "mail"     => 2,
                         "daemon"   => 3,
                         "auth"     => 4,
                         "security" => 4,
                         "syslog"   => 5,
                         "lpr"      => 6,
                         "news"     => 7,
                         "uucp"     => 8,
                         "cron"     => 9,
                         "authpriv" => 10,
                         "ftp"      => 11,
                         "local0"   => 16,
                         "local1"   => 17,
                         "local2"   => 18,
                         "local3"   => 19,
                         "local4"   => 20,
                         "local5"   => 21,
                         "local6"   => 22,
                         "local7"   => 23,
                         ".ALL"     => 99);

/* 쥯ȥܥå˻Ѥ */
$facility_arr = array("٤"   => "-1",
                      "kern"     => "0",
                      "user"     => "1",
                      "mail"     => "2",
                      "daemon"   => "3",
                      "auth"     => "4",
                      "syslog"   => "5",
                      "lpr"      => "6",
                      "news"     => "7",
                      "uucp"     => "8",
                      "cron"     => "9",
                      "authpriv" => "10",
                      "ftp"      => "11",
                      "local0"   => "16",
                      "local1"   => "17",
                      "local2"   => "18",
                      "local3"   => "19",
                      "local4"   => "20",
                      "local5"   => "21",
                      "local6"   => "22",
                      "local7"   => "23");

$degree_arr = array ("٤"  => "-1",
                      "emerg"  => "0",
                      "alert"  => "1",
                      "crit"   => "2",
                      "err"    => "3",
                      "warn"   => "4",
                      "notice" => "5",
                      "info"   => "6",
                      "debug"   => "7"
                    );

/* ================= ͥåؿ ================= */
/*********************************************************
 * check_strlen()
 *
 * ʸĹ򸡺롣
 *
 * []
 *        $string      ʸ
 *        $maxlen      ʸĹ
 *        $minlen      ǾʸĹ
 *                     (-1λϺǾͤΥåԤʤʤ)
 *
 * [֤]
 *       0             
 *       1             ʸĹ顼
 **********************************************************/
function check_strlen($string, $maxlen, $minlen = -1)
{
    $length = strlen($string);
    if ($length > $maxlen || $length < $minlen) {
        return 1;
    }

    return 0;
}

/*********************************************************
 * check_alpha_bars()
 *
 * ե٥åȡ"-""_"
 *                 ΤߤĤͤΥåؿ
 * եƥΤȾѥڡĤ롣
 *
 * []
 *        $string      ʸ
 *        $maxlen      ʸĹ
 *        $minlen      ǾʸĹ
 *                     (-1λϺǾͤΥåԤʤʤ)
 *        $isFacil     եƥåTRUEϤ
 *
 * [֤]
 *       0             
 *       1             ʸĹ顼
 *       2             ʸ泌顼
 **********************************************************/
function check_alpha_bars($string, $maxlen, $minlen = -1, $isFacil = FALSE)
{
    $length = strlen($string);
    if ($length > $maxlen || $length < $minlen) {
        return 1;
    }

    /* Ⱦѱ羮ʸ국Τߵ */
    $num = "0123456789";
    $sl = "abcdefghijklmnopqrstuvwxyz";
    $ll = strtoupper($sl);
    $sym = $isFacil === TRUE ? " -_" : "-_";
    $allow_letter = $num . $sl . $ll . $sym;
    if (strspn($string, $allow_letter) != $length) {
        return 2;
    }

    return 0;
}

/*********************************************************
 * check_alpha_bars_dot()
 *
 * ե٥åȡ"-""_""."
 *                 ΤߤĤͤΥåؿ
 *
 * []
 *        $string      ʸ
 *        $maxlen      ʸĹ
 *        $minlen      ǾʸĹ
 *                     (-1λϺǾͤΥåԤʤʤ)
 *
 * [֤]
 *       0             
 *       1             ʸĹ顼
 *       2             ʸ泌顼
 **********************************************************/
function check_alpha_bars_dot($string, $maxlen, $minlen = -1, $nbspAllow = 0)
{
    $length = strlen($string);
    if ($length > $maxlen || $length < $minlen) {
        return 1;
    }

    /* Ⱦѱ羮ʸ국Τߵ */
    $num = "0123456789";
    $sl  = "abcdefghijklmnopqrstuvwxyz";
    $ll  = strtoupper($sl);
    $sym = $nbspAllow !== 1 ? "-_." : " -_.";
    $allow_letter = $num . $sl . $ll . $sym;
    if (strspn($string, $allow_letter) != $length) {
        return 2;
    }

    return 0;
}

/*********************************************************
 * check_keyword()
 *
 * ʰץ̤ΥɤͥåԤʤ
 *
 * []
 *        $string      ʸ
 *        $maxlen      ʸĹ
 *        $minlen      ǾʸĹ
 *                     (-1λϺǾͤΥåԤʤʤ)
 *
 * [֤]
 *       0             
 *       1             ʸĹ顼
 *       2             ʸ泌顼
 *       3             
 **********************************************************/
function check_keyword($searchtype, $string, $maxlen, $minlen = -1)
{
    $length = strlen($string);
    if ($length > $maxlen || $length < $minlen) {
        return 1;
    }

    /* Ⱦѱ羮ʸ국Τߵ */
    $num = "0123456789";
    $sl = "abcdefghijklmnopqrstuvwxyz";
    $ll = strtoupper($sl);
    $sym = "!\"#$%&'()=-~^|@`[{;+:*]},<.>\/?_ ";
    $allow_letter = $num . $sl . $ll . $sym;
    if (strspn($string, $allow_letter) != $length) {
        return 2;
    }

    /* ɽǡʸƬ"*"ΤȤϷ֤ */
    if ($searchtype === "2") {
        $top = substr($string, 0, 1);
        if ($top === "*" || $top === "+" || $top === "?") {
            return 3;
        }
    }

    return 0;
}

/*********************************************************
 * check_ipaddress()
 *
 * dhcp̤IPɥ쥹ͥåԤʤ
 *
 * []
 *        $string      ʸ
 *        $maxlen      ʸĹ
 *
 * [֤]
 *       0             
 *       1             ʸĹ顼
 *       2             ʸ泌顼
 **********************************************************/
function check_ipaddress($string, $maxlen)
{
    $length = strlen($string);
    if ($length > $maxlen) {
        return 1;
    }

    /* Ⱦѱ羮ʸ국Τߵ */
    $num = "0123456789";
    $sl = "abcdef";
    $ll = strtoupper($sl);
    $sym = ".:";
    $allow_letter = $num . $sl . $ll . $sym;
    if (strspn($string, $allow_letter) != $length) {
        return 2;
    }

    return 0;
}

/*********************************************************
 * check_macaddress()
 *
 * dhcp̤MACɥ쥹ͥåԤʤ
 *
 * []
 *        $string      ʸ
 *        $maxlen      ʸĹ
 *
 * [֤]
 *       0             
 *       1             ʸĹ顼
 *       2             ʸ泌顼
 **********************************************************/
function check_macaddress($string, $maxlen)
{
    $length = strlen($string);
    if ($length > $maxlen) {
        return 1;
    }

    /* Ⱦѱ羮ʸ국Τߵ */
    $num = "0123456789";
    $sl = "abcdefghijklmnopqrstuvwxyz";
    $ll = strtoupper($sl);
    $sym = ":";
    $allow_letter = $num . $sl . $ll . $sym;
    if (strspn($string, $allow_letter) != $length) {
        return 2;
    }

    return 0;
}

/*********************************************************
 * check_interface()
 *
 * dhcp̤Υ󥿥եͥåԤʤ
 *
 * []
 *        $string      ʸ
 *        $maxlen      ʸĹ
 *
 * [֤]
 *       0             
 *       1             ʸĹ顼
 *       2             ʸ泌顼
 **********************************************************/
function check_interface($string, $maxlen)
{
    $length = strlen($string);
    if ($length > $maxlen) {
        return 1;
    }

    /* Ⱦѱ羮ʸ국Τߵ */
    $num = "0123456789";
    $sl = "abcdefghijklmnopqrstuvwxyz";
    $ll = strtoupper($sl);
    $allow_letter = $num . $sl . $ll;
    if (strspn($string, $allow_letter) != $length) {
        return 2;
    }

    return 0;
}

/*********************************************************
 * check_input_value()
 *
 * ͥåؿ
 * ̾νʣåޤǹԤʤ
 *
 * []
 *      $post           ̤Ϥ줿
 *      $conn           MySQL³֥
 *                      (Ͽξ硢³Τޤ޻)
 *      $mode           ɲá⡼
 *                      0ɲ
 *                      1
 *
 * [֤]
 *      TRUE            
 *      FALSE           ۾
 ********************************************************/
function check_logsearch_input_value(&$post, &$conn, $mode = 0)
{
    global $web_conf;
    global $msgarr;
    global $err_msg;
    global $log_msg;

    /* ̾ */
    if ($mode != UPDATE_MODE) {
        if ($post["log_name"] != "") {
            $ret = check_strlen($post["log_name"], LOGNAME_MAXLEN);
            if ($ret === 1) {
                $err_msg = sprintf($msgarr['28002'][SCREEN_MSG], LOG_NAME_DISP);
                $log_msg = sprintf($msgarr['28002'][LOG_MSG], LOG_NAME_LOG);
                return FALSE;
            }

        } else {
            $err_msg = sprintf($msgarr['28001'][SCREEN_MSG], LOG_NAME_DISP);
            $log_msg = sprintf($msgarr['28001'][LOG_MSG], LOG_NAME_LOG);
            return FALSE;
        }
    }

    /* ϥ */
    if ($post["log_type"] === "----------") {
        /* ˤ */
        $post["log_type"] = "";
    }

    /* եƥ */
    if ($post["facility"] != "" && !preg_match('/^\s+$/', $post["facility"])) {
        $ret = check_alpha_bars($post["facility"], FACILITY_MAXLEN, -1, TRUE);
        if ($ret != 0) {
            $err_msg = sprintf($msgarr['28002'][SCREEN_MSG], FACILITY_DISP);
            $log_msg = sprintf($msgarr['28002'][LOG_MSG], FACILITY_LOG);
            return FALSE;
        }
    } else {
        $post["facility"] = ALL_FACILITY;
    }

    /* ơ֥ */
    if ($post["search_tab"] != "") {
        $ret = check_alpha_bars($post["search_tab"], S_TAB_MAXLEN);
        if ($ret != 0) {
            $err_msg = sprintf($msgarr['28002'][SCREEN_MSG], SEARCH_TAB_DISP);
            $log_msg = sprintf($msgarr['28002'][LOG_MSG], SEARCH_TAB_LOG);
            return FALSE;
        }
    }

    /* ץꥱ */
    if ($post["app_name"] != "") {
        $ret = check_alpha_bars($post["app_name"], APPLICATION_MAXLEN);
        if ($ret != 0) {
            $err_msg = sprintf($msgarr['28002'][SCREEN_MSG], APPLICATION_DISP);
            $log_msg = sprintf($msgarr['28002'][LOG_MSG], APPLICATION_LOG);
            return FALSE;
        }
    }
    /* === ̾νʣå === */

    /* MySQL³ */
    $conn = MySQL_connect_server();
    if ($conn === FALSE) {
        return FALSE;
    }

    if ($mode != UPDATE_MODE) {
        /* MySQLơ֥ξ */
        $sql = sprintf(CHECK_SQL, mysqli_real_escape_string($conn, 
                                                            $post["log_name"]));
        $result = MySQL_exec_query($conn, $sql);
        if ($result === FALSE) {
            mysqli_close($conn);
            return FALSE;
        }

        /* MySQLϿ줿ơ֥ξ˳Ǽ */
        MySQL_get_data($result, $data);

        /* ʣä(̾Ǹꤷ1İʾǤ */
        if(count($data) != 0) {
            mysqli_close($conn);
            $err_msg = sprintf($msgarr['28003'][SCREEN_MSG],
                               escape_html($post["log_name"]));
            $log_msg = sprintf($msgarr['28003'][LOG_MSG], $post["log_name"]);
            return FALSE;
        }
    }

    return TRUE;
}

/* =================== MySQLϢؿ =================== */

/*********************************************************
 * MySQL_connect_server()
 *
 * MySQL³롣(³եˤƷ)
 *
 * []
 *       ʤ
 *
 * [֤]
 *       $conn         MySQLؤ³֥
 *       FALSE         ۾
 **********************************************************/
function MySQL_connect_server()
{
    global $web_conf;
    global $msgarr;
    global $err_msg;
    global $log_msg;

    /* ³ɬפʾѿ */
    $server = $web_conf["sylas"]["dbserver"];
    $port   = $web_conf["sylas"]["dbserverport"];
    $dbuser = $web_conf["sylas"]["dbuser"];
    $dbpass = $web_conf["sylas"]["dbpassword"];
    $dbname = $web_conf["sylas"]["dataname"];

    /* ³ԻʲΤ褦WarningϤΤ뤿ᡢ      *
     * mysql_connectˡ֡פĤƽ                              *
     *                                                                    *
     * Warning: mysql_connect() [function.mysql-connect]:                 *
     * Lost connection to MySQL server at 'reading initial communication  *
     * packet', system error                                              */

    /* ǡ١³ */
    $conn = @mysqli_connect($server, $dbuser, $dbpass, "", $port);
    if ($conn === FALSE) {
        $ip_addr = $web_conf["sylas"]["dbserver"] . ":" 
                   . $web_conf["sylas"]["dbserverport"];
        $err_msg = sprintf($msgarr['27001'][SCREEN_MSG], $ip_addr);
        $log_msg = sprintf($msgarr['27001'][LOG_MSG], $ip_addr);
        return FALSE;
    }

    return $conn;
}

/*********************************************************
 * MySQL_exec_query()
 *
 * Ϥ줿MySQLؤ³֥ȤФƥ
 * 줿ǡˤ֤
 *
 * []
 *       $conn         MySQLؤ³֥
 *       $sql          SQLʸ
 * [֤]
 *       $result       ¹Ԥη̤Υ꥽
 *       FALSE         ۾
 **********************************************************/
function MySQL_exec_query($conn, $sql)
{
    global $web_conf;
    global $msgarr;
    global $err_msg;
    global $log_msg;

    /* ǡ١򤹤 */
    $dbname = $web_conf["sylas"]["dataname"];
    $ret = mysqli_select_db($conn, $dbname);
    if ($ret === FALSE) {
        $mysql_err = mysqli_error($conn);
        $ip_addr = $web_conf["sylas"]["dbserver"] . ":" 
                   . $web_conf["sylas"]["dbserverport"];
        $err_msg = sprintf($msgarr['27002'][SCREEN_MSG], $ip_addr);
        $log_msg = sprintf($msgarr['27002'][LOG_MSG], $mysql_err);
        return FALSE;
    }

    /* ¹Ԥ */
    $result = mysqli_query($conn, $sql);
    if ($result === FALSE) {
        $mysql_err = mysqli_error($conn);
        $err_msg = sprintf($msgarr['27003'][SCREEN_MSG], $mysql_err);
        $log_msg = sprintf($msgarr['27003'][LOG_MSG], $mysql_err);
        return FALSE;
    }

    return $result;
}

/*********************************************************
 * MySQL_get_data()
 *
 * ¹Ԥ̤ǡ˳Ǽ
 *
 * []
 *       $resource     ¹ԤΥ꥽
 *       $data         ǡǼ
 *                     (Ϥ)
 *
 * [֤]
 *       ʤ
 **********************************************************/
function MySQL_get_data($resource, &$data)
{
    /* ǡ1Ԥ˳Ǽ */
    $line = array();
    $data = array();
    for ($i = 0; $line !== NULL; $i++) {
        $line = mysqli_fetch_array($resource, MYSQLI_ASSOC);
        if ($line != NULL) {
            $data[$i] = $line;
        }
    }

    /* Υ꡼줿̤˴ */
    mysqli_free_result($resource);
    return;
}

/*********************************************************
 * delete_hostlist()
 *
 * 򤵤줿ۥȤ롣
 *
 * []
 *       $hostlist      ۥȤIDǼ
 *
 * [֤]
 *       0           
 *       1           ۾
 *       2           ԲĥۥȤ
 **********************************************************/
function delete_hostlist($hostlist)
{
    global $msgarr;
    global $err_msg;
    global $log_msg;

    $del_success = 0;

    /* MySQL³ */
    $conn = MySQL_connect_server();
    if ($conn === FALSE) {
        return 1;
    }

    /* SQL */
    foreach ($hostlist as $host_id) {
        $hostcheck_sql = sprintf(HOSTCHECK_SQL, $host_id);
        $result = MySQL_exec_query($conn, $hostcheck_sql);
        if ($result === FALSE) {
            /* MySQLȤ³Ĥ */
            mysqli_close($conn);
            return 1;
        }
        /* MySQLϿ줿ۥȤξ˳Ǽ */
        MySQL_get_data($result, $data);
        if (count($data) > 0) {
            $err_msg .= sprintf($msgarr['28006'][SCREEN_MSG], 
                                escape_html($data[0]["host_name"]));
            $err_msg .= "<br>";
            $log_msg = sprintf($msgarr['28006'][LOG_MSG], $data[0]["host_name"]);
            result_log($log_msg, LOG_ERR);
            $del_success = 2;
            continue;
        }
        
        /* SQL */
        $hostdel_sql = sprintf(HOSTDEL_SQL, $host_id);
    
        /* SQL¹Ԥ */
        $result = MySQL_exec_query($conn, $hostdel_sql);
        if ($result === FALSE) {
            /* MySQLȤ³Ĥ */
            mysqli_close($conn);
            return 1;
        }
    }

    /* MySQLȤ³Ĥ */
    mysqli_close($conn);

    return $del_success;
}

/*********************************************************
 * make_grouplist()
 *
 * 롼פΥꥹȤ
 *
 * []
 *       $data              DB
 *       $grouplist         롼ץꥹ
 *                          (Ϥ)
 *
 * [֤]
 *       ʤ
 **********************************************************/
function make_grouplist($data, &$grouplist)
{
    foreach ($data as $line) {

        $group_id   = $line["group_id"];
        $group_name = $line["group_name"];
        $log_name   = $line["log_name"];
        $host_name  = $line["host_name"];

        /* group_id򥭡ˤ */
        if (isset($grouplist["$group_id"]) === FALSE) {

            /* ɬפʾΤ߼Ƥ             * 
             * group_id¸ߤʤ *
             * group_name, log_name, host_name  */
            $grouplist["$group_id"]["group_name"] = $group_name;
            $grouplist["$group_id"]["log_name"]   = $log_name;
            $grouplist["$group_id"]["host_name"]  = $host_name;

        } else {
            /* group_id¸ߤ *
             * host_nameޤǤĤʤ              */
            $grouplist["$group_id"]["host_name"]  .= ",$host_name";
        }
    }

    return;
}

/*********************************************************
 * check_groupname()
 *
 * 롼̾ϥåԤʤ
 * Ϥʾ硢MySQL³֥Ȥ֤
 *
 * []
 *       $conn       MySQL³֥
 *       $group_name 롼̾
 *       $maxlen     롼̾κʸĹ
 *
 * [֤]
 *       0           
 *       1           ͥ顼
 *       2           DB顼
 **********************************************************/
function check_groupname(&$conn, $group_name, $maxlen, $mode = ADD_MODE)
{
    global $msgarr;
    global $err_msg;
    global $log_msg;

    /* ͥå */
    if ($mode != UPDATE_MODE) {
        $ret = check_strlen($group_name, $maxlen);
        if ($ret === 1) {
            $err_msg = sprintf($msgarr['28002'][SCREEN_MSG], GROUP_NAME_DISP);
            $log_msg = sprintf($msgarr['28002'][LOG_MSG], GROUP_NAME_LOG);
            return 1;
        }
    }

    /* MySQL³ */
    $conn = MySQL_connect_server();
    if ($conn === FALSE) {
        return 2;
    }

    /* ʣå(ɲäξ) */
    if ($mode != UPDATE_MODE) {
        $check_group_sql = sprintf(CHECK_GROUP_SQL,
                                   mysqli_real_escape_string($conn, $group_name));

        /* SQL¹Ԥ */
        $result = MySQL_exec_query($conn, $check_group_sql);
        if ($result === FALSE) {
            mysqli_close($conn);
            return 2;
        }

        /* MySQLϿ줿ơ֥ξ˳Ǽ */
        MySQL_get_data($result, $data);

        /* ʣä(̾Ǹꤷ1İʾǤ */
        if(count($data) != 0) {
            mysqli_close($conn);
            $err_msg = sprintf($msgarr['28003'][SCREEN_MSG],
                               escape_html($group_name));
            $log_msg = sprintf($msgarr['28003'][LOG_MSG], $group_name);
            return 1;
        }
    }

    return 0;
}

/*********************************************************
 * add_mod_loggroup()
 *
 * 򤵤줿ۥȤ򹹿롣
 *
 * []
 *       $conn          MySQL³֥
 *       $sql_form      ¹ԤSQLʸ
 *       $group_name    롼̾
 *       $log_id        ID
 *
 * [֤]
 *       TRUE        
 *       FALSE       ۾
 **********************************************************/
function add_mod_loggroup($conn, $sql_form, $group_name, $log_id)
{
    global $msgarr;
    global $err_msg;
    global $log_msg;

    /* SQL */
    if ($group_name != "") {
    $sql = sprintf($sql_form,
                   mysqli_real_escape_string($conn, $group_name),
                   mysqli_real_escape_string($conn, $log_id));
    } else {
    $sql = sprintf($sql_form, mysqli_real_escape_string($conn, $log_id));
    }

    /* SQL¹Ԥ */
    $result = MySQL_exec_query($conn, $sql);


    /* MySQLȤ³Ĥ */
    mysqli_close($conn);

    if ($result === FALSE) {
        return FALSE;
    }

    return TRUE;
}

/*********************************************************
 * get_data
 *
 * MySQLǡ
 *
 * []
 *       $sql                ǡSQL
 *       $data               ۥȤǼ
 *                           (Ϥ)
 *
 * [֤]
 *       TRUE                
 *       FALSE               ۾
 **********************************************************/
function get_data($sql, &$data)
{
    global $web_conf;
    global $msgarr;
    global $err_msg;
    global $log_msg;


    /* MySQL³ */
    $conn = MySQL_connect_server();
    if ($conn === FALSE) {
        return FALSE;
    }

    /* MySQLơ֥ξ */
    $result = MySQL_exec_query($conn, $sql);
    if ($result === FALSE) {
        mysqli_close($conn);
        return FALSE;
    }

    /* MySQLϿ줿ơ֥ξ˳Ǽ */
    MySQL_get_data($result, $data);

    /* MySQLȤ³Ĥ */
    mysqli_close($conn);

    return TRUE;
}

/*********************************************************
 * delete_a_data
 *
 * MySQLǡ
 *
 * []
 *       $delete_sql[]       SQLʸ
 *       $check_sql          åSQL
 *
 * [֤]
 *       TRUE                   
 *       FALSE                  ۾
 **********************************************************/
function delete_a_data($delete_sql, $check_sql = NULL)
{
    global $web_conf;
    global $msgarr;
    global $err_msg;
    global $log_msg;

    /* MySQL³ */
    $conn = MySQL_connect_server();
    if ($conn === FALSE) {
        return FALSE;
    }

    /* å */
    if ($check_sql != NULL) {
        $data = array();
        $result = MySQL_exec_query($conn, $check_sql);
        if ($result === FALSE) {
            /* MySQLȤ³Ĥ */
            $err_msg = sprintf($msgarr['27003'][SCREEN_MSG], $check_sql);
            $log_msg = sprintf($msgarr['27003'][LOG_MSG], $check_sql);
            mysqli_close($conn);
            return FALSE;
        }

        /* MySQLϿ줿ơ֥ξ˳Ǽ */
        MySQL_get_data($result, $data);

        /* ʣä(̾Ǹꤷ1İʾǤ */
        if(count($data) != 0) { 
            $err_msg = $msgarr['28013'][SCREEN_MSG];
            $log_msg = $msgarr['28013'][LOG_MSG];
            mysqli_close($conn);
            return FALSE;
        }
    }   

    /* SQL¹ */
    foreach ($delete_sql as $tmp_sql) {
        $result = MySQL_exec_query($conn, $tmp_sql);
        if ($result === FALSE) {
            mysqli_close($conn);
            $err_msg = sprintf($msgarr['27003'][SCREEN_MSG], $tmp_sql);
            $log_msg = sprintf($msgarr['27003'][LOG_MSG], $tmp_sql);
            return FALSE;
        }
    }

    /* MySQLȤ³Ĥ */
    mysqli_close($conn);

    return TRUE;
}

/*********************************************************
 * make_dhcp_log_option()
 *
 * 롼פΥ쥯ȥܥåΥץ
 * (dhcp)
 *
 * []
 *       $sql                롼פSQL
 *       $post_group_id      selectedˤ
 *       $option             
 *
 * [֤]
 *       ʤ
 **********************************************************/
function make_dhcp_log_option($sql, $post_group_id, &$option)
{
    /* 롼׾MySQL */
    $ret = get_data($sql, $data);
    if ($ret === FALSE) {
        return FALSE;
    }
    /*μबdhcpΥ롼פ¸ߤʤȤ*/
    if (empty($data)) {
        /* 쥯ȥܥå */
        $option .= <<<HERE
<option value="-1" selected>----------</option>

HERE;
    } else {
        /*μबdhcpΥ롼פ¸ߤȤ*/
        foreach ($data as $one_data) {
            $group_name = escape_html($one_data["group_name"]);
            $group_id   = escape_html($one_data["group_id"]);
            /* POSTϤäƤͤƱ(ݻ) */
            if ($one_data["group_id"] == $post_group_id) {
                $option .= <<<HERE
<option value="$group_id" selected>$group_name</option>

HERE;
            } else {
                $option .= <<<HERE
<option value="$group_id">$group_name</option>

HERE;
            }
        }
    }

    return TRUE;
}


/*********************************************************
 * make_log_option()
 *
 * 롼פΥ쥯ȥܥåΥץ
 * (ʰץ)
 *
 * []
 *       $sql                롼פSQL
 *       $post_group_id      selectedˤ롼
 *       $option             HTML(Ϥ)
 *
 * [֤]
 *       ʤ
 **********************************************************/
function make_log_option($sql, $post_group_id, &$option)
{

    /* 롼׾MySQL */
    $ret = get_data($sql, $data);
    if ($ret === FALSE) {
        return FALSE;
    }

    /* 쥯ȥܥå */
    $option .= <<<HERE
<option value="-1" selected>----------</option>

HERE;

    foreach ($data as $one_data) {
        $group_name = escape_html($one_data["group_name"]);
        $group_id   = escape_html($one_data["group_id"]);
        /* POSTϤäƤͤƱ(ݻ) */
        if ($one_data["group_id"] == $post_group_id) {
            $option .= <<<HERE
<option value="$group_id" selected>$group_name</option>

HERE;
        } else {
            $option .= <<<HERE
<option value="$group_id">$group_name</option>

HERE;
        }
    }

    return TRUE;
}

/*********************************************************
 * make_priority_option()
 *
 * ץ饤ƥΥ쥯ȥܥåΥץ
 * (ʰץ)
 *
 * []
 *       $priority           selectedˤץ饤ƥ
 *       $option             HTML(Ϥ)
 *
 * [֤]
 *       ʤ
 **********************************************************/
function make_priority_option($priority, &$option)
{
    /* 쥯ȥܥå˻Ѥͤ */
    $arr = array("-1" => "----------", 
                  "7" => "debug", 
                  "6" => "info", 
                  "5" => "notice", 
                  "4" => "warn", 
                  "3" => "err", 
                  "2" => "crit",
                  "1" => "alert", 
                  "0" => "emerg"
                );

    foreach ($arr as $key => $value) {

        /* POSTϤäƤͤƱ(ݻ) */
        if ($priority == $key) {
            $option .= <<<HERE
<option value="$key" selected>$value</option>

HERE;
        } else {
            $option .= <<<HERE
<option value="$key">$value</option>

HERE;
        }
    }

    return;
}

/*********************************************************
 * make_checked_radio()
 *
 * Υ饸ܥ˥å
 * (ʰץ)
 *
 * []
 *       $radio              checkedˤ饸ܥ
 *       $option             checked/""(Ϥ)
 *
 * [֤]
 *       ʤ
 **********************************************************/
function make_checked_radio($radio, &$option)
{
    $i = 0;
    foreach($option as $val) {
        if ($i == $radio) {
            $option[$i] = "checked";
        }
        $i++;
    }

    return;
}

/*********************************************************
 * make_year_option()
 *
 * ǯʬäΥ쥯ȥܥåΥץ
 * (ʰץ)
 *
 * []
 *       $year               selectedˤǯ
 *       $option             HTML(Ϥ)
 *
 * [֤]
 *       ʤ
 **********************************************************/
function make_year_option($year, &$option)
{
    /* ߤ(ॾphp.ini) */
    $now_year = date("Y");

    $loopflg = 0;
    for ($count = $now_year - 11; $count <= $now_year; $count++) {

        /* 롼פΰܤ"--" */
        if ($loopflg === 0) {
            $option .= <<<HERE
<option value="--">----</option>
HERE;
            $loopflg = 1;
            continue;
        }
        /* ץ */
        if ($year == $count) {
            $option .= <<<HERE
<option value="$count" selected>$count</option>
HERE;
        } else {
            $option .= <<<HERE
<option value="$count">$count</option>
HERE;
        }
    }
}

/*********************************************************
 * check_time_format()
 *
 * θå
 *
 * []
 *       $time          վ
 *       $mode               or λ
 *
 * [֤]
 *       TRUE                
 *       FALSE               ۾
 **********************************************************/
function check_time_format($time)
{
    /* ξ */
    if (empty($time)) {
        return False;
    }

    /* դθ */
    $ret = date_parse($time);
    if ($ret["warning_count"] !== 0 && $ret["error_count"] !== 0) {
        return False;
    }

    return True;
}

/*********************************************************
 * check_duration()
 *
 * ֤򸡺
 *   allowallsearch0ǡsearchmaxdurationδ֤ĶƤ
 *   ˡ顼Ȥ
 *
 * []
 *       $st                 γ
 *       $en                 νλ
 *
 * [֤]
 *       TRUE                
 *       FALSE               ۾
 **********************************************************/
function check_duration($start, $end, &$duration = 0)
{
    global $web_conf;
    global $msgarr;
    global $err_msg;
    global $log_msg;

    if ($web_conf["sylas"]["searchtype"] != "elasticsearch") {
        return TRUE;
    }

    /* ޤǤͤôݤƤ */
    $st = date_parse($start);
    $en = date_parse($end);

    $ustart = strtotime($st['year']. "-". $st['month']. "-". $st['day']. " 00:00:00");
    $uend = strtotime($en['year']. "-". $en['month']. "-". $en['day']. " 00:00:00");
    $duration = round(($uend - $ustart) / 86400) + 1;

    if ($web_conf["sylas"]["searchperiodwithindex"] < $duration &&
        $web_conf["sylas"]["allowallindexsearch"] !== "1") {
        $err_msg = sprintf($msgarr['50002'][SCREEN_MSG], 
                  $web_conf["sylas"]["searchperiodwithindex"]);
        $log_msg = $msgarr['50002'][LOG_MSG];
        return FALSE;
    }

    return TRUE;
}


/*********************************************************
 * check_resultline
 *
 * ɽθ
 *
 * []
 *       $post
 *
 * [֤]
 *       TRUE                
 *       FALSE               ۾
 **********************************************************/
function check_resultline($post) {
    global $web_conf;
    global $msgarr;
    global $err_msg;
    global $log_msg;

    if (!isset($post["resultline"])) {
        $err_msg = $msgarr['41011'][SCREEN_MSG];
        $log_msg = $msgarr['41011'][LOG_MSG];
        return FALSE;
    }

    if (!is_numeric($post["resultline"])) {
        $err_msg = $msgarr['41012'][SCREEN_MSG];
        $log_msg = $msgarr['41012'][LOG_MSG];
        return FALSE;
    }

    if ($post["resultline"] <= 0) {
        $err_msg = $msgarr['41013'][SCREEN_MSG];
        $log_msg = $msgarr['41013'][LOG_MSG];
        return FALSE;
    }

    return TRUE;
}

/*********************************************************
 * check_easy_search_condition()
 *
 * θå
 *
 * []
 *       $post               Ϥ줿
 *
 * [֤]
 *       TRUE                
 *       FALSE               ۾
 **********************************************************/
function check_easy_search_condition($post)
{
    global $msgarr;
    global $err_msg;
    global $log_msg;

    /* Υå */
    if ($post["loggroup"] == -1) {
        $err_msg = $msgarr['28014'][SCREEN_MSG];
        $log_msg = $msgarr['28014'][LOG_MSG];
        return FALSE;
    }

    /* ץ饤ƥΥåϹԤʤʤ */

    /* ۥ̾Υå */
    if (isset($post["hostname"]) && $post["hostname"] != "") {
        $ret = check_alpha_bars_dot($post["hostname"], ELS_HOSTNAME_MAXLEN,
                                    -1, 1);
        if ($ret !== 0) {
            $err_msg = $msgarr['28029'][SCREEN_MSG];
            $log_msg = $msgarr['28029'][LOG_MSG];
            return FALSE;
        }
    }

    /* ɤϤƤȤʸå */
    if (isset($post["keyword"])) {
        $ret = check_keyword($post["searchtype"], $post["keyword"], 
                             ELS_KEYWORD_MAXLEN);
        if ($ret === 3) {
            $err_msg = $msgarr['28025'][SCREEN_MSG];
            $log_msg = $msgarr['28025'][LOG_MSG];
            return FALSE;

        } else if ($ret != 0) {
            $err_msg = $msgarr['28015'][SCREEN_MSG];
            $log_msg = $msgarr['28015'][LOG_MSG];
            return FALSE;
        }
    }

    /* ֤Υå */
    /*  */
    $ret = check_time_format($post["startdate"]);
    if ($ret === FALSE) {
        $err_msg = $msgarr['28016'][SCREEN_MSG];
        $log_msg = $msgarr['28016'][LOG_MSG];
        return FALSE;
    }
    /* λ */
    $ret = check_time_format($post["enddate"]);
    if ($ret === FALSE) {
        $err_msg = $msgarr['28017'][SCREEN_MSG];
        $log_msg = $msgarr['28017'][LOG_MSG];
        return FALSE;
    }

    /* ϤȽλå */
    $start = strtotime($post["startdate"]);
    $end   = strtotime($post["enddate"]);
    if ($start > $end) {
        $err_msg = $msgarr['28018'][SCREEN_MSG];
        $log_msg = $msgarr['28018'][LOG_MSG];
        return FALSE;
    }

    /* դޤǤδָ */
    $ret = check_duration($post["startdate"], $post["enddate"]);
    if ($ret === FALSE) {
        return FALSE;
    }

    /* ɽθ */
    $ret = check_resultline($post);
    if ($ret === FALSE) {
        return FALSE;
    }

    return TRUE;
}

/*********************************************************
 * check_dhcp_search_condition()
 *
 * dhcpθå
 *
 * []
 *       $post               Ϥ줿
 *
 * [֤]
 *       TRUE                
 *       FALSE               ۾
 **********************************************************/
function check_dhcp_search_condition($post)
{
    global $msgarr;
    global $err_msg;
    global $log_msg;

    /* Υå */
    if ($post["loggroup"] === "-1") {
        $err_msg = $msgarr['28014'][SCREEN_MSG];
        $log_msg = $msgarr['28014'][LOG_MSG];
        return FALSE;
    }

    /* IPɥ쥹ϤƤȤʸ,ʸå */
    if ($post["ip"] != "") {
        $ret = check_ipaddress($post["ip"],
                             DHCP_IPADDRESS_MAXLEN);
        if ($ret != 0) {
            /*retͤ1,2ʸʸ泌顼ˤΤȤ顼å*/
            $err_msg = $msgarr['28045'][SCREEN_MSG];
            $log_msg = $msgarr['28045'][LOG_MSG];
            return FALSE;
        }
    }

    /* MACɥ쥹ϤƤȤʸ,ʸå */
    if ($post["mac"] != "") {
        $ret = check_macaddress($post["mac"],
                             DHCP_MACADDRESS_MAXLEN);
        if ($ret != 0) {
            /*retͤ1,2ʸʸ泌顼ˤΤȤ顼å*/
            $err_msg = $msgarr['28046'][SCREEN_MSG];
            $log_msg = $msgarr['28046'][LOG_MSG];
            return FALSE;
        }
    }

    /* ֤Υå */
    /*  */
    $ret = check_time_format($post["startdate"]);
    if ($ret === FALSE) {
        $err_msg = $msgarr['28016'][SCREEN_MSG];
        $log_msg = $msgarr['28016'][LOG_MSG];
        return FALSE;
    }
    /* λ */
    $ret = check_time_format($post["enddate"]);
    if ($ret === FALSE) {
        $err_msg = $msgarr['28017'][SCREEN_MSG];
        $log_msg = $msgarr['28017'][LOG_MSG];
        return FALSE;
    }

    /* ϤȽλå */
    $start = strtotime($post["startdate"]);
    $end   = strtotime($post["enddate"]);
    if ($start > $end) {
        $err_msg = $msgarr['28018'][SCREEN_MSG];
        $log_msg = $msgarr['28018'][LOG_MSG];
        return FALSE;
    }

    $ret = check_duration($post["startdate"], $post["enddate"]);
    if ($ret === FALSE) {
        return FALSE;
    }

    $ret = check_resultline($post);
    if ($ret === FALSE) {
        return FALSE;
    }

    return TRUE;
}

/*********************************************************
 * make_dhcp_log_sql()
 *
 * 롼פθ
 *
 * []
 *       $conn              MySQL³֥
 *       $post              Ϥ줿              
 *       $sql               SQLʸ
 *       $search_tab        ơ֥
 *
 * [֤]
 *       0                  
 *       1                  DB顼
 **********************************************************/
function make_dhcp_log_sql($conn, $post, &$sql, &$search_tab)
{
    global $web_conf;
    global $msgarr;
    global $err_msg;
    global $log_msg;
    global $mysql_facilitynumbers;

    /*dhcp¸ߤʤ
    if ($post["loggroup"] == "-1") {
        return 1;
    }
    */
    /* MySQL뤿SQL*/
    $select_sql = sprintf(ESL_LOGGROUP_SQL, $post["loggroup"]);

    /* MySQL */
    $result = MySQL_exec_query($conn, $select_sql);
    if ($result === FALSE) {
        return 1;
    }

    /* MySQLϿ줿ơ֥ξ˳Ǽ */
    MySQL_get_data($result, $data);

    /* ǡʤȤ롼פ˸оݥۥȤꤵƤʤ */
    if (count($data) === 0) {
        $err_msg = $msgarr['28019'][SCREEN_MSG];
        $log_msg = $msgarr['28019'][LOG_MSG];
        return 1;
    }

    /* оݥơ֥ */
    /* ͤʤȤweb.confˤ줿ǥեȤ */
    if ($data[0]["search_tab"] === "") {
        $search_tab = $web_conf["sylas"]["defaultsearchtable"];
    } else {
        $search_tab = $data[0]["search_tab"];
    }

    /* ץꥱ̾ */
    $app_name      = $data[0]["app_name"];
    /* եƥʸ󤫤ֹѴ
     * (ǡ١ˤֹϿƤ) */
    /* ǡ١ˤϥڡڤǵҤƤ */
    $facilitynames = explode(" ", $data[0]["facility_name"]);
    foreach ($facilitynames as $facilityname) {
        /* ʥեƥ */
        if (!isset($mysql_facilitynumbers["$facilityname"])) {
            $facilityNums[] = BAD_FACILITY;
        } else {
            $facilityNums[] = $mysql_facilitynumbers["$facilityname"];
        }
    }

    /****************************
     * SQLʸ
     ****************************/

    foreach ($data as $one_data) {
        /* ƤΥۥȤꤵƤȤۥȾղäʤ */
        if ($one_data["host_id"] === "1") {
            $sql = "";
            break;
        }
        if ($sql === "") {
            $sql = "FromHost = \"" .
                mysqli_real_escape_string($conn, $one_data["host_name"]) .
                  "\"";
        } else {
            $sql .= " OR FromHost = \"" .
                 mysqli_real_escape_string($conn, $one_data["host_name"]) .
                    "\"";
        }
    }

    /* ۥȸ郎Τ()Ǥ */
    if ($sql != "") {
        $sql = "(" . $sql . ")";
    }

    /* facility */
    /* оݤʤ︡ǤХ롼 */
    if (isset($facilityNums) && !in_array(99, $facilityNums)) {
        /* 郎ʬפORĤʤ */
        if ($sql != "") {
            $sql .= " AND ";
        }
        /* ޤ1ܤĤꡢʹߤ롼פǤĤ */
        $facilNum = array_pop($facilityNums);
        $sql .= "(Facility = \"$facilNum\"";
        foreach ($facilityNums as $facilNum) {
            $sql .= " OR Facility = \"$facilNum\"";
        }
        $sql .= ")";
    }

    /* app_name */
    if ($app_name != "") {
        if ($sql != "") {
            $sql .= " AND ";
        }
        $sql .= "SysLogTag LIKE \"".
                mysqli_real_escape_string($conn, $app_name) .
                "%\"";
    }

    return 0;
}

/*********************************************************
 * make_esl_log_sql()
 *
 * 롼פθ
 *
 * []
 *       $sql               Ϥ줿
 *
 * [֤]
 *       0                  
 *       1                  ۾
 *       2                  DB顼
 **********************************************************/
function make_esl_log_sql($conn, $post, &$sql, &$search_tab)
{
    global $web_conf;
    global $msgarr;
    global $err_msg;
    global $log_msg;
    global $mysql_facilitynumbers;

    /* MySQL */
    $select_sql = sprintf(ESL_LOGGROUP_SQL, $post["loggroup"]);

    /* MySQL */
    $result = MySQL_exec_query($conn, $select_sql);
    if ($result === FALSE) {
        return 2;
    }

    /* MySQLϿ줿ơ֥ξ˳Ǽ */
    MySQL_get_data($result, $data);

    /* ǡʤȤ롼פ˸оݥۥȤꤵƤʤ */
    if (count($data) === 0) {
        $err_msg = $msgarr['28019'][SCREEN_MSG];
        $log_msg = $msgarr['28019'][LOG_MSG];
        return 1;
    }
    /* оݥơ֥ */
    /* ͤʤȤweb.confˤ줿ǥեȤ */
    if ($data[0]["search_tab"] === "") {
        $search_tab = $web_conf["sylas"]["defaultsearchtable"];
    } else {
        $search_tab = $data[0]["search_tab"];
    }

    /* ץꥱ̾ */
    $app_name      = $data[0]["app_name"];

    /* եƥʸ󤫤ֹѴ
     * (ǡ١ˤֹϿƤ) */
    /* ǡ١ˤϥڡڤǵҤƤ */
    $facilitynames = explode(" ", $data[0]["facility_name"]);
    foreach ($facilitynames as $facilityname) {
        /* ʥեƥ */
        if (!isset($mysql_facilitynumbers["$facilityname"])) {
            $facilityNums[] = BAD_FACILITY;
        } else {
            $facilityNums[] = $mysql_facilitynumbers["$facilityname"];
        }
    }


    /****************************
     * SQLʸ
     ****************************/

    /* 롼פꤵƤۥȾ */
    /* ̥եǥۥȤꤵƤʤ˥å */
    if (!isset($post["hostname"]) || $post["hostname"] == "") {
        foreach ($data as $one_data) {
            /* ƤΥۥȤꤵƤȤۥȾղäʤ */
            if ($one_data["host_id"] === "1") {
                $sql = "";
                break;
            }
            if ($sql === "") {
                $sql = "FromHost = \"" . 
                     mysqli_real_escape_string($conn, $one_data["host_name"]) .
                      "\"";
            } else {
                $sql .= " OR FromHost = \"" .
                     mysqli_real_escape_string($conn, $one_data["host_name"]) .
                        "\"";
            }
        }
    } else {
        /* ۥ󤫤ꤵ줿 */
        $hostsList = explode(" ", $post["hostname"]);
        foreach ($hostsList as $targetHost) {
            /* Ϥ̵äꡢڡ2Ϣ³ƤȤ */
            if ($targetHost == "") {
                continue;
            }
            /* ⤦郎SQLʸ¸ߤ饹å */
            if (strpos($sql, $targetHost) !== FALSE) {
                continue;
            }
            /* ۥȸʸ */
            if ($sql === "") {
                $sql = "FromHost = \"" . 
                      mysqli_real_escape_string($conn, $targetHost) . "\"";
            } else {
                $sql .= " OR FromHost = \"" .
                        mysqli_real_escape_string($conn, $targetHost) . "\"";
            }
        }
    }
    /* ۥȸ郎Τ()Ǥ */
    if ($sql != "") {
        $sql = "(" . $sql . ")";
    }

    /* facility */
    /* оݤʤ︡ǤХ롼 */
    if (isset($facilityNums) && !in_array(99, $facilityNums)) {
        /* 郎ʬפORĤʤ */
        if ($sql != "") {
            $sql .= " AND ";
        }
        /* ޤ1ܤĤꡢʹߤ롼פǤĤ */
        $facilNum = array_pop($facilityNums);
        $sql .= "(Facility = \"$facilNum\"";
        foreach ($facilityNums as $facilNum) {
            $sql .= " OR Facility = \"$facilNum\"";
        }
        $sql .= ")";
    }

    /* app_name */
    if ($app_name != "") {
        if ($sql != "") {
            $sql .= " AND ";
        }
        $sql .= "SysLogTag LIKE \"".
                mysqli_real_escape_string($conn, $app_name) .
                "%\"";
    }

    return 0;
}

/*********************************************************
 * make_keyword_sql()
 *
 * ɤθ
 *
 * []
 *       $sql               Ϥ줿
 *
 * [֤]
 *       ʤ
 **********************************************************/
function make_keyword_sql($conn, $post, &$sql)
{
    /* ʸΤȤϥɸSQLʸ϶ */
    if ($post["keyword"] == "") {
        $sql = "";
        return;
    }

    /* ɽΤȤ */
    if (isset($post["searchtype"]) && $post["searchtype"] == 2) {
        $sql = "Message REGEXP \""
               . mysqli_real_escape_string($conn, $post["keyword"]) . "\"";
        return;
    }

    /* ѥڡȾѥڡѴ */
    $keystr = str_replace("", " ", $post["keyword"]);

    /* ɤȾѥڡʬ䤹 */
    $keyarr = explode(" ", $keystr);

    if (!$keyarr) return;

    // ORΤȤ
    if (isset($post["searchtype"]) && $post["searchtype"] == 1) {
        $prefix = "";

    // ANDΤȤ
    } else {
        $prefix = "+";
    }

    $sql = "MATCH(Message) AGAINST('";
    foreach ($keyarr as $keyword) {
        $sql .= " " . $prefix . mysqli_real_escape_string($conn, $keyword);
    }

    /* ORΤȤ¾θ˱ƶͿʤ褦˳̤ǰϤ */
    $sql =  "(" . $sql . "' IN BOOLEAN MODE))";

    return;

}

/*********************************************************
 * make_timerange_sql()
 *
 * θå
 *
 * []
 *       $sql               Ϥ줿
 *
 * [֤]
 *       ʤ
 **********************************************************/
function make_timerange_sql($conn, $post, &$sql)
{
    /* Unixॹפ */
    $ustart = strtotime($post["startdate"]);
    $uend = strtotime($post["enddate"]);

    /* ϻ֤Ϣ뤷ʸ */
    $start = date("YmdHis", $ustart);
    $end = date("YmdHis", $uend);

    /* SQLʸ */
    $startsql = "DeviceReportedTime >= \""
                . mysqli_real_escape_string($conn, $start) . "\"";

    /* SQLʸ */
    $endsql = "DeviceReportedTime <= \""
              . mysqli_real_escape_string($conn, $end) . "\"";

    $sql = $startsql . " AND " . $endsql;

    return;
}

/*********************************************************
 * make_dhcp_search_sql()
 *
 * θSQL
 *
 * []
 *       $conn               MySQL³֥
 *       $post               Ϥ줿
 *       $sql                SQLʸ
 *
 * [֤]
 *       0                  
 *       1                  ۾
 *       2                  DB顼
 **********************************************************/
function make_dhcp_search_sql($conn, $post, &$sql)
{
    /* 롼׾ʬ */
    $log_sql = "";
    $ret = make_dhcp_log_sql($conn, $post, $log_sql, $search_table);
    if ($ret != 0) {
        return $ret;
    }

    /* ־ʬ */
    make_timerange_sql($conn, $post, $timerange_sql);
    if ($timerange_sql != "") {
        $timerange_sql = " AND $timerange_sql";
    }


    /* ip, mac, interface */
    $format = "MATCH(Message) AGAINST('";

    /* DHCPv4μ */
    $format .= "(+DHCPACK";
    $format .= $post["ip"]  ? " +\"on $post[ip]\""  : "";
    $format .= $post["mac"] ? " +\"to $post[mac]\"" : "";
    $format .= $post["interface"] ? " +$post[interface]" : "";
    $format .= ")";

    /* 󥿡եåȤƤʤDHCPv6μ */
    if ($post["interface"] == "") {
        $format .= ' (+"Reply NA:"';
        $format .= $post["ip"]  ? " +\"address $post[ip]\""  : "";
        $format .= $post["mac"] ? " +\"duid $post[mac]\"" : "";
        $format .= ")";
    }

    $format .= "' in boolean mode)";

    if ($log_sql != "") {
        $format = "AND ($format)";
    }

    /* SQL */
    /* 郎 */
    $sql = sprintf(DHCP_SEARCH_SQL,
                  $search_table,
                  $log_sql,
                  $format,
                  $timerange_sql
                 );
    return 0;
}

/*********************************************************
 * make_easy_search_sql()
 *
 * θSQL
 *
 * []
 *       $sql               Ϥ줿
 *
 * [֤]
 *       0                  
 *       1                  ۾
 *       2                  DB顼
 **********************************************************/
function make_easy_search_sql($conn, $post, &$sql)
{
    global $web_conf;
    global $msgarr;
    global $err_msg;
    global $log_msg;

    $search_sql = array();
    $log_sql = "";

    /* 롼׾ʬ */
    $ret = make_esl_log_sql($conn, $post, $log_sql, $search_table);
    if ($ret != 0) {
        return $ret;
    }
    if ($log_sql != "") {
        array_push($search_sql, $log_sql);
    }

    /* ץ饤ƥʬ */
    if ($post["priority"] != -1) {
        $priority_sql = " Priority= \"" .
                         mysqli_real_escape_string($conn, $post["priority"]) .
                        "\"";
        array_push($search_sql, $priority_sql);
    }

    /* ʬ */
    if ($post["keyword"] != "") {
        make_keyword_sql($conn, $post, $keyword_sql);
        if ($keyword_sql != "") {
            $keyword_sql = " $keyword_sql";
            array_push($search_sql, $keyword_sql);
        }
    }

    /* ־ʬ */
    make_timerange_sql($conn, $post, $timerange_sql);
    if ($timerange_sql != "") {
        $timerange_sql = " $timerange_sql";
       array_push($search_sql, $timerange_sql);
    }

   /* SQL */
   /* ︡ˤʤä */
   if (count($search_sql) == 0) {
       $sql = sprintf(EASY_ALLSEARCH_SQL, $search_table);
       return 0;
   }

   /* 郎 */
   $search_sql_all = implode("AND", $search_sql);
   $sql = sprintf(EASY_SEARCH_SQL,
                  $search_table,
                  $search_sql_all
                 );
    return 0;

}


/*********************************************************
 * make_search_hosts()
 *
 * оݡоݥꥹȤ
 *
 * []
 *       $all_hosts         ٤ƤΥۥȤǼ
 *       $search_hosts      оݥۥȤǼ
 *       $non_search        оΥۥ(Ϥ)
 *       $search            оݥۥ(Ϥ)
 *
 * [֤]
 *       ʤ
 **********************************************************/
function make_search_hosts($all_hosts, $search_hosts, &$non_search, &$search)
{
    /* ٤ƤΥۥȤ롼 */
    foreach ($all_hosts as $one_host) {

        $host_id = $one_host["host_id"];
        $host_name = $one_host["host_name"];

        $tmp_n[$host_id] = $host_name;

    }

    /* оݥۥ */
    foreach ($search_hosts as $one_s_host) {
        $s_host = $one_s_host["host_id"];

        if (isset($tmp_n[$s_host]) === TRUE) {
            $search[$s_host] = $tmp_n[$s_host];
        }
    }

    /* оΥۥȥꥹȺ */
    $non_search = array_diff($tmp_n, $search);

    return;
}

/*********************************************************
 * make_hosts_option()
 *
 * ۥȤΥץ
 *
 * []
 *       $hosts             ۥȤǼ
 *       $option            쥯ȥܥåΥץ
 *                          (Ϥ)
 *
 * [֤]
 *       ʤ
 **********************************************************/
function make_hosts_option($hosts, &$option)
{
    if (!isset($hosts)) {
        return;
    }
    $option = "";
    foreach ($hosts as $id => $name) {
        $host_name = escape_html($name);
        $option .= <<<HERE
<option value="$id,$host_name">$host_name</option>

HERE;
    }
}

/*********************************************************
 * make_id_hidden()
 *
 * оݥۥȤhidden
 *
 * []
 *       $hosts             ۥȤǼ
 *       $option            쥯ȥܥåΥץ
 *                          (Ϥ)
 *       $hid_name          hiddenname
 *
 * [֤]
 *       ʤ
 **********************************************************/
function make_id_hidden($hosts, &$hidden, $hid_name)
{
    if (!isset($hosts)) {
        return;
    }
    $hidden = "";
    $hid_name = "$hid_name" . "[]";
    foreach ($hosts as $id => $name) {
        $host_name = escape_html($name);
        $hidden .= <<<HERE
<input type="hidden" name="$hid_name" value="$id,$host_name">

HERE;
    }
}

/*********************************************************
 * modify_search_host()
 *
 * оݥۥȤϿ
 *
 * []
 *       $hosts             ۥȤǼ
 *       $option            쥯ȥܥåΥץ
 *                          (Ϥ)
 *
 * [֤]
 *       ʤ
 **********************************************************/
function modify_search_host($hosts, $group_id)
{
    global $web_conf;
    global $msgarr;
    global $err_msg;
    global $log_msg;

    /* MySQL³ */
    $conn = MySQL_connect_server();
    if ($conn === FALSE) {
        return FALSE;
    }

    /* ȥ󥶥󳫻 */
    $result = MySQL_exec_query($conn, BEGIN);
    if ($result === FALSE) {
        mysqli_close($conn);
        return FALSE;
    }

    $g_id = mysqli_real_escape_string($conn, $group_id);

    /* ¸ǡ */
    $check_sh_sql = sprintf(CHECK_SH_SQL, $g_id);
    $result = MySQL_exec_query($conn, $check_sh_sql);
    if ($result === FALSE) {
        mysqli_close($conn);
        return FALSE;
    }

    /* ¸꤬¸ߤϡ٤٤ƺ */
    MySQL_get_data($result, $data);
    if (count($data) != 0) {
        $del_sh_sql = sprintf(DELETE_SH_SQL, $g_id);
        $result = MySQL_exec_query($conn, $del_sh_sql);
        if ($result === FALSE) {

            /* Хå */
            MySQL_exec_query($conn, ROLLBACK);
            mysqli_close($conn);
            return FALSE;
        }
    }

    /* ̤ǻꤵ줿оݥۥȤMySQLɲ */
    foreach ($hosts as $host_id) {
        list($host_id, ) = explode(',', $host_id);
        $h_id = mysqli_real_escape_string($conn, $host_id);
        $in_sh_sql = sprintf(INSERT_SH_SQL, $g_id, $h_id);
        $result = MySQL_exec_query($conn, $in_sh_sql);
        if ($result === FALSE) {

            /* Хå */
            MySQL_exec_query($conn, ROLLBACK);
            mysqli_close($conn);
            return FALSE;
        }
    }

    /* ȥ󥶥ȿ */
    $result = MySQL_exec_query($conn, COMMIT);
    if ($result === FALSE) {
        mysqli_close($conn);
        return FALSE;
    }

    return TRUE;
}

/***********************************************************
 * post_location()
 *
 * Ԥ
 *
 * []
 *      $url
 *      $msg
 *      $post        ݥȤ(name, ͤvalue)
 *
 * [֤]
 *      ʤ
 ************************************************************/
function post_location($url, $msg = null, $post = array())
{
    global $sesskey;

    /* å */
    $hidden = "<input type=\"hidden\" name=\"sk\" value=\"" .
               $sesskey . "\">";

    /* å */
    $message = "";
    if (!is_null($msg)) {
        $message = "<input type=\"hidden\" " .
                              "name=\"msg\" value=\"$msg\">";
    }

    $value = "";
    if (count($post) != 0) {
        foreach ($post as $name => $value) {
            $e_name = escape_html($name);
            $e_val  = escape_html($value);
            $value .= "<input type=\"hidden\" " .
                      "name=\"$e_name\" value=\"$e_val\">";
        }
    }

    /* HTML */
    display_header();
    print <<<EOD
<script type="text/javascript">
<!--
function msgConfirm(msg) {
        return(window.confirm(msg));
}

function dgpSubmit(url) {
    document.common.action = url;
    document.common.submit();
}
// -->
</script>
<body onload="dgpSubmit('$url')">
...
<form method="post" name="common">
    $hidden
    $message
    $value
</form>
</body>
</html>
EOD;
    exit;

}
/*********************************************************
 * check_ip()
 *
 * IPɥ쥹ͥåԤ
 *
 * []
 *        $ip         IPɥ쥹
 *
 * [֤]
 *       TRUE             
 *       FALSE            顼
 **********************************************************/

function check_ip($ip)
{
    /* IPηå */
    if ($ip != "") {
        if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) === FALSE) {
            return FALSE;
        }
    }
    return TRUE;
}

/*********************************************************
 * check_rule()
 *
 * 롼ɲáԽͥåԤ
 *
 * []
 *       $post            Ϥ줿
 *
 * [֤]
 *       TRUE             
 *       FALSE            顼
 **********************************************************/

function check_rule($post)
{
    global $msgarr;
    global $err_msg;
    global $log_msg;

    /* IPɥ쥹ͥ顼λ */
    if (check_ip($post["ipaddress"]) === FALSE) {
        /* 顼å򥻥å */
        $err_msg = sprintf($msgarr['28030'][SCREEN_MSG], IP_DISP);
        $log_msg = sprintf($msgarr['28030'][LOG_MSG], IP_LOG);
        return FALSE;
    }
    /* ɤͥ顼λ */
    if (check_rule_value($post["keyword"], MINKEYWORD, MAXKEYWORD) === FALSE){
        /* 顼å򥻥å */
        $err_msg = sprintf($msgarr['28030'][SCREEN_MSG], KEYWORD_DISP);
        $log_msg = sprintf($msgarr['28030'][LOG_MSG], KEYWORD_LOG);
        return FALSE;
    }
    /* ᡼밸ͥ顼λ */
    if (check_mail($post["mailto"]) === FALSE) {
        /* 顼å򥻥å */
        $err_msg = sprintf($msgarr['28030'][SCREEN_MSG], MAILTO_DISP);
        $log_msg = sprintf($msgarr['28030'][LOG_MSG], MAILTO_LOG);
        return FALSE;
    }
    /* ᡼̾ͥ顼λ */
    if (check_rule_value($post["subject"], MINSUBJECT, MAXSUBJECT) === FALSE) {
        /* 顼å򥻥å */
        $err_msg = sprintf($msgarr['28030'][SCREEN_MSG], SUBJECT_DISP);
        $log_msg = sprintf($msgarr['28030'][LOG_MSG], SUBJECT_LOG);
        return FALSE;
    }
    /* ᡼ʸͥ顼λ */
    /* Ԥ\n */
    $body = str_replace(array("\r\n", "\r", "\n"), "\n", $post["body"]);
    if (check_rule_value($body, MINBODY, MAXBODY, FALSE) === FALSE) {
        /* 顼å򥻥å */
        $err_msg = sprintf($msgarr['28030'][SCREEN_MSG], BODY_DISP);
        $log_msg = sprintf($msgarr['28030'][LOG_MSG], BODY_LOG);
        return FALSE;
    }
    return TRUE;
}

/*********************************************************
 * check_rule_value()
 *
 * 롼ͥå 
 *
 * []
 *      $inputvalue  Ϥ줿 
 *      $minlen      Ǿʸ
 *      $maxlen      ʸ
 *      $body        ʸΥåȽǤ 
 * [֤]
 *      TRUE         
 *      FALSE        ۾
 **********************************************************/

function check_rule_value($inputvalue, $minlen, $maxlen, $body = TRUE)
{
    /* ʸå */
    $letters = strlen($inputvalue);
    if ($letters < $minlen || $letters > $maxlen) {
        return FALSE;
    }

    /* Ⱦѱ羮ʸ국Τߵ */
    $num = "0123456789";
    $sl = "abcdefghijklmnopqrstuvwxyz";
    $ll = strtoupper($sl);
    if($body === TRUE) {
        $sym = "! \"#$%&'()=-~^|@`[{;+:*]},<.>\/?_";
    } else {
        $sym = "! \"#$%&'()=-~^|@`[{;+:*]},<.>\/?_\n";
    }
    $allow_letter = $num . $sl . $ll . $sym;
    if (strspn($inputvalue, $allow_letter) != $letters) {
        return FALSE;
    }

    return TRUE;
}

/*********************************************************
 * make_select()
 *
 * 쥯ȥܥåؿ
 *
 * []
 *      $array            ץ˻Ѥͤ
 *      $option           쥯ȥܥåΥץ
 *                        (Ϥ)
 *      $values           Ϥ줿
 *
 * [֤]
 *      ʤ
 ********************************************************/
function make_select($array, &$option, $values = "")
{

    /* array롼 */
    foreach ($array as $name => $val) {
        if ($val == $values) {
            $option .= <<<HERE
<option value="$val" selected>$name</option>
HERE;
            continue;
        }
        $option .= <<<HERE
<option value="$val">$name</option>
HERE;
    }
    return;
}

/*********************************************************
 * in_contents()
*
 * rsyslogե˽񤭹ƺؿ
 *
 * []
 *      $post           Ϥ줿
 *      $nextnum        rsyslogեֹ
 *
 * [֤]
 *      $contents       ե˽񤭹
 ********************************************************/
function in_contents($post, $nextnum)
{

    $ip       = $post["ipaddress"];
    $facility = $post["facility"];
    $degree   = $post["degree"];
    $to       = $post["mailto"];
    $keyword  = $post["keyword"];
    $body     = str_replace(array("\r\n", "\r", "\n"), "\\r\\n", $post["body"]);
    $subject  = $post["subject"];

    $contents = <<<HERE
\$IncludeConfig /etc/rsyslog.sylas.d/base

#### Recipient ####
\$ActionMailTo $to

HERE;
    /* ̾ꤵƤ */
    if ($subject != "") {
        $subject = str_replace("\"", "\\\"", $subject);
        $subject = str_replace("%", "\%", $subject);
        $contents .= <<<HERE

#### Subject ####
\$template mail_subject$nextnum,"$subject"
\$ActionMailSubject mail_subject$nextnum

HERE;
    }

    /* ʸꤵƤ */
    if ($body != "") {
        $body = str_replace("\"", "\\\"", $body);
        $body = str_replace("%", "\%", $body);
        $contents .= <<<HERE

#### Body ####
\$template mail_body$nextnum,"$body"

HERE;
    }

    $contents .= <<<HERE

#### Rule ####
if \

HERE;
    /* IPꤵƤ */
    if ($ip != "") {
        $contents .= IP_SET . " == '$ip' and \\ \n";
    }
    /* եƥ٤ƤǤʤ */
    if ($facility != "-1") {
        $contents .= FACILITY_SET . " == $facility and \\ \n";
    }
    /* ٤٤ƤǤʤ */
    if ($degree != "-1") {
        $contents .= DEGREE_SET . " <= $degree and \\ \n";
    }
    $esc_keyword = str_replace("\\", "\\\\", $keyword);
    $esc_keyword = str_replace("'", "\\'", $esc_keyword);

    $contents .= KEYWORD_SET . "'$esc_keyword' \\ \n";
    /* ʸꤵƤʤ */
    if ($body == "") {
        $contents .= "then :ommail:;default_mail_body\n";
    } else {
        $contents .= "then :ommail:;mail_body$nextnum\n";
    }
    return $contents;
}

/*********************************************************
 * cut_keyword()
 *
 * ѤΥɤؿ
 *
 * []
 *      $in_keyword     Ϥ줿
 *
 * [֤]
 *      $disp_key       ѤΥ(40ʸʾ)
 *      $in_keyword     ѤΥ(40ʸ̤)
 ********************************************************/

function cut_keyword($in_keyword)
{

    /* ɤ40ʸʾ夫 */
    $strkey = strlen($in_keyword);
    if ($strkey > DISP_KEY) {
        $cutkey = substr($in_keyword, 0, DISP_KEY);
        $disp_key = "$cutkey" . "...";
        return $disp_key;
    }
    return $in_keyword;
}

/*********************************************************
 * dgp_location_hidden() 
 *
 * ܤݤͤϤ 
 *
 * []
 *       $url                
 *       $hiarray            Ϥͤ
 *
 * [֤]
 *       TRUE                
 *       FALSE               ۾
 **********************************************************/
function dgp_location_hidden($url, $hiarray = null)
{
    global $sesskey;

    /* å */
    $hidden = "<input type=\"hidden\" name=\"sk\" value=\"" .
               $sesskey . "\">";

    if (is_array($hiarray)) {
        foreach ($hiarray as $key => $value) {
            $hidden .= "\n" . "<input type=\"hidden\" name=\"$key\" " .
                              "value=\"$value\">";
        }
    }

    /* HTML */
    display_header();
    print <<<EOD
<script type="text/javascript">
<!--

function dgpSubmit(url) {
    document.common.action = url;
    document.common.submit();
}
// -->
</script>
<body onload="dgpSubmit('$url')">
...
<form method="post" name="common">
    $hidden
</form>
</body>
</html>
EOD;
    exit;

}

/*********************************************************
 * get_rsys_file
 *
 * ե 
 *
 * []
 *       $dir               եΤǥ쥯ȥ 
 *
 * [֤]
 *       TRUE                
 *       FALSE               ۾
 **********************************************************/
function get_rsys_file($dir, &$rsysarray)
{
    /* ǥ쥯ȥϥɥ */
    $rsysdir = opendir($dir);
    if ($rsysdir === FALSE) {
        return FALSE;
    }
    $rsysarray = array();
    $rsysnum = array();
    /* readdirǥե̾ */
    while (false !== ($rsysfile = readdir($rsysdir))) {
        /* .confФ */
        $ret = preg_match("/^[0-9]*.conf$/", $rsysfile, $confarray);
        if ($ret === FALSE) {
            $err_msg = sprintf($msgarr['28038'][SCREEN_MSG], $dir);
            $log_msg = sprintf($msgarr['28038'][LOG_MSG], $dir);
            return FALSE;
        }
        /* ľ */
        foreach($confarray as $rsysfile) {
            $rsysfile = substr($rsysfile,0,-5);
            array_push($rsysnum, $rsysfile);
        }
    }
    closedir($rsysdir);
    sort($rsysnum);
    foreach($rsysnum as $filenum) {
        $file = "$filenum.conf";
        array_push($rsysarray, $file);
    }
    return TRUE;
}

/*********************************************************
 * get_array_file
 *
 * եȤ 
 *
 * []
 *       $arrayfile          ե
 *       $dir                եΥǥ쥯ȥ
 *       $flag               顼åѤΥե饰
 *
 * [֤]
 *       $filearray          եȤä
 **********************************************************/
function get_array_file($arrayfile, $dir, &$flag)
{
    global $web_conf;
    global $msgarr;
    global $err_msg;
    global $log_msg;

    /* եؿǥեȤ */
    $filearray = array();
    $i = 0;
    foreach($arrayfile as $file) {
        $readfile = $dir . $file;
        /* եȤ */
        $fh = file($readfile);
        if ($fh === FALSE) {
            /* 顼ååȤƤ */
            if (isset($err_msg) && $err_msg != "") {
                $err_msg .= "<br>" . sprintf($msgarr['28042'][SCREEN_MSG], $readfile);
                $log_msg .= sprintf($msgarr['28042'][LOG_MSG], $readfile);
            } else {
                $err_msg = sprintf($msgarr['28042'][SCREEN_MSG], $readfile);
                $log_msg = sprintf($msgarr['28042'][LOG_MSG], $readfile);
            }
            $flag = 1;
        } else {
            /* ȤԤɤ */
            foreach ($fh as $line_num => $line) {
                $line = rtrim($line);
                /* ᡼밸ԤФ */
                $mailto = strstr($line, "\$ActionMailTo");
                if ($mailto != FALSE) {
                    $exp = explode(" ", $mailto, 2);
                    $filearray[$i][$exp[0]] = $exp[1];
                }
                /* ᡼̾ԤФ */
                $mailsubject = strstr($line, SUBJECT_SET);
                if ($mailsubject != FALSE) {
                    $exp = explode(",", $mailsubject, 2);
                    $first = strpos($exp[1], "\"");
                    $last = strrpos($exp[1], "\"");
                    $subject = substr($exp[1], $first + 1, $last - $first -1);
                    $filearray[$i][$exp[0]] = $subject;
                }
                /* ᡼ʸԤФ */
                $mailbody = strstr($line, BODY_SET);
                if ($mailbody != FALSE) {
                    $exp = explode(",", $mailbody, 2);
                    $first = strpos($exp[1], "\"");
                    $last = strrpos($exp[1], "\"");
                    $body = substr($exp[1], $first + 1, $last - $first -1);
                    $filearray[$i][$exp[0]] = $body;
                }
                /* IPɥ쥹ԤФ */
                $fromip = strstr($line, IP_SET);
                if ($fromip != FALSE) {
                    $fromip = str_replace("'", "", $fromip);
                    $exp = explode(" ", $fromip);
                    $filearray[$i][$exp[0]] = $exp[2];
                }
                /* եƥԤФ */
                $facility = strstr($line, FACILITY_SET);
                if ($facility != FALSE) {
                    $exp = explode(" ", $facility);
                    $filearray[$i][$exp[0]] = $exp[2];
                }
                /* ٹԤФ */
                $syslogseverity = strstr($line, DEGREE_SET);
                if ($syslogseverity != FALSE) {
                    $exp = explode(" ", $syslogseverity);
                    $filearray[$i][$exp[0]] = $exp[2];
                }
                /* ɹԤФ */
                $keyword = strstr($line, KEYWORD_SET);
                if ($keyword != FALSE) {
                    /* 'ǰϤ줿ʬФ */
                    $first = strpos($keyword, "'");
                    $last = strrpos($keyword, "'");
                    $key = substr($keyword, $first + 1, $last - $first -1);
                    $filearray[$i][KEYWORD_SET] = $key;
                }
            }
            $filearray[$i]["file"] = $file;
        }
        /*ΥեعԤ*/
        $i ++;
    }
    return $filearray;
}

/*********************************************************
 * get_page
 *
 * ڡڡμ
 *
 * []
 *       $ldap_result       LDAPθ
 *       $page              ڡ
 *       $tag               
 * [֤]
 *       $all_page          ڡ
 **********************************************************/
function get_page($data, &$page, &$tag)
{
    global $web_conf;

    $sum = count($data);

    /* ɽ(0ڡɽ)ξ硢ä˲⤷ʤ */
    if ($page === 0) {
        return;
    }
    /* =====  ===== */

    /* ڡ */
    $all_page = (int) ceil(($sum / $_POST["resultline"]));
    if ($all_page == 0) {
        $all_page = 1;
    }

    /* ڡʾοϤäƤǸΥڡɽ */
    if ($all_page <= $page) {
        $page = $all_page;
    }
    /* ǽΥڡǤʤڡɽ */
    if ($page > 1) {
        $tmp = $page - 1;
        $tag["<<PRE>>"] = "<a href=\"#\" onClick=\"allSubmit('index.php', '$tmp')\">ڡ</a>";
    }

    /* ǸΥڡǤʤмڡɽ */
    if ($page != $all_page) {
        $tmp = $page + 1;
        $tag["<<NEXT>>"] = "<a href=\"#\" onClick=\"allSubmit('index.php', '$tmp')\">ڡ</a>";
    }
    /* ڡֹ֤ */
    $tag["<<PAGE_NUM>>"] = $page;

    return $all_page;
}

/*********************************************************
 * check_elasticsearchserver
 *
 * ե"elasticsearchservers"ηå
 *
 * []
 *       $elasticsearchserver elasticsearchΥIP
 * [֤]
 *       TRUE                 
 *       FALSE                ۾
 **********************************************************/
function check_elasticsearchserver($elasticsearchserver)
{
    global $elasticip;

    /* Ƥʤϥ顼 */
    if (strlen($elasticsearchserver) === 0) {
        return FALSE;
    }
        
    /* Ƥ "," ڤ */
    $elasticlist = explode(",", $elasticsearchserver);

    /* IPɥ쥹ȥݡȤ ":" ڤ */
    foreach ($elasticlist as $value) {
        $ip = explode(":", $value, 2);
        
        /* IPɥ쥹ʤ票顼 */
        if (empty($ip[0]) === TRUE) {
            return FALSE;
        }

        /* ݡȤʤ票顼 */
        if (empty($ip[1]) === TRUE) {
            return FALSE;
        }

        /* ζ */
        $ip[0] = trim($ip[0]);
        $ip[1] = trim($ip[1]);

        /* ݡֹ椬ʳϥ顼 */
        if (is_integer_number($ip[1]) === FALSE) {
            return FALSE;
        }

        /* Ϣ˳Ǽ */
        $elasticip["$ip[0]"] = $ip[1];
    }
    return TRUE;
}

/*********************************************************
 * check_searchtype
 *
 * ե"searchtype"ηå
 *
 * []
 *       $searchtype 
 * [֤]
 *       TRUE                 
 *       FALSE                ۾
 **********************************************************/
function check_searchtype($searchtype)
{

    /* Ƥʤϥ顼 */
    if ($searchtype !== MYSQL && $searchtype !== ELASTICSEARCH) {
        return FALSE;
    }

    return TRUE;
}

/*********************************************************
 * check_csvformat
 *
 * ե"csvformat"ηå
 *
 * []
 *       $csvformat
 * [֤]
 *       TRUE                 
 *       FALSE                ۾
 **********************************************************/
function check_csvformat($csvformat)
{
    $checker = array("host", "date", "msg");

    /* ξ */
    if (empty($csvformat)) {
        return False;
    }

    /* CSVΰ۾ */
    $list = explode(",", $csvformat);

    if (count($list) !== 3) {
        return False;
    }

    foreach ($checker as $check) {
        $ret = array_keys($list, $check);
        if (count($ret) !== 1) {
            return False;
        }
    }

    return TRUE;
}

/*********************************************************
 * get_loggroup()
 *
 * ꤵ줿롼פ򸡺̤˳Ǽ
 *
 * []
 *       $corn              MYSQLϥɥ顼
 *       $loggroup          򤵤줿롼̾
 *       $data              MYSQL鸡롼׷
 *
 * [֤]
 *       0                  
 *       1                  ۾
 *       2                  DB顼
 **********************************************************/
function get_loggroup($conn, $loggroup, &$data)
{
    global $web_conf;
    global $msgarr;
    global $err_msg;
    global $log_msg;

    /* MySQL */
    $select_sql = sprintf(ESL_LOGGROUP_SQL, $loggroup);

    /* MySQL */
    $result = MySQL_exec_query($conn, $select_sql);
    if ($result === FALSE) {
        return 2;
    }

    /* MySQLϿ줿ơ֥ξ˳Ǽ */
    MySQL_get_data($result, $data);

    /* ǡʤȤ롼פ˸оݥۥȤꤵƤʤ */
    if (count($data) === 0) {
        $err_msg = $msgarr['28019'][SCREEN_MSG];
        $log_msg = $msgarr['28019'][LOG_MSG];
        return 1;
    }

    return 0;

}
/*********************************************************
 * get_elasticdata()
 *
 * elasticsearch鸡̤˳Ǽ
 *
 * []
 *       $groupdata         MYSQL鸡롼׷
 *       $post              web̤Ϥ
 *       $gettype           [ʰ(default)DHCPmail]
 *
 * [֤]
 *       $output            (ǤʤäNULL)
 **********************************************************/
function get_elasticdata($groupdata, $post, $gettype = "easy")
{
    global $web_conf;
    global $elasticip;
    global $msgarr;
    global $err_msg;
    global $log_msg;

    /*  */
    $elastic_query = "";
    $elastic_json = "";
    $oupput = "";
    $start = "";
    $end = "";
    $duration = 0;
    $indices = array();
    $index = "";

    /* Ƚλκʬ(:$duration) */
    check_duration($post["startdate"], $post["enddate"], $duration);

    /* UnixѴ */
    $usdate = strtotime($post["startdate"]);

    /* ֤ϰϤʤindex */
    if ($duration <= $web_conf["sylas"]["searchperiodwithindex"]) {
        for ($i = 0; $i < $duration; $i++) {
            /* ESΥǥå */
            $indices[] = "syslog-". date("Y-m-d", strtotime("+". $i. " day", $usdate)). "*";
        }
        $index = "/". implode(",", $indices);
    }


    /* elasticsearchѤjson */
    /* ʰ׸ */
    if ($gettype === "easy") {
        $elastic_query = make_elasticjson($groupdata, $post);
    /* DHCP */
    } else if ($gettype === "dhcp") {
        $elastic_query = make_elasticjson_dhcp($groupdata, $post);
    /* MAIL */
    } else if ($gettype === "mail") {
        $elastic_query = make_elasticjson_mail($groupdata, $post);
    }

    /* web_confelasticserverФƸ */
    foreach ($elasticip as $ip => $port) {

        /* URLʬ */
        $url = "http://". $ip. ":". $port. $index. "/_search?pretty&size=".
                                                $web_conf["sylas"]["maxsearchcount"];

        /* cURL */
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $elastic_query);

        /* elasticsearch¹ */
        $output = curl_exec($ch);
        curl_close($ch);

        /* Ǥ硢롼פȴ */
        if ($output !== NULL && $output !== false) {
            break;
        }
    }


    return $output;

}

/*********************************************************
 * extract_values()
 *
 * elasticsearchǡɬפʥǡ
 *
 * []
 *       $xmlarr          elasticsearchǡ
 *
 * [֤]
 *       $data            ɽѥǡ
 **********************************************************/
function extract_values($xmlarr)
{

    global $msgarr;
    global $err_msg;
    global $log_msg;

    $data = array();
    $i = 0;

    /* ֤ͤ400(int)ΤȤ顼 */
    if (isset($xmlarr->status) && $xmlarr->status === 400) {
        $err_msg = $msgarr['50001'][SCREEN_MSG];
        $log_msg = $msgarr['50001'][LOG_MSG];
        return FALSE;
    };

    /* ִΥѥ */
    $patterns = "/([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(.[0-9]{3})/";
    $replacements = "$1/$2/$3 $4:$5:$6";
    
    foreach ($xmlarr->hits->hits as $key => $value) {
        $data[$i]["Message"] = $value->_source->message;
        $data[$i]["FromHost"] = $value->_source->host;
        $resultdate = $value->_source->date;
        $resultdate = preg_replace($patterns, $replacements, $resultdate);
        $data[$i]["DeviceReportedTime"] = $resultdate;
        $i++;
    }
    return $data;

}

/*********************************************************
 * make_timerange_elastic()
 *
 * Ϥ줿֤elasticsearchѤΥѹ
 *
 * []
 *       $post             Ϥ줿
 *
 * [֤]
 *       $search_time["start"]     ϻ
 *       $search_time["end"]       λ
 **********************************************************/
function make_timerange_elastic($post)
{
    /* Unixॹפ */
    $ustart = strtotime($post["startdate"]);
    $uend = strtotime($post["enddate"]);

    /* ESѥեޥåȤѴ */
    $start = date("Y-m-d\TH:i:s", $ustart);
    $end = date("Y-m-d\TH:i:s", $uend);

    /* ֵ */
    $search_time["start"] = $start;
    $search_time["end"] = $end;

    return $search_time;
}




/*********************************************************
 * make_elasticjson()
 *
 * elasticsearch鸡뤿jsonʸ(URLʬ)
 *
 * []
 *       $groupdata          MYSQL鸡롼׷
 *       $post               Ϥ줿
 *
 * [֤]
 *       $json                elasticsearchjsonʸ(URLʬʤ)
 **********************************************************/
function make_elasticjson($groupdata, $post)
{
    /*****************************************************
    * 
    *****************************************************/
    $json = "";
    $jsonArray = array("query"=>
                   array("bool"=>
                     array("must"=>array())
                   )
                 );

    /* 
     *$groupdatahost_nameʬ䤵줿ˤʤäƤ
     * դ˸host_nameʳϤ٤Ʊ
     * ΤᡢͤȽ̡ѤƬڤФƤ
     */
    $ghead = $groupdata[0];

    /*****************************************************
    * Syslog եƥ
    *****************************************************/
    /* եƥꤵƤΤ߾ */
    if ($ghead["facility_name"] !== ".ALL") {
        $facility = array("match" => 
                      array("facility" => $ghead["facility_name"])
                    );

        $jsonArray["query"]["bool"]["must"][] = $facility;
    }

    /*****************************************************
    * Syslog (ץꥱ̾)
    *****************************************************/
    if ($ghead["app_name"] !== "") {
        $app = array("wildcard" => 
                 array("tag" => $ghead["app_name"]. "*")
               );
        $jsonArray["query"]["bool"]["must"][] = $app;
    }

    /*****************************************************
    * Syslog ץ饤ƥ
    *****************************************************/
    if ($post["priority"] !== "-1") {
        $priority = array("match" => 
                 array("priority" => $post["priority"])
               );
        $jsonArray["query"]["bool"]["must"][] = $priority;
    }

    /*****************************************************
    * ۥ̾
    *****************************************************/
    $ghosts = array();
    $phosts = array();
    $hosts = array();
    $allflag = false;

    /* $groupdataΥۥ̾ */
    if ($ghead["host_name"] !== "" && $ghead["host_name"] !== NULL) {
        foreach ($groupdata as $tmpgroup) {
            /* host_id1(٤ƤΥۥ)ϴޤʤ*/
            if ($tmpgroup["host_id"] == 1) {
                $allflag = true;
                continue;
            }

            $ghosts[] = $tmpgroup["host_name"];
        }
    }


    /* POSTΥۥ̾ */
    if (isset($post["hostname"])) {
        if ($post["hostname"] !== "" && $post["hostname"] !== NULL) {
            $phosts = explode(" ", $post["hostname"]);
        }
    }

    /* ٤ƤΥۥȤ롼פϿƤʤ硢ʤ */
    if ($allflag === false) {
        /* 롼פΥۥȤݥȤ줿ۥȤʤ */
        foreach ($phosts as $ph) {
            foreach ($ghosts as $gh) {
                if ($gh === $ph) {
                    $hosts[] = $ph;
                }
            }
        }

        if (count($hosts) == 0 && count($phosts) != 0) {
            $hosts[0] = "";
        }

    /* ٤ƤΥۥȤ롼פϿƤСPOST줿ۥ
       ʤ߾Ȥ */
    } else {
        $hosts = $phosts;
    }

    if (count($hosts) == 0) {
        $hosts = $ghosts;
    }


    if (count($hosts) !== 0) {
        /* ޡ줿ǡˡ */
        $hosts = array_unique($hosts);

        /* ۥ̾ã򥹥ڡڤʸȤ */
        $host_str = implode(" ", $hosts);

        $hostJson = array("query_string"=>
                         array("default_field"=>"host.keyword",
                               "default_operator"=>"or",
                               "query"=> $host_str)
                       );

        $jsonArray["query"]["bool"]["must"][] = $hostJson;
    }

    /*****************************************************
    * 
    *****************************************************/
    if ($post["keyword"] !== "") {
        $escword1 = str_replace(":", "\:", $post["keyword"]);
        $escword2 = str_replace("[", "\[", $escword1);
        $escword2 = str_replace("]", "\]", $escword2);
        $escword2 = str_replace("+", "\+", $escword2);

        /* ANDξ */
        $keyword = array("query_string"=>
                     array("default_field"=>"message",
                           "default_operator"=>"and",
                           "query"=> $escword2)
                   );
    
        /* ORξ */
        if ($post["searchtype"] === "1") {
            $keyword = array("query_string"=>
                         array("default_field"=>"message",
                               "default_operator"=>"or",
                               "query"=> $escword2)
                       );
        }
    
        /* ɽξ */
        if ($post["searchtype"] === "2") {
            $keyword = array("regexp"=>
                         array("message.keyword"=> $escword1)
                       );
        }
        $jsonArray["query"]["bool"]["must"][] = $keyword;
 
    }

    /*****************************************************
    * 
    *****************************************************/
    /* Ϥ줿֤elasticsearchѤΥѹ */
    $search_time = make_timerange_elastic($post);
    $date = array();

    /*   */
    if ($search_time["start"] !== "") {
        $date["range"]["date"]["from"] = $search_time["start"];
    }


    if ($search_time["end"] !== "") {
        $date["range"]["date"]["to"] = $search_time["end"];
    }


    if (count($date) !== 0) {
        $jsonArray["query"]["bool"]["must"][] = $date;
    }

    /*****************************************************
    * 
    *****************************************************/
    $jsonArray["sort"]["date"]["order"] = "desc";


    /*****************************************************
    * jsonѴ
    *****************************************************/
    $json = json_encode($jsonArray);

    return $json;

}

/*********************************************************
 * make_elasticjson_dhcp()
 *
 * elasticsearch鸡뤿jsonʸ(DHCP)
 *
 * []
 *       $groupdata          MYSQL鸡롼׷
 *       $post               Ϥ줿
 *
 * [֤]
 *       $json                elasticsearchjsonʸ(URLʬʤ)
 **********************************************************/
function make_elasticjson_dhcp($groupdata, $post)
{
    /*  */
    $json = "";
    $jsonArray = array("query"=>
                   array("bool"=>
                     array("must"=>array())
                   )
                 );

    /* 
     *$groupdatahost_nameʬ䤵줿ˤʤäƤ
     * դ˸host_nameʳϤ٤Ʊ
     * ΤᡢͤȽ̡ѤƬڤФƤ
     */
    $ghead = $groupdata[0];

    /*****************************************************
    * Syslog եƥ
    *****************************************************/
    /* եƥꤵƤΤ߾ */
    if ($ghead["facility_name"] !== ".ALL") {
        $facility = array("match" => 
                      array("facility" => $ghead["facility_name"])
                    );

        $jsonArray["query"]["bool"]["must"][] = $facility;
    }

    /*****************************************************
    * Syslog (ץꥱ̾)
    *****************************************************/
    if ($ghead["app_name"] !== "") {
        $app = array("wildcard" => 
                 array("tag" => $ghead["app_name"]. "*")
               );
        $jsonArray["query"]["bool"]["must"][] = $app;
    }

    /*****************************************************
    * ۥ̾
    *****************************************************/
    $hosts = array();

    /* $groupdataΥۥ̾ */
    if ($ghead["host_name"] !== "" && $ghead["host_name"] !== NULL) {
        foreach ($groupdata as $tmpgroup) {
            /* host_id1(٤ƤΥۥ)ϴޤʤ*/
            if ($tmpgroup["host_id"] == 1) {
                continue;
            }   

            $hosts[] = $tmpgroup["host_name"];
        }   
    }   

    if (count($hosts) !== 0) {
        /* ޡ줿ǡˡ */
        $hosts = array_unique($hosts);

        /* ۥ̾ã򥹥ڡڤʸȤ */
        $host_str = implode(" ", $hosts);

        $hostJson = array("query_string"=>
                         array("default_field"=>"host.keyword",
                               "default_operator"=>"or",
                               "query"=> $host_str)
                       );
        $jsonArray["query"]["bool"]["must"][] = $hostJson;
    }


    /*****************************************************
    * IPɥ쥹
    *****************************************************/
    if ($post["ip"] !== "") {
        /* :򥨥 */
        $escip = str_replace(":", "\:", $post["ip"]);

        $ipjson = array("wildcard"=>
                     array("message.keyword"=> "*". $escip. "*")
                   );
        $jsonArray["query"]["bool"]["must"][] = $ipjson;
    }

    /*****************************************************
    * MACɥ쥹
    *****************************************************/
    if ($post["mac"] !== "") {
        /* :򥨥 */
        $escmac = str_replace(":", "\:", $post["mac"]);

        $macjson = array("wildcard"=>
                     array("message.keyword"=> "*". $escmac. "*")
                   );
        $jsonArray["query"]["bool"]["must"][] = $macjson;
    }

    /*****************************************************
    * NIC
    *****************************************************/
    if ($post["interface"] !== "") {
        /* :򥨥 */
        $escif = str_replace(":", "\:", $post["interface"]);

        $ifjson = array("wildcard"=>
                     array("message.keyword"=> "*". $escif. "*")
                   );
        $jsonArray["query"]["bool"]["must"][] = $ifjson;
    }

    /*****************************************************
    * 
    *****************************************************/
    /* Ϥ줿֤elasticsearchѤΥѹ */
    $search_time = make_timerange_elastic($post);
    $date = array();

    /*   */
    if ($search_time["start"] !== "") {
        $date["range"]["date"]["from"] = $search_time["start"];
    }


    if ($search_time["end"] !== "") {
        $date["range"]["date"]["to"] = $search_time["end"];
    }


    if (count($date) !== 0) {
        $jsonArray["query"]["bool"]["must"][] = $date;
    }

    /*****************************************************
    * 
    *****************************************************/
    $jsonArray["sort"]["date"]["order"] = "desc";


    /*****************************************************
    * jsonѴ
    *****************************************************/
    $json = json_encode($jsonArray);

    return $json;
}

/*********************************************************
 * make_elasticjson_mail()
 *
 * elasticsearch鸡뤿jsonʸ(MAIL)
 *
 * []
 *       $groupdata          MYSQL鸡롼׷
 *       $post               Ϥ줿
 *
 * [֤]
 *       $json                elasticsearchSQLʸ(URLʬʤ)
 **********************************************************/
function make_elasticjson_mail($groupdata, $post)
{
    /*  */
    $json = "";
    $jsonArray = array("query"=>
                   array("bool"=>
                     array("must"=>array())
                   )
                 );

    /* 
     *$groupdatahost_nameʬ䤵줿ˤʤäƤ
     * դ˸host_nameʳϤ٤Ʊ
     * ΤᡢͤȽ̡ѤƬڤФƤ
     */
    $ghead = $groupdata[0];

    /*****************************************************
    * Syslog եƥ
    *****************************************************/
    /* եƥꤵƤΤ߾ */
    if ($ghead["facility_name"] !== ".ALL") {
        $facility = array("match" => 
                      array("facility" => $ghead["facility_name"])
                    );

        $jsonArray["query"]["bool"]["must"][] = $facility;
    }

    /*****************************************************
    * Syslog (ץꥱ̾)
    *****************************************************/
    if ($ghead["app_name"] !== "") {
        $app = array("wildcard" => 
                 array("tag.keyword" => $ghead["app_name"]. "*")
               );
        $jsonArray["query"]["bool"]["must"][] = $app;
    }

    /*****************************************************
    * ۥ̾
    *****************************************************/
    $hosts = array();

    /* $groupdataΥۥ̾ */
    if ($ghead["host_name"] !== "" && $ghead["host_name"] !== NULL) {
        foreach ($groupdata as $tmpgroup) {
            /* host_id1(٤ƤΥۥ)ϴޤʤ*/
            if ($tmpgroup["host_id"] == 1) {
                continue;
            }

            $hosts[] = $tmpgroup["host_name"];
        }
    } 

    if (count($hosts) !== 0) {
        /* ޡ줿ǡˡ */
        $hosts = array_unique($hosts);

        /* ۥ̾ã򥹥ڡڤʸȤ */
        $host_str = implode(" ", $hosts);

        $hostJson = array("query_string"=>
                         array("default_field"=>"host.keyword",
                               "default_operator"=>"or",
                               "query"=> $host_str)
                       );

        $jsonArray["query"]["bool"]["must"][] = $hostJson;
    }

    /*****************************************************
    * 
    *****************************************************/
    /* Ϥ줿֤elasticsearchѤΥѹ */
    $search_time = make_timerange_elastic($post);
    $date = array();

    /*   */
    if ($search_time["start"] !== "") {
        $date["range"]["date"]["from"] = $search_time["start"];
    }


    if ($search_time["end"] !== "") {
        $date["range"]["date"]["to"] = $search_time["end"];
    }


    if (count($date) !== 0) {
        $jsonArray["query"]["bool"]["must"][] = $date;
    }

    /*****************************************************
    * 
    *****************************************************/
    $jsonArray["sort"]["date"]["order"] = "desc";


    /*****************************************************
    * jsonѴ
    *****************************************************/
    $json = json_encode($jsonArray);

    return $json;
}

?>
