function search()
{
    $tpl = new templates();
    $MyPage = CurrentPageName();
    $q = new postgres_sql();
    $t = $_GET["t"];
    $search = '%';
    $table = "smtpstats_day";
    $page = 1;
    $table = "(SELECT SUM(grey) as grey, SUM(black) AS black, SUM(cnx) as cnx,AVG(domains) as domains,cdir FROM smtpcdir_day GROUP BY cdir) as t";
    if (isset($_POST["sortname"])) {
        if ($_POST["sortname"] != null) {
            if ($_POST["sortname"] == "servername") {
                $_POST["sortname"] = "value";
            }
            $ORDER = "ORDER BY {$_POST["sortname"]} {$_POST["sortorder"]}";
        }
    }
    if (isset($_POST['page'])) {
        $page = $_POST['page'];
    }
    $searchstring = string_to_flexPostGresquery();
    if ($searchstring != null) {
        $sql = "SELECT COUNT(*) as tcount FROM {$table} WHERE {$searchstring}";
        $ligne = pg_fetch_assoc($q->QUERY_SQL($sql, "artica_events"));
        $total = $ligne["tcount"];
    } else {
        $sql = "SELECT COUNT(*) as tcount FROM {$table}";
        $ligne = pg_fetch_assoc($q->QUERY_SQL($sql, "artica_events"));
        $total = $ligne["tcount"];
    }
    if (isset($_POST['rp'])) {
        $rp = $_POST['rp'];
    }
    $pageStart = ($page - 1) * $rp;
    $limitSql = "LIMIT {$rp} OFFSET {$pageStart}";
    $sql = "SELECT *  FROM {$table} WHERE {$searchstring} {$FORCE} {$ORDER} {$limitSql}";
    writelogs($sql, __FUNCTION__, __FILE__, __LINE__);
    $data = array();
    $data['page'] = $page;
    $data['total'] = $total;
    $data['rows'] = array();
    $results = $q->QUERY_SQL($sql, "artica_events");
    if (!$q->ok) {
        json_error_show($q->mysql_error, 0);
    }
    $divstart = "<span style='font-size:12px;font-weight:normal'>";
    $divstop = "</div>";
    if (pg_num_rows($results) == 0) {
        pg_num_rows("no data");
    }
    while ($ligne = pg_fetch_assoc($results)) {
        $id = md5(serialize($ligne));
        $color = "black";
        $color_black = "black";
        $fontweight = "normal";
        if ($ligne["black"] > 0) {
            $color_black = "#d32d2d";
        }
        if ($ligne["grey"] > 0) {
            $fontweight = "bold";
        }
        $BLACK = FormatNumber($ligne["black"]);
        $GREY = FormatNumber($ligne["grey"]);
        $CNX = FormatNumber($ligne["cnx"]);
        $CDIR = $ligne["cdir"];
        $DOMAINS = FormatNumber($ligne["domains"]);
        $data['rows'][] = array('id' => $ligne['ID'], 'cell' => array("<span style='font-size:18px;color:{$color}'>{$CDIR}</strong>", "<strong  style='font-size:18px;color:{$color}'>{$DOMAINS}</strong><a>", "<strong  style='font-size:18px;color:{$color}'>{$CNX}</strong><a>", "<span  style='font-size:18px;color:{$color_black}'>{$BLACK}</span>", "<span style='font-size:18px;color:{$color};font-weight:{$fontweight}'>{$GREY}</strong></a>"));
    }
    echo json_encode($data);
}
function build_table()
{
    $q = new mysql_squid_builder();
    $md5 = $_GET["zmd5"];
    if ($md5 == null) {
        json_error_show('no key sended');
    }
    $q = new mysql_squid_builder();
    $ligne = mysql_fetch_array($q->QUERY_SQL("SELECT * FROM reports_cache WHERE `zmd5`='{$md5}'"));
    $params = unserialize($ligne["params"]);
    $from = $params["FROM"];
    $to = $params["TO"];
    $interval = $params["INTERVAL"];
    $userfield = strtolower($params["USER"]);
    $search = $params["SEARCH"];
    $page = 1;
    $q = new postgres_sql();
    $tpl = new templates();
    $searchstring = string_to_flexPostGresquery();
    $table = "(SELECT SUM(size) AS size,{$userfield} FROM \"{$md5}report\" GROUP BY {$userfield}) as t";
    if (isset($_POST['page'])) {
        $page = $_POST['page'];
    }
    if (isset($_POST["sortname"])) {
        if ($_POST["sortname"] != null) {
            $ORDER = "ORDER BY {$_POST["sortname"]} {$_POST["sortorder"]}";
        }
    }
    if ($searchstring != null) {
        $sql = "SELECT COUNT(*) AS tcount FROM {$table} WHERE {$searchstring}";
        $ligne = pg_fetch_assoc($q->QUERY_SQL($sql, "artica_backup"));
        $total = $ligne["tcount"];
    } else {
        $sql = "SELECT COUNT(*) AS tcount FROM {$table}";
        $ligne = pg_fetch_assoc($q->QUERY_SQL($sql, "artica_backup"));
        $total = $ligne["tcount"];
    }
    if (isset($_POST['rp'])) {
        $rp = $_POST['rp'];
    } else {
        $rp = 50;
    }
    $pageStart = ($page - 1) * $rp;
    $limitSql = "LIMIT {$rp} OFFSET {$pageStart}";
    $sql = "SELECT * FROM {$table} WHERE {$searchstring} {$ORDER} {$limitSql}";
    if ($GLOBALS["VERBOSE"]) {
        echo "{$sql}<br>\n";
    }
    $results = $q->QUERY_SQL($sql);
    if (!$q->ok) {
        json_error_show("{$q->mysql_error} {$sql}", 0);
    }
    $data = array();
    $data['page'] = $page;
    $data['total'] = $total;
    $data['rows'] = array();
    if (pg_num_rows($results) == 0) {
        json_error_show("No data", 1);
    }
    $fontsize = "22px";
    $c = 1;
    while ($ligne = pg_fetch_assoc($results)) {
        $USER = trim($ligne[$userfield]);
        if (preg_match("#([0-9\\.]+)\\/[0-9]+#", $USER, $re)) {
            $USER = $re[1];
        }
        $c++;
        $size = FormatBytes($ligne["size"] / 1024);
        $js = "Loadjs('postfix.statistics.report.member.php?from-zmd5={$md5}&USER_DATA=" . urlencode($USER) . "');";
        if ($USER == null) {
            $USER = "******";
            $js = "blur();";
        }
        $href = "<a href=\"javascript:blur();\" OnClick=\"javascript:{$js}\" style='font-size:26px;text-decoration:underline'>";
        $data['rows'][] = array('id' => $c, 'cell' => array("<span style='font-size:{$fontsize}'>{$href}{$USER}</a></span>", "<span style='font-size:{$fontsize}'>{$size}</a></span>"));
    }
    $data['total'] = $c;
    echo json_encode($data);
}
示例#3
0
function rules_list()
{
    $search = '%';
    $page = 1;
    $q = new postgres_sql();
    $tpl = new templates();
    $searchstring = string_to_flexPostGresquery();
    if (isset($_POST['page'])) {
        $page = $_POST['page'];
    }
    if (isset($_POST["sortname"])) {
        if ($_POST["sortname"] != null) {
            $ORDER = "ORDER BY {$_POST["sortname"]} {$_POST["sortorder"]}";
        }
    }
    if ($searchstring != null) {
        $sql = "SELECT COUNT(*) AS tcount FROM suricata_sig WHERE {$searchstring}";
        $ligne = pg_fetch_assoc($q->QUERY_SQL($sql, "artica_backup"));
        $total = $ligne["tcount"];
    } else {
        $sql = "SELECT COUNT(*) AS tcount FROM suricata_sig";
        $ligne = pg_fetch_assoc($q->QUERY_SQL($sql, "artica_backup"));
        $total = $ligne["tcount"];
    }
    if (isset($_POST['rp'])) {
        $rp = $_POST['rp'];
    }
    $pageStart = ($page - 1) * $rp;
    $limitSql = "LIMIT {$rp} OFFSET {$pageStart}";
    $sql = "SELECT * FROM suricata_sig WHERE {$searchstring} {$ORDER} {$limitSql}";
    writelogs($sql, __FUNCTION__, __FILE__, __LINE__);
    $results = $q->QUERY_SQL($sql, "artica_backup");
    if (!$q->ok) {
        json_error_show($q->mysql_error . "<br>{$sql}", 1);
    }
    $data = array();
    $data['page'] = $page;
    $data['total'] = $total;
    $data['rows'] = array();
    if (pg_num_rows($results) == 0) {
        json_error_show("No data", 1);
    }
    while ($ligne = pg_fetch_assoc($results)) {
        $color = "black";
        $icon = "checkbox-on-24.png";
        $iconFW = "checkbox-off-24.png";
        if ($ligne["enabled"] == 0) {
            $icon = "checkbox-off-grey-24.png";
            $iconFW = "checkbox-off-grey-24.png";
            $color = "#8a8a8a";
        }
        if ($ligne["enabled"] == 1) {
            if ($ligne["firewall"] == 1) {
                $iconFW = "checkbox-on-24.png";
            }
        }
        $explain = $ligne["description"];
        $explain = wordwrap($explain, 110, "<br>");
        $data['rows'][] = array('id' => $ligne['ID'], 'cell' => array("<strong style='font-size:18px;color:{$color}'>{$ligne["signature"]}</strong>", "<span style='font-size:18px;color:{$color}'>{$explain}</span>", "<center>" . imgsimple($icon, null, "SuricataSignatureEnabled('{$ligne["signature"]}')") . "</center>", "<center>" . imgsimple($iconFW, null, "SuricataSignatureFWEnabled('{$ligne["signature"]}')") . "</center>"));
    }
    echo json_encode($data);
}
function build_chronology_search()
{
    $page = 1;
    $zmd5 = $_GET["zmd5"];
    $q = new postgres_sql();
    $table = "{$zmd5}report";
    $MyPage = CurrentPageName();
    if (isset($_POST["sortname"])) {
        if ($_POST["sortname"] != null) {
            $ORDER = "ORDER BY {$_POST["sortname"]} {$_POST["sortorder"]}";
        }
    }
    $searchstring = string_to_flexPostGresquery();
    if ($searchstring != null) {
        $sql = "SELECT COUNT(*) as tcount FROM \"{$table}\" WHERE {$searchstring}";
        $ligne = pg_fetch_array($q->QUERY_SQL($sql));
        if (!$q->ok) {
            json_error_show($q->mysql_error, 0);
        }
        $total = $ligne["tcount"];
    } else {
        $sql = "SELECT COUNT(*) as tcount FROM \"{$table}\"";
        $ligne = pg_fetch_array($q->QUERY_SQL($sql));
        if (!$q->ok) {
            json_error_show($q->mysql_error, 0);
        }
        $total = $ligne["tcount"];
    }
    if (isset($_POST['rp'])) {
        $rp = $_POST['rp'];
    }
    if (!is_numeric($rp)) {
        $rp = 50;
    }
    if (isset($_POST['page'])) {
        $page = $_POST['page'];
    }
    $pageStart = ($page - 1) * $rp;
    $limitSql = "LIMIT {$rp} OFFSET {$pageStart}";
    $sql = "SELECT *  FROM \"{$table}\" WHERE {$searchstring} {$ORDER} {$limitSql}";
    //writelogs($sql,__FUNCTION__,__FILE__,__LINE__);
    if (isset($_GET["verbose"])) {
        echo "<hr><code>{$sql}</code></hr>";
    }
    $results = $q->QUERY_SQL($sql);
    if (!$q->ok) {
        json_error_show($q->mysql_error, 1);
    }
    if (pg_num_rows($results) == 0) {
        json_error_show("{$table} no data", 1);
    }
    $fontsize = "26px";
    $data = array();
    $data['page'] = $page;
    $data['total'] = $total;
    $data['rows'] = array();
    while ($ligne = @pg_fetch_assoc($results)) {
        $zDate = $ligne["zdate"];
        $BYTES = $ligne["size"];
        $RQS = $ligne["rqs"];
        $SITE = $ligne["familysite"];
        $RQS = FormatNumber($RQS);
        $BYTES = FormatBytes($BYTES / 1024);
        $zDate = str_replace("00:00:00", "", $zDate);
        $data['rows'][] = array('id' => md5(serialize($ligne)), 'cell' => array("<span style='font-size:16px'>{$zDate}</span>", "<span style='font-size:16px'>{$SITE}</a></span>", "<span style='font-size:16px'>{$RQS}</span>", "<span style='font-size:16px'>{$BYTES}</span>"));
    }
    echo json_encode($data);
}
function rules_list()
{
    $search = '%';
    $page = 1;
    $q = new postgres_sql();
    $tpl = new templates();
    $searchstring = string_to_flexPostGresquery();
    if (isset($_POST['page'])) {
        $page = $_POST['page'];
    }
    if (isset($_POST["sortname"])) {
        if ($_POST["sortname"] != null) {
            $ORDER = "ORDER BY {$_POST["sortname"]} {$_POST["sortorder"]}";
        }
    }
    if ($searchstring != null) {
        $sql = "SELECT COUNT(*) AS tcount FROM suricata_firewall WHERE signature='{$_GET["sig"]}' AND {$searchstring}";
        $ligne = pg_fetch_assoc($q->QUERY_SQL($sql, "artica_backup"));
        $total = $ligne["tcount"];
    } else {
        $sql = "SELECT COUNT(*) AS tcount FROM suricata_firewall WHERE signature='{$_GET["sig"]}'";
        $ligne = pg_fetch_assoc($q->QUERY_SQL($sql, "artica_backup"));
        $total = $ligne["tcount"];
    }
    if (isset($_POST['rp'])) {
        $rp = $_POST['rp'];
    }
    $pageStart = ($page - 1) * $rp;
    $limitSql = "LIMIT {$rp} OFFSET {$pageStart}";
    $sql = "SELECT * FROM suricata_firewall WHERE signature='{$_GET["sig"]}' AND {$searchstring} {$ORDER} {$limitSql}";
    writelogs($sql, __FUNCTION__, __FILE__, __LINE__);
    $results = $q->QUERY_SQL($sql, "artica_backup");
    if (!$q->ok) {
        json_error_show($q->mysql_error, 1);
    }
    $data = array();
    $data['page'] = $page;
    $data['total'] = $total;
    $data['rows'] = array();
    if (pg_num_rows($results) == 0) {
        json_error_show("No data", 1);
    }
    while ($ligne = pg_fetch_assoc($results)) {
        $color = "black";
        $signature = intval($ligne["signature"]);
        $explain = "{block} {from} {$ligne["src_ip"]} {$ligne["proto"]}";
        if ($ligne["dst_port"] > 0) {
            $explain = $explain . " {port} {$ligne["dst_port"]}";
        }
        $explain = $tpl->javascript_parse_text($explain);
        $signature_js = "<a href=\"javascript:blur();\"\n\t\t\tOnClick=\"javascript:Loadjs('suricata.rule-zoom.php?sig={$ligne["signature"]}');\"\n\t\t\tstyle='font-size:18px;color:{$color};text-decoration:underline'>";
        $data['rows'][] = array('id' => $ligne['ID'], 'cell' => array("<strong style='font-size:18px;color:{$color}'>{$ligne["zdate"]}</strong>", "<span style='font-size:18px;color:{$color}'>{$explain}</span>", "<center>" . imgsimple("delete-24.png", null, "SuricataFwDelete('{$ligne["id"]}')") . "</center>"));
    }
    echo json_encode($data);
}
function items()
{
    //1.4.010916
    $t = $_GET["t"];
    $tpl = new templates();
    $MyPage = CurrentPageName();
    $q = new postgres_sql();
    $users = new usersMenus();
    $search = '%';
    $table = "quarmsg";
    $page = 1;
    $FORCE_FILTER = "";
    if (!$users->AsPostfixAdministrator) {
        if ($users->AsMessagingOrg) {
            $ldap = new clladp();
            $domains = $ldap->hash_get_domains_ou($_SESSION["ou"]);
            while (list($domain, $MAIN) = each($domains)) {
                $domain = trim(strtolower($domain));
                if ($domain == null) {
                    continue;
                }
                $FDOMS[] = "domainto='{$domain}'";
                $FDOMS2[] = "domainfrom='{$domain}'";
            }
            $imploded1 = @implode(" OR ", $FDOMS);
            $imploded2 = @implode(" OR ", $FDOMS2);
            $table = "(select * FROM quarmsg WHERE ({$imploded1}) OR ({$imploded2})) as t";
        }
    }
    if (isset($_POST["sortname"])) {
        if ($_POST["sortname"] != null) {
            $ORDER = "ORDER BY {$_POST["sortname"]} {$_POST["sortorder"]}";
        }
    }
    if (isset($_POST['page'])) {
        $page = $_POST['page'];
    }
    $searchstring = string_to_flexPostGresquery();
    $sql = "SELECT COUNT(*) as tcount FROM {$table} WHERE {$searchstring}";
    $ligne = pg_fetch_array($q->QUERY_SQL($sql));
    $total = $ligne["tcount"];
    if (isset($_POST['rp'])) {
        $rp = $_POST['rp'];
    }
    $pageStart = ($page - 1) * $rp;
    $limitSql = "LIMIT {$rp} OFFSET {$pageStart}";
    $sql = "SELECT *  FROM {$table} WHERE {$searchstring} {$FORCE_FILTER} {$ORDER} {$limitSql}";
    $results = $q->QUERY_SQL($sql);
    $data = array();
    $data['page'] = $page;
    $data['total'] = $total;
    $data['rows'] = array();
    if (!$q->ok) {
        json_error_show($q->mysql_error);
    }
    if (pg_num_rows($results) == 0) {
        json_error_show("no rule");
    }
    while ($ligne = pg_fetch_assoc($results)) {
        $id = $ligne["id"];
        $color = "#000000";
        $ligne["size"] = FormatBytes($ligne["size"] / 1024);
        $delete = imgsimple("delete-24.png", "", "Loadjs('{$MyPage}?delete-message-js={$id}')");
        $urljs = "<a href=\"javascript:blur();\" OnClick=\"javascript:Loadjs('{$MyPage}?zoom-js=yes&id={$id}');\"\n\tstyle='font-size:16px;color:{$color};text-decoration:underline'>";
        $data['rows'][] = array('id' => "C{$zmd5}", 'cell' => array("<span style='font-size:16px;color:{$color}'>{$urljs}{$ligne["zdate"]}</a></span>", "<span style='font-size:16px;color:{$color}'>{$urljs}{$ligne["mailfrom"]}</a></span>", "<span style='font-size:16px;color:{$color}'>{$urljs}{$ligne["mailto"]}</a></span>", "<span style='font-size:16px;color:{$color}'>{$urljs}{$ligne["subject"]}</a></span>", "<span style='font-size:16px;color:{$color}'>{$urljs}{$ligne["size"]}</a></span>", "<center style='font-size:16px;color:{$color}'>{$delete}</a></center>"));
    }
    echo json_encode($data);
}
function interfaces_list()
{
    $search = '%';
    $page = 1;
    $q = new postgres_sql();
    $tpl = new templates();
    $searchstring = string_to_flexPostGresquery();
    if (isset($_POST['page'])) {
        $page = $_POST['page'];
    }
    if (isset($_POST["sortname"])) {
        if ($_POST["sortname"] != null) {
            $ORDER = "ORDER BY {$_POST["sortname"]} {$_POST["sortorder"]}";
        }
    }
    if ($searchstring != null) {
        $sql = "SELECT COUNT(*) AS tcount FROM suricata_events WHERE signature='{$_GET["sig"]}' {$searchstring}";
        $ligne = pg_fetch_assoc($q->QUERY_SQL($sql));
        $total = $ligne["tcount"];
    } else {
        $sql = "SELECT COUNT(*) AS tcount FROM suricata_events signature='{$_GET["sig"]}'";
        $ligne = pg_fetch_assoc($q->QUERY_SQL($sql));
        $total = $ligne["tcount"];
    }
    $rp = 50;
    if (isset($_POST['rp'])) {
        $rp = $_POST['rp'];
    }
    $pageStart = ($page - 1) * $rp;
    $limitSql = "LIMIT {$rp} OFFSET {$pageStart}";
    $sql = "SELECT * FROM suricata_events WHERE signature='{$_GET["sig"]}' AND {$searchstring} {$ORDER} {$limitSql}";
    writelogs($sql, __FUNCTION__, __FILE__, __LINE__);
    $results = $q->QUERY_SQL($sql);
    if (!$q->ok) {
        json_error_show($q->mysql_error, 1);
    }
    $data = array();
    $data['page'] = $page;
    $data['total'] = $total;
    $data['rows'] = array();
    if (pg_num_rows($results) == 0) {
        json_error_show("No data", 1);
    }
    $severity_array[1] = "24-red.png";
    $severity_array[2] = "warning24.png";
    $severity_array[3] = "info-24.png";
    $severity_array[4] = "ok24-none.png";
    $severity_array[5] = "ok24-grey.png";
    while ($ligne = @pg_fetch_assoc($results)) {
        $color = "black";
        $icon = $severity_array[$ligne["severity"]];
        $src_ip = $ligne["src_ip"];
        $zDate = $ligne["zdate"];
        $dst_ip = $ligne["dst_ip"];
        $dst_port = $ligne["dst_port"];
        $proto = $ligne["proto"];
        $signature = $ligne["signature"];
        $xcount = $ligne["xcount"];
        $ligne2 = pg_fetch_assoc($q->QUERY_SQL("SELECT description FROM suricata_sig WHERE signature='{$signature}'"));
        if (!$q->ok) {
            $ligne2["description"] = $q->mysql_error;
        }
        $description = $ligne2["description"];
        $signature_js = "<a href=\"javascript:blur();\" \n\t\tOnClick=\"javascript:Loadjs('suricata.rule-zoom.php?sig={$signature}');\"\n\t\tstyle='font-size:16px;color:{$color};text-decoration:underline'>";
        $data['rows'][] = array('id' => $ligne['ID'], 'cell' => array("<center><img src='img/{$icon}'></center>", "<span style='font-size:16px;color:{$color}'>{$zDate}</span>", "<span style='font-size:16px;color:{$color}'>{$src_ip}</span>", "<span style='font-size:16px;color:{$color}'>{$proto} {$dst_ip}:{$dst_port}</span>", "<center style='font-size:16px;color:{$color}'>{$xcount}</center>", "<span style='font-size:16px;color:{$color}'>[{$signature_js}{$signature}</a>]: {$description}</span>"));
    }
    echo json_encode($data);
}
function items()
{
    //1.4.010916
    $t = $_GET["t"];
    $tpl = new templates();
    $MyPage = CurrentPageName();
    $q = new postgres_sql();
    $users = new usersMenus();
    $search = '%';
    $table = "smtprefused";
    $page = 1;
    $FORCE_FILTER = "";
    if (!$users->AsPostfixAdministrator) {
        if ($users->AsMessagingOrg) {
            $ldap = new clladp();
            $domains = $ldap->hash_get_domains_ou($_SESSION["ou"]);
            while (list($domain, $MAIN) = each($domains)) {
                $domain = trim(strtolower($domain));
                if ($domain == null) {
                    continue;
                }
                $FDOMS[] = "mailto LIKE '%{$domain}'";
                $FDOMS2[] = "mailfrom LIKE '%{$domain}'";
            }
            $imploded1 = @implode(" OR ", $FDOMS);
            $imploded2 = @implode(" OR ", $FDOMS2);
            $table = "(select * FROM smtprefused WHERE ({$imploded1}) OR ({$imploded2})) as t";
        }
    }
    if (isset($_POST["sortname"])) {
        if ($_POST["sortname"] != null) {
            $ORDER = "ORDER BY {$_POST["sortname"]} {$_POST["sortorder"]}";
        }
    }
    if (isset($_POST['page'])) {
        $page = $_POST['page'];
    }
    $searchstring = string_to_flexPostGresquery();
    $sql = "SELECT COUNT(*) as tcount FROM {$table} WHERE {$searchstring}";
    $ligne = pg_fetch_array($q->QUERY_SQL($sql));
    $total = $ligne["tcount"];
    if (isset($_POST['rp'])) {
        $rp = $_POST['rp'];
    }
    $pageStart = ($page - 1) * $rp;
    $limitSql = "LIMIT {$rp} OFFSET {$pageStart}";
    $sql = "SELECT *  FROM {$table} WHERE {$searchstring} {$FORCE_FILTER} {$ORDER} {$limitSql}";
    $results = $q->QUERY_SQL($sql);
    $data = array();
    $data['page'] = $page;
    $data['total'] = $total;
    $data['rows'] = array();
    if (!$q->ok) {
        json_error_show($q->mysql_error);
    }
    if (pg_num_rows($results) == 0) {
        json_error_show("no rule");
    }
    while ($ligne = pg_fetch_assoc($results)) {
        $color = "#000000";
        $zmd5 = md5(serialize($ligne));
        $data['rows'][] = array('id' => "C{$zmd5}", 'cell' => array("<span style='font-size:16px;color:{$color}'>{$ligne["zdate"]}</a></span>", "<span style='font-size:16px;color:{$color}'>{$ligne["mailfrom"]}</a></span>", "<span style='font-size:16px;color:{$color}'>{$ligne["mailto"]}</a></span>", "<span style='font-size:16px;color:{$color}'>{$ligne["ipaddr"]}</a></span>", "<span style='font-size:16px;color:{$color}'>{$ligne["hostname"]}</a></span>", "<span style='font-size:16px;color:{$color}'>{$ligne["reason"]}</a></span>"));
    }
    echo json_encode($data);
}
function search()
{
    $tpl = new templates();
    $MyPage = CurrentPageName();
    $table = "not_categorized";
    $q = new postgres_sql();
    $t = $_GET["t"];
    $total = 0;
    if (isset($_POST["sortname"])) {
        if ($_POST["sortname"] != null) {
            $ORDER = "ORDER BY {$_POST["sortname"]} {$_POST["sortorder"]}";
        }
    }
    if (isset($_POST['page'])) {
        $page = $_POST['page'];
    }
    $searchstring = string_to_flexPostGresquery();
    $sql = "SELECT COUNT(*) as tcount FROM {$table} WHERE {$searchstring}";
    $ligne = pg_fetch_assoc($q->QUERY_SQL($sql));
    if (!$q->ok) {
        json_error_show($q->mysql_error . "<br>{$sql}", 0);
    }
    $total = $ligne["tcount"];
    if (isset($_POST['rp'])) {
        $rp = $_POST['rp'];
    }
    if (!is_numeric($rp)) {
        $rp = 100;
    }
    $pageStart = ($page - 1) * $rp;
    if ($pageStart < 0) {
        $pageStart = 0;
    }
    $limitSql = "LIMIT {$rp} OFFSET {$pageStart}";
    $sql = "SELECT *  FROM {$table} WHERE {$searchstring} {$ORDER} {$limitSql}";
    $results = $q->QUERY_SQL($sql);
    if (!$q->ok) {
        json_error_show($q->mysql_error . "<br>{$sql}", 0);
    }
    $data = array();
    $data['page'] = $page;
    $data['total'] = $total;
    $data['rows'] = array();
    $CurrentPage = CurrentPageName();
    if (pg_num_rows($results) == 0) {
        json_error_show("no data");
    }
    $t = time();
    $fontsize = 22;
    $span = "<span style='font-size:{$fontsize}px'>";
    $IPTCP = new IP();
    while ($ligne = pg_fetch_assoc($results)) {
        $zmd5 = $ligne["zmd5"];
        $familysite = trim($ligne["familysite"]);
        $hits = FormatNumber($ligne["rqs"]);
        $size = FormatBytes($ligne["size"] / 1024);
        $ahref = null;
        $data['rows'][] = array('id' => $familysite, 'cell' => array("{$span}{$ahref}{$familysite}</a></span>", "{$span}{$hits}</a></span>", "{$span}{$size}</a></span>"));
    }
    echo json_encode($data);
}
function items()
{
    //1.4.010916
    $t = $_GET["t"];
    $tpl = new templates();
    $MyPage = CurrentPageName();
    $q = new postgres_sql();
    $users = new usersMenus();
    $search = '%';
    $table = "smtpstats";
    $page = 1;
    $FORCE_FILTER = "";
    if (!$users->AsPostfixAdministrator) {
        if ($users->AsMessagingOrg) {
            $ldap = new clladp();
            $domains = $ldap->hash_get_domains_ou($_SESSION["ou"]);
            while (list($domain, $MAIN) = each($domains)) {
                $domain = trim(strtolower($domain));
                if ($domain == null) {
                    continue;
                }
                $FDOMS[] = "domainto = '{$domain}'";
                $FDOMS2[] = "domainfrom = '{$domain}'";
            }
            $imploded1 = @implode(" OR ", $FDOMS);
            $imploded2 = @implode(" OR ", $FDOMS2);
            $table = "(select * FROM smtpstats WHERE ({$imploded1}) OR ({$imploded2})) as t";
        }
    }
    if (isset($_POST["sortname"])) {
        if ($_POST["sortname"] != null) {
            $ORDER = "ORDER BY {$_POST["sortname"]} {$_POST["sortorder"]}";
        }
    }
    if (isset($_POST['page'])) {
        $page = $_POST['page'];
    }
    $searchstring = string_to_flexPostGresquery();
    $sql = "SELECT COUNT(*) as tcount FROM {$table} WHERE {$searchstring}";
    $ligne = pg_fetch_array($q->QUERY_SQL($sql));
    $total = $ligne["tcount"];
    if (isset($_POST['rp'])) {
        $rp = $_POST['rp'];
    }
    $pageStart = ($page - 1) * $rp;
    $limitSql = "LIMIT {$rp} OFFSET {$pageStart}";
    $sql = "SELECT *  FROM {$table} WHERE {$searchstring} {$FORCE_FILTER} {$ORDER} {$limitSql}";
    $results = $q->QUERY_SQL($sql);
    $data = array();
    $data['page'] = $page;
    $data['total'] = $total;
    $data['rows'] = array();
    if (!$q->ok) {
        json_error_show($q->mysql_error);
    }
    if (pg_num_rows($results) == 0) {
        json_error_show("no rule");
    }
    while ($ligne = pg_fetch_assoc($results)) {
        $color = "#000000";
        $spamreport_icon = "&nbsp;";
        $zmd5 = $ligne["zmd5"];
        $icon = "ok24.png";
        $spamscore_text = null;
        $status = $tpl->_ENGINE_parse_body("{sent}");
        $subject = $ligne["subject"];
        $spamscore = $ligne["spamscore"];
        $infected = $ligne["infected"];
        $spamreport = $ligne["spamreport"];
        if (strlen($spamreport) > 20) {
            $spamreport_icon = "<center><img src='img/scripts-24.png' OnClick=\"javascript:Loadjs('{$MyPage}?spam-report-js=yes&zmd5={$zmd5}');\"></center>";
        }
        $whitelisted = intval($ligne["whitelisted"]);
        $size = FormatBytes($ligne["size"] / 1024);
        if ($spamscore > 0) {
            $spamscore_text = "&nbsp;AS: {$spamscore}";
        }
        if ($spamscore >= 5) {
            $icon = "warning24.png";
        }
        if ($spamscore >= 10) {
            $icon = "danger24.png";
        }
        if ($infected == 1) {
            $status = $status . "/" . $tpl->_ENGINE_parse_body("{infected}");
            $icon = "danger24.png";
        }
        if ($whitelisted == 1) {
            $icon = "whitelist-24.png";
        }
        $data['rows'][] = array('id' => "C{$zmd5}", 'cell' => array("<center style='font-size:13px;color:{$color}'><img src='img/{$icon}'></center>", "<center style='font-size:13px;color:{$color}'>{$spamreport_icon}</center>", "<span style='font-size:13px;color:{$color}'>{$ligne["zdate"]}</a></span>", "<span style='font-size:13px;color:{$color}'>{$ligne["mailfrom"]}</a></span>", "<span style='font-size:13px;color:{$color}'>{$ligne["mailto"]}</a></span>", "<span style='font-size:13px;color:{$color}'>{$status}{$spamscore_text}</a></span>", "<span style='font-size:13px;color:{$color}'>{$size}</a></span>", "<span style='font-size:13px;color:{$color}'>{$subject}</a></span>"));
    }
    echo json_encode($data);
}
function list1()
{
    $page = 1;
    $tpl = new templates();
    $influx = new influx();
    $q = new postgres_sql();
    $USER_FIELD = $_GET["user"];
    $search = $_GET["search"];
    if ($search == null) {
        $search = "*";
    }
    $table = "access_log";
    if (!isset($_POST["rp"])) {
        $_POST["rp"] = 100;
    }
    $from = date("Y-m-d H:i:s", strtotime("-2 hour"));
    if (isset($_POST["sortname"])) {
        if ($_POST["sortname"] != null) {
            $ORDER = "ORDER BY {$_POST["sortname"]} {$_POST["sortorder"]}";
        }
    }
    if ($GLOBALS["VERBOSE"]) {
        echo "string_to_flexPostGresquery\n";
    }
    $searchstring = string_to_flexPostGresquery();
    $searchstringORG = $searchstring;
    if ($searchstring != null) {
        $sql = "SELECT COUNT(*) as tcount FROM {$table} WHERE {$searchstring}";
        if ($GLOBALS["VERBOSE"]) {
            echo "{$sql}\n";
        }
        $ligne = @pg_fetch_assoc($q->QUERY_SQL($sql));
        if (!$q->ok) {
            json_error_show($q->mysql_error);
        }
        $total = $ligne["tcount"];
    } else {
        $sql = "SELECT COUNT(*) as tcount FROM {$table}";
        if ($GLOBALS["VERBOSE"]) {
            echo "{$sql}\n";
        }
        $ligne = @pg_fetch_assoc($q->QUERY_SQL($sql));
        $total = $ligne["tcount"];
        if (!$q->ok) {
            json_error_show($q->mysql_error);
        }
        if ($GLOBALS["VERBOSE"]) {
            echo "COUNT: {$total}\n";
        }
    }
    if (isset($_POST['rp'])) {
        $rp = $_POST['rp'];
    }
    $pageStart = ($page - 1) * $rp;
    if (is_numeric($rp)) {
        $limitSql = "LIMIT {$rp} OFFSET {$pageStart} ";
    }
    if ($searchstring != null) {
        $searchstring = " AND {$searchstring}";
    }
    $sql = "SELECT *  FROM access_log WHERE zdate > '{$from}' {$searchstring} {$ORDER} {$limitSql}";
    if ($GLOBALS["VERBOSE"]) {
        echo "{$sql}\n";
    }
    $data = array();
    $data['page'] = $page;
    $data['total'] = $total;
    $data['rows'] = array();
    $results = $q->QUERY_SQL($sql);
    if (!$q->ok) {
        json_error_show($q->mysql_error);
    }
    $SumoF = @pg_num_rows($results);
    if ($SumoF == 0) {
        json_error_show("no data {$sql}");
    }
    $c = 0;
    $fontsize = "18px";
    $color = null;
    $curday = date("Y-m-d");
    $ipClass = new IP();
    while ($ligne = pg_fetch_assoc($results)) {
        $USER = trim($ligne["userid"]);
        $size = intval($ligne["size"]);
        if ($size == 0) {
            continue;
        }
        $time = $ligne["zdate"];
        $CATEGORY = $ligne["category"];
        $SITE = $ligne["familysite"];
        $RQS = $ligne["rqs"];
        $MAC_link = null;
        $MAC = $ligne["mac"];
        $IPADDR = $ligne["ipaddr"];
        $size = FormatBytes($size / 1024);
        $RQS = FormatNumber($RQS);
        if ($ipClass->IsvalidMAC($MAC)) {
            $MAC_link = "<a href=\"javascript:blur();\"\n\t\t\tOnClick=\"javascript:Loadjs('squid.nodes.php?node-infos-js=yes&MAC=" . urlencode($MAC) . "');\"\n\t\t\t\t\tstyle='font-size:{$fontsize};text-decoration:underline'>\n\t\t\t\t\t";
        }
        $time = str_replace($curday, "", $time);
        if ($ipClass->isValid($SITE)) {
            $SITE = "<a href=\"https://db-ip.com/{$SITE}\" style='text-decoration:underline;color:black' target=_new>{$SITE}</a>";
        }
        $data['rows'][] = array('id' => $c, 'cell' => array("<span style='font-size:{$fontsize}'>{$time}</a></span>", "<span style='font-size:{$fontsize}'>{$SITE}</a></span>", "<span style='font-size:{$fontsize}'>{$CATEGORY}</a></span>", "<span style='font-size:{$fontsize}'>{$MAC_link}{$MAC}</a></span>", "<span style='font-size:{$fontsize}'>{$IPADDR}</a></span>", "<span style='font-size:{$fontsize}'>{$USER}</a></span>", "<span style='font-size:{$fontsize}'>{$RQS}</a></span>", "<span style='font-size:{$fontsize}'>{$size}</a></span>"));
    }
    echo json_encode($data);
    return;
}