function save()
{
    $q = new mysql_meta();
    $f = array();
    $f = explode("\n", $_POST["domains"]);
    while (list($index, $line) = each($f)) {
        $line = trim(strtolower($line));
        if ($line == null) {
            continue;
        }
        $line = mysql_escape_string2($line);
        $md5 = md5($line);
        $n[] = "('{$md5}','{$line}')";
    }
    $q->CheckTables();
    $q->QUERY_SQL("TRUNCATE TABLE `squid_whitelists`");
    if (count($n) > 0) {
        $q->QUERY_SQL("INSERT IGNORE INTO `squid_whitelists` (`zMD5`,`pattern`) VALUES " . @implode(",", $n));
        if (!$q->ok) {
            echo $q->mysql_error;
            return;
        }
    }
    $sock = new sockets();
    $EnableArticaMetaServer = intval($sock->GET_INFO("EnableArticaMetaServer"));
    if ($EnableArticaMetaServer == 0) {
        return;
    }
    $sock->getFrameWork("artica.php?meta-proxy-config=yes");
}
function popup()
{
    $artica_meta = new mysql_meta();
    $LicenseInfos = $artica_meta->LicenseInfos($_GET["uuid"]);
    $page = CurrentPageName();
    $tpl = new templates();
    $FINAL_TIME = 0;
    if (isset($LicenseInfos["FINAL_TIME"])) {
        $FINAL_TIME = intval($LicenseInfos["FINAL_TIME"]);
    }
    $LICT = "Community Edition";
    if ($LicenseInfos["CORP_LICENSE"]) {
        $LICT = "Entreprise Edition";
    }
    if ($LicenseInfos["ExpiresSoon"] > 0) {
        if ($LicenseInfos["ExpiresSoon"] < 31) {
            $LICT = "<span style='color:red'>{trial_mode}</span>";
        }
    }
    if ($FINAL_TIME > 0) {
        $ExpiresSoon = intval(time_between_day_Web($FINAL_TIME));
        if ($ExpiresSoon < 7) {
            $ExpiresSoon_text = "<strong style='color:red;font-size:16px'>&nbsp;{ExpiresSoon}</strong>";
        }
        $licenseTime = "\n\t\t\t<tr>\n\t\t\t\t<td class=legend style='font-size:24px'>{expiredate}:</td>\n\t\t\t\t<td style='font-size:24px'>" . $tpl->time_to_date($FINAL_TIME) . " (" . distanceOfTimeInWords(time(), $FINAL_TIME) . "{$ExpiresSoon_text})</td>\n\t\t\t\t\t</tr>";
    }
    if (is_numeric($LicenseInfos["TIME"])) {
        $tt = distanceOfTimeInWords($LicenseInfos["TIME"], time());
        $last_access = "\n\t\t<tr>\n\t\t<td class=legend style='font-size:24px'>{last_update}:</td>\n\t\t<td style='font-size:24px'>{since} {$tt}</td>\n\t\t</tr>";
    }
    $html = "<div style='font-size:30px'>{$LICT}</div><div style='width:98%' class=form>\n<table style='width:100%'>\n\t</tr>\n\t{$last_access}\n\t<tr>\n\t\t<td class=legend style='font-size:24px'>{company}:</td>\n\t\t<td><span style='font-size:24px;font-weight:bold'>{$LicenseInfos["COMPANY"]}</span></td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td class=legend style='font-size:24px'>{your_email_address}:</td>\n\t\t\t\t<td><span style='font-size:24px;font-weight:bold'>{$LicenseInfos["EMAIL"]}</span></td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td class=legend style='font-size:24px'>{nb_employees}:</td>\n\t\t\t\t<td><span style='font-size:24px;font-weight:bold'>" . FormatNumber($LicenseInfos["EMPLOYEES"]) . "</span></td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td class=legend style='font-size:24px'>{license_number}:</td>\n\t\t\t\t<td style='font-size:24px'>{$LicenseInfos["license_number"]}</td>\n\t\t\t</tr>\n\t\t<tr>\n\t\t\t<td class=legend style='font-size:24px'>{license_status}:</td>\n\t\t\t<td style='font-size:24px;'>{$LicenseInfos["license_status"]}</td>\n\t\t</tr>\n\t\t{$licenseTime}\n\t</table>\n</td>\n</table></div>";
    echo $tpl->_ENGINE_parse_body($html);
}
Example #3
0
function tabs()
{
    $page = CurrentPageName();
    $tpl = new templates();
    $artica_meta = new mysql_meta();
    $isProxyAll = $artica_meta->isProxyAll();
    if ($isProxyAll > 0) {
        $array["proxys"] = "Proxys ({$isProxyAll})";
    }
    $array["hosts"] = '{hosts}';
    $array["groups"] = '{groups2}';
    if ($isProxyAll > 0) {
        if ($artica_meta->COUNT_ROWS("hotspot_members") > 0) {
            $array["hotspot_members"] = '{hotspot_members}';
        }
    }
    if ($isProxyAll > 0) {
        $array["categories"] = '{your_categories}';
        $array["acls"] = '{acls}';
    }
    $array["server-params"] = "{main_parameters}";
    //$array["uploads"]='{uploads}';
    while (list($num, $ligne) = each($array)) {
        if ($num == "proxys") {
            $html[] = $tpl->_ENGINE_parse_body("<li><a href=\"artica-meta.proxys.php\"><span style='font-size:22px'>{$ligne}</span></a></li>\n");
            continue;
        }
        if ($num == "hosts") {
            $html[] = $tpl->_ENGINE_parse_body("<li><a href=\"artica-meta.hosts.php\"><span style='font-size:22px'>{$ligne}</span></a></li>\n");
            continue;
        }
        if ($num == "categories") {
            $html[] = $tpl->_ENGINE_parse_body("<li><a href=\"artica-meta.proxys.categories.php\"><span style='font-size:22px'>{$ligne}</span></a></li>\n");
            continue;
        }
        if ($num == "groups") {
            $html[] = $tpl->_ENGINE_parse_body("<li><a href=\"artica-meta.groups.php\"><span style='font-size:22px'>{$ligne}</span></a></li>\n");
            continue;
        }
        if ($num == "server-params") {
            $html[] = $tpl->_ENGINE_parse_body("<li><a href=\"artica-meta.php?parameters=yes\"><span style='font-size:22px'>{$ligne}</span></a></li>\n");
            continue;
        }
        if ($num == "hotspot_members") {
            $html[] = $tpl->_ENGINE_parse_body("<li><a href=\"artica-meta.hotspot_members.php\"><span style='font-size:22px'>{$ligne}</span></a></li>\n");
            continue;
        }
        if ($num == "uploads") {
            $html[] = $tpl->_ENGINE_parse_body("<li><a href=\"artica-meta.uploads.php\"><span style='font-size:22px'>{$ligne}</span></a></li>\n");
            continue;
        }
        if ($num == "acls") {
            $html[] = $tpl->_ENGINE_parse_body("<li><a href=\"artica-meta.proxy.acls.php\"><span style='font-size:22px'>{$ligne}</span></a></li>\n");
            continue;
        }
        $html[] = $tpl->_ENGINE_parse_body("<li><a href=\"{$page}?{$num}=yes&uuid=" . urlencode($_GET["uuid"]) . "\"><span style='font-size:22px'>{$ligne}</span></a></li>\n");
    }
    echo build_artica_tabs($html, "meta-start", 1490);
}
function js()
{
    $page = CurrentPageName();
    $tpl = new templates();
    header("content-type: application/x-javascript");
    $q = new mysql_meta();
    $title = $tpl->_ENGINE_parse_body("{SQUID_STATS1}: " . $q->uuid_to_host($_GET["uuid"]));
    $html = "YahooWin4('990','{$page}?tabs=yes&uuid={$_GET["uuid"]}','{$title}');";
    echo $html;
}
function js()
{
    header("content-type: application/x-javascript");
    $tpl = new templates();
    $title = $tpl->_ENGINE_parse_body("{events}");
    $page = CurrentPageName();
    $artica_meta = new mysql_meta();
    $hostname = $artica_meta->uuid_to_host($_GET["uuid"]);
    echo "YahooWin3('850','{$page}?uuid=" . urlencode($_GET["uuid"]) . "','{$hostname}')";
}
function meta_groups()
{
    $q = new mysql_meta();
    $metagroups[0] = "{none}";
    $sql = "SELECT * FROM metagroups ORDER BY groupname";
    $results = $q->QUERY_SQL($sql);
    while ($ligne = mysql_fetch_assoc($results)) {
        $metagroups[$ligne["ID"]] = $ligne["groupname"];
    }
    return $metagroups;
}
Example #7
0
function IMPORT_COMMUNITY_POST_VISITED()
{
    $q = new mysql_meta();
    $array = unserialize(base64_decode($_POST["COMMUNITY_POST_VISITED"]));
    $prefix = "INSERT IGNORE INTO dansguardian_community_nocat(zmd5,uuid,sitename,HitsNumber,familysite) VALUES " . @implode(",", $array);
    $q->QUERY_SQL($prefix);
    if (!$q->ok) {
        $q->meta_admin_mysql(0, "MySQL error", $q->mysql_error, __FILE__, __LINE__);
        return;
    }
    echo "<ANSWER>OK</ANSWER>";
}
function Disable()
{
    $uuid = $_POST["uuid"];
    $meta = new mysql_meta();
    if (intval($_POST["gpid"]) > 0) {
        if (!$meta->CreateOrder_group(intval($_POST["gpid"]), "PROXY_ENABLE_URGENCY", array())) {
            echo "Failed\nFunction:" . __FUNCTION__ . "\nLine:" . __LINE__ . "\nFile:" . basename(__FILE__);
        }
        return;
    }
    if (!$meta->CreateOrder($uuid, "PROXY_ENABLE_URGENCY", array())) {
        echo "Failed\nFunction:" . __FUNCTION__ . "\nLine:" . __LINE__ . "\nFile:" . basename(__FILE__);
    }
}
function Save()
{
    $policy_id = $_POST["policy-id"];
    unset($_POST["policy-id"]);
    $q = new mysql_meta();
    while (list($key, $val) = each($_POST)) {
        if (!$q->SET($key, $val, $policy_id)) {
            echo $q->mysql_error;
            return;
        }
    }
    $sock = new sockets();
    $sock->getFrameWork("artica.php?apply-policy=yes&policy-id={$policy_id}");
}
function showlist()
{
    $page = 1;
    $q = new mysql_squid_builder();
    $table = "CACHED_SITES";
    if ($_GET["uuid"] != null) {
        $q = new mysql_meta();
        $table = "{$_GET["uuid"]}_CACHED_SITES";
    }
    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_flexquery();
    if ($searchstring != null) {
        $sql = "SELECT COUNT(*) as TCOUNT FROM {$table} WHERE 1 {$searchstring}";
        $ligne = mysql_fetch_array($q->QUERY_SQL($sql, "artica_events"));
        $total = $ligne["TCOUNT"];
    } else {
        $sql = "SELECT COUNT(*) as TCOUNT FROM {$table}";
        $ligne = mysql_fetch_array($q->QUERY_SQL($sql, "artica_events"));
        $total = $ligne["TCOUNT"];
    }
    if (isset($_POST['rp'])) {
        $rp = $_POST['rp'];
    }
    if (!is_numeric($rp)) {
        $rp = 50;
    }
    $pageStart = ($page - 1) * $rp;
    $limitSql = "LIMIT {$pageStart}, {$rp}";
    $sql = "SELECT *  FROM {$table} WHERE 1 {$searchstring} {$ORDER} {$limitSql}";
    if (isset($_GET["verbose"])) {
        echo "<hr><code>{$sql}</code></hr>";
    }
    $results = $q->QUERY_SQL($sql, "artica_events");
    if (!$q->ok) {
        json_error_show($q->mysql_error, 1);
    }
    if (mysql_num_rows($results) == 0) {
        json_error_show("{$table} no data", 1);
    }
    $data = array();
    $data['page'] = 1;
    $data['total'] = $total;
    $data['rows'] = array();
    //if(mysql_num_rows($results)==0){$data['rows'][] = array('id' => $ligne[time()],'cell' => array($sql,"", "",""));}
    while ($ligne = mysql_fetch_assoc($results)) {
        $familysite = $ligne["familysite"];
        $size = FormatBytes($ligne["size"] / 1024);
        $data['rows'][] = array('id' => md5(serialize($ligne)), 'cell' => array("<span style='font-size:18px'>{$familysite}</span>", "<span style='font-size:18px'>{$size}</span>"));
    }
    echo json_encode($data);
}
Example #11
0
function Save()
{
    $q = new mysql_meta();
    if (!$q->FIELD_EXISTS("metahosts", "cloneFrom")) {
        $q->QUERY_SQL("ALTER TABLE `metahosts` ADD `cloneFrom` VARCHAR(90),ADD INDEX ( `cloneFrom` )");
        if (!$q->ok) {
            echo $q->mysql_error . "\n";
            return;
        }
    }
    $q->QUERY_SQL("UPDATE metahosts SET cloneFrom='{$_POST["cloneFrom"]}' WHERE uuid='{$_POST["uuid"]}'");
    if (!$q->ok) {
        echo $q->mysql_error;
        return;
    }
    $sock = new sockets();
    $sock->getFrameWork("artica.php?meta-metaclient-clonesource=yes&uuid={$_POST["uuid"]}");
}
function popup()
{
    $tpl = new templates();
    $page = CurrentPageName();
    $q = new mysql_meta();
    $zdate = $tpl->javascript_parse_text("{time}");
    $ipaddr = $tpl->javascript_parse_text("{ipaddr}");
    $mac = $tpl->javascript_parse_text("{MAC}");
    $familysite = $tpl->javascript_parse_text("{sitename}");
    $uid = $tpl->javascript_parse_text("{members}");
    $size = $tpl->javascript_parse_text("{size}");
    $hits = $tpl->javascript_parse_text("{hits}");
    $t = time();
    $title = $tpl->javascript_parse_text("{this_hour}:" . $q->uuid_to_host($_GET["uuid"]));
    $suffix = suffix();
    $html = "\n\t<table class='flexRT{$t}' style='display:none' id='flexRT{$t}'></table>\n\t<script>\n\tfunction StartLogsSquidTable{$t}(){\n\n\t\$('#flexRT{$t}').flexigrid({\n\turl: '{$page}?list=yes{$suffix}',\n\tdataType: 'json',\n\tcolModel : [\n\t{display: '{$zdate}', name : 'zDate', width : 61, sortable : true, align: 'left'},\n\t{display: '{$uid}', name : 'uid', width :112, sortable : true, align: 'left'},\n\t{display: '{$mac}', name : 'mac', width :142, sortable : true, align: 'left'},\n\t{display: '{$ipaddr}', name : 'ipaddr', width :142, sortable : true, align: 'left'},\n\t{display: '{$familysite}', name : 'sitename', width : 169, sortable : true, align: 'left'},\n\t{display: '{$hits}', name : 'hits', width : 66, sortable : true, align: 'right'},\n\t{display: '{$size}', name : 'size', width : 142, sortable : true, align: 'right'},\n\t],\n\n\tsearchitems : [\n\t{display: '{$uid}', name : 'uid'},\n\t{display: '{$mac}', name : 'mac'},\n\t{display: '{$ipaddr}', name : 'ipaddr'},\n\t{display: '{$familysite}', name : 'sitename'},\n\t],\n\tsortname: 'zDate',\n\tsortorder: 'desc',\n\tusepager: true,\n\ttitle: '<span style=font-size:18px>{$title}</span>',\n\tuseRp: true,\n\trp: 100,\n\tshowTableToggleBtn: false,\n\twidth: '99%',\n\theight: 450,\n\tsingleSelect: true,\n\trpOptions: [10, 20, 30, 50,100,200,500,1000,1500]\n\n});\n\n}\n\nStartLogsSquidTable{$t}();\n</script>\n";
    echo $html;
}
Example #13
0
function GetGroups($uuid)
{
    $q = new mysql_meta();
    $f = array();
    $sql = "SELECT metagroups.groupname,\n\tmetahosts.uuid,metagroups_link.zmd5\n\tFROM metahosts,metagroups_link,metagroups WHERE\n\tmetagroups_link.uuid=metahosts.uuid\n\tAND metagroups.ID=metagroups_link.gpid\n\tAND metahosts.uuid='{$uuid}' ORDER BY metagroups.groupname";
    $results = $q->QUERY_SQL($sql);
    if (!$q->ok) {
        return "<li>{$q->mysql_error}</li>";
    }
    while ($ligne = mysql_fetch_assoc($results)) {
        $f[] = "<li><a href=\"javascript:blur()\" OnClick=\"javascript:Loadjs('artica-meta.menus.php?gpid=1');\"\n\t\tstyle='text-decoration:underline'>{$ligne["groupname"]}</a>";
    }
    if (count($f) > 0) {
        return "<ul style='margin-top:10px'>" . @implode("", $f) . "</ul>";
    }
}
function Replicate_policy_to_group($gpid, $content)
{
    $q = new mysql_meta();
    $sql = "SELECT uuid FROM metagroups_link WHERE gpid='{$gpid}'";
    $results = $q->QUERY_SQL($sql);
    if (!$q->ok) {
        meta_admin_mysql(0, "Fatal error: Mysql Error", $q->mysql_error . "\n{$sql}", __FILE__, __LINE__);
        return;
    }
    $md5Content = md5($content);
    $content = mysql_escape_string2($content);
    if (mysql_num_rows($results) == 0) {
        return;
    }
    while ($ligne = mysql_fetch_assoc($results)) {
        $uuid = $ligne["uuid"];
        $md5 = md5("{$md5Content}{$uuid}");
        $q->QUERY_SQL("DELETE FROM `policies_storage` WHERE `zmd5`='{$md5}'");
        $sql = "INSERT IGNORE INTO `policies_storage` (zmd5,uuid,policy_content) VALUES ('{$md5}','{$uuid}','{$content}')";
        $q->QUERY_SQL($sql);
        if (!$q->ok) {
            meta_admin_mysql(0, "Fatal error: Mysql Error", $q->mysql_error . "\n{$sql}", __FILE__, __LINE__);
            continue;
        }
        $q->CreateOrder($uuid, "POLICY", array("VALUE" => $md5));
    }
}
function search()
{
    $MyPage = CurrentPageName();
    $page = CurrentPageName();
    $tpl = new templates();
    $sock = new sockets();
    $q = new mysql_meta();
    $table = "policies";
    $searchstring = string_to_flexquery();
    $page = 1;
    if (isset($_POST["sortname"])) {
        if ($_POST["sortname"] != null) {
            $ORDER = "ORDER BY {$_POST["sortname"]} {$_POST["sortorder"]}";
        }
    }
    if (isset($_POST['page'])) {
        $page = $_POST['page'];
    }
    if ($searchstring != null) {
        $sql = "SELECT COUNT( * ) AS tcount FROM {$table} WHERE 1 {$searchstring}";
        $ligne = mysql_fetch_array($q->QUERY_SQL($sql));
        if (!$q->ok) {
            json_error_show("Mysql Error [" . __LINE__ . "]: {$q->mysql_error}.<br>{$sql}", 1);
        }
        $total = $ligne["tcount"];
    } else {
        $total = $q->COUNT_ROWS($table);
    }
    if (isset($_POST['rp'])) {
        $rp = $_POST['rp'];
    }
    if (!is_numeric($rp)) {
        $rp = 50;
    }
    $pageStart = ($page - 1) * $rp;
    $limitSql = "LIMIT {$pageStart}, {$rp}";
    $sql = "SELECT * FROM {$table} WHERE 1 {$searchstring} {$ORDER} {$limitSql} ";
    $results = $q->QUERY_SQL($sql);
    if (!$q->ok) {
        if ($q->mysql_error != null) {
            json_error_show(date("H:i:s") . "<br>SORT:{$_POST["sortname"]}:<br>Mysql Error [L." . __LINE__ . "]: {$q->mysql_error}<br>{$sql}", 1);
        }
    }
    if (mysql_num_rows($results) == 0) {
        json_error_show("no data", 1);
    }
    $data = array();
    $data['page'] = $page;
    $data['total'] = $total;
    $data['rows'] = array();
    $fontsize = "18";
    $style = "<span style='font-size:{$fontsize}px'>";
    $free_text = $tpl->javascript_parse_text("{free}");
    $computers = $tpl->javascript_parse_text("{computers}");
    $overloaded_text = $tpl->javascript_parse_text("{overloaded}");
    while ($ligne = mysql_fetch_assoc($results)) {
        $icon_warning_32 = "warning32.png";
        $icon_red_32 = "32-red.png";
        $icon = "ok-32.png";
        $icon_disabled = "ok32-grey.png";
        if ($switch == 1) {
            $icon_warning_32 = "22-warn.png";
            $icon_red_32 = "22-red.png";
            $icon = "ok22.png";
        }
        $policy_name = utf8_encode($ligne["policy_name"]);
        $policy_type = $tpl->_ENGINE_parse_body($q->policy_type[$ligne["policy_type"]]);
        $delete = imgsimple("delete-32.png", null, "Loadjs('{$MyPage}?delete-js=yes&ID={$ligne["ID"]}')");
        if ($_GET["function"] != null) {
            $delete = imgsimple("arrow-right-32.png", null, "{$_GET["function"]}('{$ligne["ID"]}')");
        }
        if (trim($policy_type) == null) {
            $policy_type = "{policy_type} ID:{$ligne["policy_type"]}";
        }
        $ligneCount = mysql_fetch_array($q->QUERY_SQL("SELECT COUNT(zmd5) as tcount FROM metapolicies_link WHERE `policy-id`='{$ligne["ID"]}'"));
        $CountDeGroup = $ligneCount["tcount"];
        $js = "<a href=\"javascript:blur();\" OnClick=\"javascript:Loadjs('{$MyPage}?policy-js=yes&ID={$ligne["ID"]}');\" style='text-decoration:underline'>";
        $cell = array();
        $cell[] = "<img src=\"img/{$icon}\">";
        $cell[] = "{$style}{$js}{$policy_name}</a></span>";
        $cell[] = "{$style}{$policy_type}</span>";
        $cell[] = "{$style}{$CountDeGroup}</span>";
        $cell[] = "{$style}{$delete}</span>";
        $data['rows'][] = array('id' => $ligne['uuid'], 'cell' => $cell);
    }
    echo json_encode($data);
}
function content_search()
{
    $MyPage = CurrentPageName();
    $page = CurrentPageName();
    $tpl = new templates();
    $sock = new sockets();
    $q = new mysql_meta();
    $table = "snapshots";
    $database = null;
    $ID = $_GET["ID"];
    if (!$q->TABLE_EXISTS($table, $database)) {
        json_error_show("no data - no table");
    }
    $searchstring = string_to_flexquery();
    $page = 1;
    $q = new mysql_meta();
    $sql = "SELECT `content` FROM {$table} WHERE ID='{$ID}'";
    $ligne = mysql_fetch_array($q->QUERY_SQL($sql, $database));
    $MAIN = unserialize($ligne["content"]);
    $size_content = strlen($ligne["content"]);
    if (!is_array($MAIN)) {
        json_error_show("no data ID:{$ID} Size:{$size_content}");
    }
    $searchstring = string_to_flexregex();
    $total = count($MAIN);
    if (isset($_POST['rp'])) {
        $rp = $_POST['rp'];
    }
    if (!is_numeric($rp)) {
        $rp = 50;
    }
    $pageStart = ($page - 1) * $rp;
    $limitSql = "LIMIT {$pageStart}, {$rp}";
    $data = array();
    $data['page'] = $page;
    $data['total'] = $total;
    $data['rows'] = array();
    $fontsize = "22";
    $style = " style='font-size:{$fontsize}px'";
    $styleHref = " style='font-size:{$fontsize}px;text-decoration:underline'";
    $c = 0;
    while (list($filename, $size) = each($MAIN)) {
        $sizeText = "{$size} Bytes";
        if ($size > 1024) {
            $sizeText = FormatBytes($size / 1024);
        }
        if ($searchstring != null) {
            if (!preg_match("#{$searchstring}#i", $filename . "{$sizeText}")) {
                continue;
            }
        }
        $c++;
        $key = md5($filename);
        $size = FormatBytes($size / 1024);
        $cell = array();
        $cell[] = "<span {$style}>{$filename}</a></span>";
        $cell[] = "<span {$style}>{$sizeText}</a></span>";
        $data['rows'][] = array('id' => $key, 'cell' => $cell);
    }
    $data['total'] = $c;
    echo json_encode($data);
}
function page()
{
    $page = CurrentPageName();
    $tpl = new templates();
    $t = time();
    $new_group = $tpl->javascript_parse_text("{new_group}");
    $groups = $tpl->javascript_parse_text("{groups2}");
    $memory = $tpl->javascript_parse_text("{memory}");
    $load = $tpl->javascript_parse_text("{load}");
    $version = $tpl->javascript_parse_text("{version}");
    $servername = $tpl->javascript_parse_text("{servername2}");
    $status = $tpl->javascript_parse_text("{status}");
    $events = $tpl->javascript_parse_text("{events}");
    $global_whitelist = $tpl->javascript_parse_text("{whitelist} (Meta)");
    $policies = $tpl->javascript_parse_text("{policies}");
    $orders = $tpl->javascript_parse_text("{orders}");
    $restore = $tpl->javascript_parse_text("{restore}");
    $create_a_snapshot = $tpl->javascript_parse_text("{create_a_snapshot}");
    $link_all_hosts = $tpl->javascript_parse_text("{link_all_hosts}");
    $link_all_hosts_ask = $tpl->javascript_parse_text("{link_all_hosts_ask}");
    $date = $tpl->javascript_parse_text("{date}");
    $size = $tpl->javascript_parse_text("{subject}");
    $title = $tpl->javascript_parse_text("{system_health_checking}");
    $download = $tpl->javascript_parse_text("{download2}");
    $delete_all = $tpl->javascript_parse_text("{empty}");
    $t = time();
    $delete = "{display: 'delete', name : 'icon3', width : 35, sortable : false, align: 'left'},";
    $categorysize = 387;
    $tag = $tpl->javascript_parse_text("{tag}");
    $q = new mysql_meta();
    $ligne = mysql_fetch_array($q->QUERY_SQL("SELECT policy_name,policy_type FROM policies WHERE ID='{$_GET["policy-id"]}'"));
    $groupname = $tpl->javascript_parse_text($ligne["policy_name"]);
    $buttons = "\n\tbuttons : [\n\t{name: '<strong style=font-size:18px>{$delete_all}</strong>', bclass: 'Delz', onpress : run{$t}},\n\t\n\t\n\t],";
    $html = "\n\n\t<table class='ARTICA_HEALTH_PERFS_TABLE' style='display: none' id='ARTICA_HEALTH_PERFS_TABLE' style='width:100%'></table>\n\t<script>\n\t\$(document).ready(function(){\n\t\$('#ARTICA_HEALTH_PERFS_TABLE').flexigrid({\n\turl: '{$page}?search=yes',\n\tdataType: 'json',\n\tcolModel : [\n\t{display: '<span style=font-size:18px>{$date}</span>', name : 'zDate', width : 538, sortable : true, align: 'left'},\n\t{display: '<span style=font-size:18px>{$size}</span>', name : 'subject', width : 505, sortable : true, align: 'right'},\n\t{display: '<span style=font-size:18px>{$download}</span>', name : 'download', width : 150, sortable : false, align: 'center'},\n\t{display: '&nbsp;', name : 'delete', width : 70, sortable : false, align: 'center'},\n\t\n\n\t],\n\t{$buttons}\n\tsearchitems : [\n\t{display: '{$date}', name : 'zDate'},\n\t\n\n\t],\n\tsortname: 'zDate',\n\tsortorder: 'desc',\n\tusepager: true,\n\ttitle: '<strong style=font-size:30px>{$title}</strong>',\n\tuseRp: true,\n\trpOptions: [10, 20, 30, 50,100,200],\n\trp:50,\n\tshowTableToggleBtn: false,\n\twidth: '99%',\n\theight: 400,\n\tsingleSelect: true\n\n});\n});\n\nfunction run{$t}(){\n\tvar XHR = new XHRConnection();\n\tXHR.appendData('deleteall','yes');\n\tXHR.sendAndLoad('{$page}', 'POST',xLinkEdHosts{$t});\n}\n\nvar xLinkEdHosts{$t}= function (obj) {\n\tvar res=obj.responseText;\n\tif (res.length>3){ alert(res); return; }\n\t\$('#ARTICA_HEALTH_PERFS_TABLE').flexReload();\n\t\n}\t\t\t\n\t\n\nfunction LinkEdHosts{$t}(uuid){\n\tvar XHR = new XHRConnection();\n\tXHR.appendData('link-host',uuid);\n\tXHR.appendData('gpid','{$_GET["ID"]}');\n\tXHR.sendAndLoad('{$page}', 'POST',xLinkEdHosts{$t});\n}\n\nfunction LinkHostsAll{$t}(){\n\tif(!confirm('{$link_all_hosts_ask}')){return;}\n\tvar XHR = new XHRConnection();\n\tXHR.appendData('link-all','{$_GET["ID"]}');\n\tXHR.sendAndLoad('{$page}', 'POST',xLinkEdHosts{$t});\n}\n\nfunction Orders{$t}(){\n\tLoadjs('artica-meta.menus.php?gpid={$_GET["ID"]}');\n}\n\nfunction Upload{$t}(){\n\tLoadjs('snapshots.upload.php');\n}\n\n</script>";
    echo $html;
}
function meta_server_status()
{
    include_once 'ressources/class.mysql-meta.inc';
    $page = CurrentPageName();
    $ini = new Bs_IniHandler();
    $users = new usersMenus();
    $tpl = new templates();
    $sock = new sockets();
    $icon = "disks-128-ok.png";
    $GotoMeta = "GoToMeta()";
    if (!$users->AsArticaMetaAdmin) {
        $GotoMeta = "blur();";
    }
    $c = 0;
    $q = new mysql_meta();
    $results = $q->QUERY_SQL("SELECT * FROM metahosts");
    if (!$q->ok) {
        $err[] = proxy_status_warning("MySQL Error !!!", "{$q->mysql_error}", "blur();");
    }
    $ArticaMetaPooling = intval($sock->GET_INFO("ArticaMetaPooling"));
    $ArticaMetaUseSendClient = intval($sock->GET_INFO("ArticaMetaUseSendClient"));
    $ArticaLinkAutoconnect = intval($sock->GET_INFO("ArticaLinkAutoconnect"));
    $MetaUfdbArticaVer = intval($sock->GET_INFO("MetaUfdbArticaVer"));
    if ($ArticaMetaPooling == 0) {
        $ArticaMetaPooling = 15;
    }
    while ($ligne = mysql_fetch_assoc($results)) {
        $load = $ligne["load"];
        $uuid = $ligne["uuid"];
        $PROXYEMERG = $ligne["PROXYEMERG"];
        $hostname = $ligne["hostname"];
        if (strpos($hostname, ".") > 0) {
            $xtr = explode(".", $hostname);
            $hostname = $xtr[0];
        }
        $CPU_NUMBER_MAX = $ligne["CPU_NUMBER"] + 1.5;
        $updated = $ligne["updated"];
        $mem_perc = $ligne["mem_perc"];
        $WINDOWSAD = $ligne["WINDOWSAD"];
        $ADEMERG = intval($ligne["ADEMERG"]);
        if ($load > $CPU_NUMBER_MAX) {
            $err[] = proxy_status_warning("{$hostname}: {overloaded} {$load}", "{$hostname}", "Loadjs('artica-meta.cpustats.php?js=yes&uuid={$uuid}');");
        }
        if ($PROXYEMERG == 1) {
            $err[] = proxy_status_warning("{$hostname}: {proxy_in_emergency_mode}", "{$hostname}", "Loadjs('artica-meta.urgency.php?uuid={$uuid}');");
        }
        if ($WINDOWSAD == 1) {
            if ($ADEMERG == 1) {
                $err[] = proxy_status_warning("{$hostname}: {activedirectory_emergency_mode}", "{$hostname}", "Loadjs('artica-meta.menus.php?activedirectory-emergency-disable-js=yes&uuid={$uuid}&gpid=0');");
            }
        }
        if ($mem_perc > 80) {
            $mem_total = FormatBytes($ligne["mem_total"]);
            $alerts[] = status_important_event("{$hostname}: {memory_exceed_80} &laquo;{$mem_perc}%/{$mem_total}&raquo;", "{$hostname}", "Loadjs('artica-meta.cpustats.php?js=yes&uuid={$uuid}');");
        }
        $xtime = strtotime($updated);
        $diff = time_diff_min($xtime);
        $Difftext = distanceOfTimeInWords($xtime, time(), true);
        if ($diff > $ArticaMetaPooling * 4) {
            $err[] = proxy_status_warning("{$hostname}: {did_not_talk_with_meta}", "{since} {$Difftext}", "Loadjs('artica-meta.cpustats.php?js=yes&uuid={$uuid}');");
        }
        $c++;
    }
    if (count($alerts) > 0) {
        $icon = "disks-128-warn.png";
    }
    if (count($err) > 0) {
        $icon = "disks-128-red.png";
    }
    $master_version = @file_get_contents("VERSION");
    $html = "\n\t<table style='width:100%'>\n\t<tr>\n\t<td valign='top' style='width:128px' >\n\t<img src='img/{$icon}'>\n\t</td>\n\t<td>\n\t<table style='width:100%'>\n\t<tr>\n\t<td style='font-size:30px'>\n\t" . $tpl->_ENGINE_parse_body(texttooltip("Artica Meta", "Artica Meta", "{$GotoMeta}")) . "\n\t<div style='width:100%;text-align:right'><span style='font-size:16px'>{version}:{$master_version}</div>\n\t</td>\n\t</tr>\n\t<tr>\n\t<td colspan=2>&nbsp;</td>\n\t</tR>\n\t<tr>\n\t\t<td style='font-size:26px'>\n\t\t\t<a href=\"javascript:blur();\"\n\t\t\tOnClick=\"javascript:{$GotoMeta}\"\n\t\t\tstyle='text-decoration:underline'>{servers}: " . FormatNumber($c) . "</a>\n\t\t</td>\n\t</tr>\n\t<tr>\n\t" . @implode("", $err) . "\n\t" . @implode("", $alerts) . "\n\t</table>\n</td>\n</tr>\n</table>\n";
    $html = $tpl->_ENGINE_parse_body($html);
    return $html;
}
function SearchComputers()
{
    $tpl = new templates();
    $MyPage = CurrentPageName();
    $q = new mysql_meta();
    $fontsize = "14px";
    $cs = 0;
    $page = 1;
    if (isset($_POST['rp'])) {
        $rp = $_POST['rp'];
    }
    $pageStart = ($page - 1) * $rp;
    $limitSql = "LIMIT {$pageStart}, {$rp}";
    $_POST["query"] = trim($_POST["query"]);
    $FORCE = 1;
    if ($_GET["uuid"] != null) {
        $FORCE = "uuid='{$_GET["uuid"]}'";
    }
    $search = '%';
    $table = "networks_hosts";
    $page = 1;
    $total = 0;
    if ($q->COUNT_ROWS($table) == 0) {
        json_error_show("no data", 1);
    }
    if (isset($_POST["sortname"])) {
        if ($_POST["sortname"] != null) {
            $ORDER = "ORDER BY {$_POST["sortname"]} {$_POST["sortorder"]}";
        }
    }
    if (isset($_POST['page'])) {
        $page = $_POST['page'];
    }
    if (isset($_POST['rp'])) {
        $rp = $_POST['rp'];
    }
    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_flexquery();
    if ($searchstring != null) {
        $sql = "SELECT COUNT(*) as TCOUNT FROM `{$table}` WHERE {$FORCE}  {$searchstring}";
        $ligne = mysql_fetch_array($q->QUERY_SQL($sql, "artica_events"));
        if (!$q->ok) {
            if (preg_match("#marked as crashed#", $q->mysql_error)) {
                $q->QUERY_SQL("DROP TABLE `{$table}`", "artica_events");
            }
        }
        $total = $ligne["TCOUNT"];
    } else {
        if (strlen($FORCE) > 2) {
            $sql = "SELECT COUNT(*) as TCOUNT FROM `{$table}` WHERE {$FORCE}";
            $ligne = mysql_fetch_array($q->QUERY_SQL($sql, "artica_events"));
            if (!$q->ok) {
                if (preg_match("#marked as crashed#", $q->mysql_error)) {
                    $q->QUERY_SQL("DROP TABLE `{$table}`", "artica_events");
                }
            }
            $total = $ligne["TCOUNT"];
        } else {
            $total = $q->COUNT_ROWS($table, "artica_events");
        }
    }
    if (isset($_POST['rp'])) {
        $rp = $_POST['rp'];
    }
    if (!is_numeric($rp)) {
        $rp = 50;
    }
    $pageStart = ($page - 1) * $rp;
    $limitSql = "LIMIT {$pageStart}, {$rp}";
    $sql = "SELECT *  FROM `{$table}` WHERE {$FORCE} {$searchstring} {$ORDER} {$limitSql}";
    $results = $q->QUERY_SQL($sql, "artica_events");
    if (!$q->ok) {
        if (preg_match("#marked as crashed#", $q->mysql_error)) {
            $q->QUERY_SQL("DROP TABLE `{$table}`", "artica_events");
        }
    }
    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 (mysql_num_rows($results) == 0) {
        json_error_show("no data");
    }
    $uuid = urlencode($_GET["uuid"]);
    while ($ligne = mysql_fetch_array($results, MYSQL_ASSOC)) {
        if ($ligne["OSNAME"] == "Unknown") {
            $ligne["OSNAME"] = null;
        }
        $cs++;
        $macenc = urlencode($ligne["MAC"]);
        $jslink = "<a href=\"javascript:blur();\" OnClick=\"javascript:Loadjs('{$MyPage}?mac-js={$macenc}&uuid={$uuid}&t={$_GET["t"]}');\"\n\t\tstyle='font-size:{$fontsize};text-decoration:underline'>";
        $data['rows'][] = array('id' => md5(serialize($ligne)), 'cell' => array("<span style='font-size:{$fontsize}'>{$jslink}{$ligne["hostname"]}</a></span>", "<span style='font-size:{$fontsize}'>{$jslink}{$ligne["IPADDR"]}</a></span>", "<span style='font-size:{$fontsize}'>{$jslink}{$ligne["MAC"]}</a></span>", "<span style='font-size:{$fontsize}'>{$jslink}{$ligne["OSNAME"]}</a></span>", "<span style='font-size:{$fontsize}'>{$jslink}{$ligne["username"]}</a></span>", ""));
    }
    echo json_encode($data);
}
function showlist(){
	$page=1;
	$q=new mysql_squid_builder();
	$tablesrc="WEEK_RTTH";
	
	if($_GET["uuid"]<>null){
		$q=new mysql_meta();
		$tablesrc="{$_GET["uuid"]}_WEEK_RTTH";
	}
	
	$table="(SELECT SUM(size) as size,COUNT(MAC) as members,familysite FROM `$tablesrc` GROUP BY familysite) 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_flexquery();
	if($searchstring<>null){
		$sql="SELECT COUNT(*) as TCOUNT FROM $table WHERE 1 $searchstring";
		$ligne=mysql_fetch_array($q->QUERY_SQL($sql,"artica_events"));
		$total = $ligne["TCOUNT"];
		
	}else{
		$sql="SELECT COUNT(*) as TCOUNT FROM $table";
		$ligne=mysql_fetch_array($q->QUERY_SQL($sql,"artica_events"));
		$total = $ligne["TCOUNT"];
	}
	
	if (isset($_POST['rp'])) {$rp = $_POST['rp'];}
	if(!is_numeric($rp)){$rp=50;}
	
	
	$pageStart = ($page-1)*$rp;
	$limitSql = "LIMIT $pageStart, $rp";
	
	$sql="SELECT *  FROM $table WHERE 1 $searchstring $ORDER $limitSql";
	
	if(isset($_GET["verbose"])){echo "<hr><code>$sql</code></hr>";}
	$results = $q->QUERY_SQL($sql,"artica_events");
	
	if(!$q->ok){json_error_show($q->mysql_error,1);}

	if(mysql_num_rows($results)==0){
		json_error_show("$table no data",1);
	}
	
	
	
	
		$data = array();
		$data['page'] = 1;
		$data['total'] = mysql_num_rows($results);
		$data['rows'] = array();
	
		//if(mysql_num_rows($results)==0){$data['rows'][] = array('id' => $ligne[time()],'cell' => array($sql,"", "",""));}
	
		while ($ligne = mysql_fetch_assoc($results)) {
			$ipaddr=$ligne["ipaddr"];
			$mac=$ligne["MAC"];
			$familysite=$ligne["familysite"];
			$uid=$ligne["uid"];
			$size=FormatBytes($ligne["size"]/1024);
			$macenc=urlencode($mac);
			$category=$ligne["category"];
			if($category<>null){$category=" <i>($category)</i>";}
			$url="<a href=\"javascript:blur();\" 
			OnClick=\"javascript:Loadjs('squid.website-stats.currentmonth.php?field=familysite&value=$familysite',true);\"
			style='font-size:22px;text-decoration:underline'>";
			
		$data['rows'][] = array(
		'id' => md5(serialize($ligne)),
		'cell' => array("<span style='font-size:22px'>$url$familysite</a>$category</span>",
				"<span style='font-size:22px'>{$ligne["members"]}</span>",
				"<span style='font-size:22px'>$size</span>" )
		);
	}
	
	
	echo json_encode($data);	
}
function search()
{
    $MyPage = CurrentPageName();
    $page = CurrentPageName();
    $tpl = new templates();
    $sock = new sockets();
    $q = new mysql_meta();
    $table = "metagroups";
    if (!$q->TABLE_EXISTS("metagroups_link")) {
        $q->CheckTables();
    }
    $table = "(SELECT metahosts.hostname,metahosts.hostag,\n\t\t\tmetahosts.uuid,metagroups_link.zmd5 \n\t\t\tFROM metahosts,metagroups_link WHERE\n\t\t\tmetagroups_link.uuid=metahosts.uuid\n\t\t\tAND metagroups_link.gpid={$_GET["ID"]}) as t";
    $searchstring = string_to_flexquery();
    $page = 1;
    if (isset($_POST["sortname"])) {
        if ($_POST["sortname"] != null) {
            $ORDER = "ORDER BY `{$_POST["sortname"]}` {$_POST["sortorder"]}";
        }
    }
    if (isset($_POST['page'])) {
        $page = $_POST['page'];
    }
    $sql = "SELECT COUNT( * ) AS tcount FROM {$table} WHERE 1 {$searchstring}";
    $ligne = mysql_fetch_array($q->QUERY_SQL($sql));
    if (!$q->ok) {
        json_error_show("Mysql Error [" . __LINE__ . "]: <br>{$q->mysql_error}.<br>{$sql}", 1);
    }
    $total = $ligne["tcount"];
    if (isset($_POST['rp'])) {
        $rp = $_POST['rp'];
    }
    if (!is_numeric($rp)) {
        $rp = 50;
    }
    $pageStart = ($page - 1) * $rp;
    $limitSql = "LIMIT {$pageStart}, {$rp}";
    $sql = "SELECT * FROM {$table} WHERE 1 {$searchstring} {$ORDER} {$limitSql} ";
    $results = $q->QUERY_SQL($sql);
    if (!$q->ok) {
        if ($q->mysql_error != null) {
            json_error_show(date("H:i:s") . "<br>SORT:{$_POST["sortname"]}:<br>Mysql Error [L." . __LINE__ . "]: {$q->mysql_error}<br>{$sql}", 1);
        }
    }
    if (mysql_num_rows($results) == 0) {
        json_error_show("no data", 1);
    }
    $data = array();
    $data['page'] = $page;
    $data['total'] = $total;
    $data['rows'] = array();
    $fontsize = "22";
    $style = " style='font-size:{$fontsize}px'";
    $styleHref = " style='font-size:{$fontsize}px;text-decoration:underline'";
    $free_text = $tpl->javascript_parse_text("{free}");
    $computers = $tpl->javascript_parse_text("{computers}");
    $overloaded_text = $tpl->javascript_parse_text("{overloaded}");
    $orders_text = $tpl->javascript_parse_text("{orders}");
    $directories_monitor = $tpl->javascript_parse_text("{directories_monitor}");
    while ($ligne = mysql_fetch_assoc($results)) {
        $LOGSWHY = array();
        $overloaded = null;
        $loadcolor = "black";
        $StatHourColor = "black";
        $ColorTime = "black";
        $uuid = $ligne["uuid"];
        $hostname = $ligne["hostname"];
        $hostag = utf8_encode($ligne["hostag"]);
        $zmd5 = $ligne["zmd5"];
        $icon_warning_32 = "warning32.png";
        $icon_red_32 = "32-red.png";
        $icon = "ok-32.png";
        $urijs = "Loadjs('artica-meta.menus.php?js=yes&uuid={$uuid}');";
        $link = "<a href=\"javascript:blur();\" OnClick=\"javascript:{$urijs}\" {$styleHref}>";
        $delete = imgtootltip("delete-32.png", null, "Loadjs('{$MyPage}?unlink-js={$zmd5}')");
        $cell = array();
        $cell[] = "<span {$style}>{$link}{$hostname}</a></span><br>{$uuid}";
        $cell[] = "<span {$style}>{$hostag}</a></span>";
        $cell[] = "{$delete}";
        $data['rows'][] = array('id' => $ligne['uuid'], 'cell' => $cell);
    }
    echo json_encode($data);
}
function table_list()
{
    $tpl = new templates();
    $MyPage = CurrentPageName();
    $q = new mysql_meta();
    $fontsize = "16px";
    $cs = 0;
    $page = 1;
    if (isset($_POST['rp'])) {
        $rp = $_POST['rp'];
    }
    if (!is_numeric($rp)) {
        $rp = 50;
    }
    $pageStart = ($page - 1) * $rp;
    $limitSql = "LIMIT {$pageStart}, {$rp}";
    $_POST["query"] = trim($_POST["query"]);
    $FORCE = "uuid='{$_GET["uuid"]}'";
    $search = '%';
    $table = "philesight";
    if ($_GET["dev"] != null) {
        $FORCE = " ((partition='{$_GET["dev"]}') OR (hd='{$_GET["dev"]}')) AND (uuid='{$_GET["uuid"]}')";
    }
    $page = 1;
    if (!$q->TABLE_EXISTS($table, "artica_backup")) {
        $q->check_storage_table();
    }
    if (!$q->TABLE_EXISTS($table, "artica_backup")) {
        json_error_show("{$table} no such table", 1);
    }
    $total = 0;
    if ($q->COUNT_ROWS($table, "artica_backup") == 0) {
        json_error_show("no data", 1);
    }
    $searchstring = string_to_flexquery();
    if ($searchstring != null) {
        $sql = "SELECT COUNT(*) as TCOUNT FROM `{$table}` WHERE {$FORCE}  {$searchstring}";
        $ligne = mysql_fetch_array($q->QUERY_SQL($sql, "artica_backup"));
        if (!$q->ok) {
            if (preg_match("#marked as crashed#", $q->mysql_error)) {
                $q->QUERY_SQL("DROP TABLE `{$table}`", "artica_events");
            }
        }
        $total = $ligne["TCOUNT"];
    } else {
        $total = $q->COUNT_ROWS($table, "artica_backup");
    }
    if (isset($_POST['rp'])) {
        $rp = $_POST['rp'];
    }
    if (!is_numeric($rp)) {
        $rp = 50;
    }
    $pageStart = ($page - 1) * $rp;
    $limitSql = "LIMIT {$pageStart}, {$rp}";
    if (isset($_POST["sortname"])) {
        if ($_POST["sortname"] != null) {
            $ORDER = "ORDER BY {$_POST["sortname"]} {$_POST["sortorder"]}";
        }
    }
    $sql = "SELECT *  FROM `{$table}` WHERE {$FORCE} {$searchstring} {$ORDER} {$limitSql}";
    $results = $q->QUERY_SQL($sql, "artica_backup");
    if (!$q->ok) {
        if (preg_match("#marked as crashed#", $q->mysql_error)) {
            $q->QUERY_SQL("DROP TABLE `{$table}`", "artica_events");
        }
    }
    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 (mysql_num_rows($results) == 0) {
        json_error_show("no data");
    }
    $uuid = urlencode($_GET["uuid"]);
    while ($ligne = mysql_fetch_array($results, MYSQL_ASSOC)) {
        $color = "black";
        $icon = "&nbsp;";
        $directory = $ligne["directory"];
        $md5 = md5($directory);
        $partition = $ligne["partition"];
        $hd = $ligne["hd"];
        $maxtime = $ligne["maxtime"];
        $lastscan = $ligne["lastscan"];
        $USED = $ligne["USED"];
        $md5 = $ligne["zmd5"];
        $FREEMB = $ligne["FREEMB"];
        if ($lastscan > 0) {
            $lastscan = date("Y-m-d H:i:s", $lastscan);
        }
        $FREEMB = FormatBytes($FREEMB * 1024);
        $directoryenc = urlencode($directory);
        $jslink = "<a href=\"javascript:blur();\"\n\tOnClick=\"javascript:Loadjs('{$MyPage}?directory-js=yes&directory={$directoryenc}');\"\n\tstyle='font-size:{$fontsize};text-decoration:underline;color:{$color}'>";
        $distance = $tpl->_ENGINE_parse_body(distanceOfTimeInWords($ligne["lastscan"], time(), true));
        $icon = imgsimple("graph-32.png", null, "Loadjs('{$MyPage}?graph-js={$directoryenc}&uuid={$_GET["uuid"]}&md5={$md5}')");
        $delete = imgsimple("delete-32.png", null, "Loadjs('{$MyPage}?delete-js={$directoryenc}&uuid={$_GET["uuid"]}')");
        $data['rows'][] = array('id' => md5(serialize($ligne)), 'cell' => array("<span style='font-size:{$fontsize};color:{$color}'>{$jslink}{$lastscan}</a></span><br><i>{$distance}</i>", "<span style='font-size:{$fontsize};color:{$color}'>{$jslink}{$directory}</a></span>", "<span style='font-size:{$fontsize};color:{$color}'>{$jslink}{$partition}</a></span>", "<span style='font-size:{$fontsize};color:{$color}'>{$jslink}{$hd}</a></span>", "<span style='font-size:{$fontsize};color:{$color}'>{$jslink}{$USED}%</a></span>", "<span style='font-size:{$fontsize};color:{$color}'>{$jslink}{$FREEMB}</a></span>", "<span style='font-size:{$fontsize};color:{$color}'>{$icon}</a></span>"));
    }
    echo json_encode($data);
}
function ParseDB_FILE($path, $uuid = null, $asmeta = false)
{
    $unix = new unix();
    if (!is_file($path)) {
        return;
    }
    echo "Open {$path}\n";
    $db_con = dba_open($path, "r", "db4");
    if (!$db_con) {
        if ($asmeta) {
            meta_admin_mysql(1, "DB open failed {$path}", null, __FILE__, __LINE__);
        }
        echo "DB open failed\n";
        die;
    }
    $mainkey = dba_firstkey($db_con);
    while ($mainkey != false) {
        $val = 0;
        $data = unserialize(dba_fetch($mainkey, $db_con));
        $mainkey = dba_nextkey($db_con);
        if (!is_array($data)) {
            continue;
        }
        $q = new mysql_squid_builder();
        $qCommon = new mysql_squid_builder();
        if ($uuid != null) {
            $q = new mysql_stats($uuid);
        }
        if ($asmeta) {
            $q = new mysql_meta();
        }
        if (!isset($data["HOURLY"])) {
            continue;
        }
        if (!isset($data["WWW"])) {
            continue;
        }
        $category = null;
        $ipaddr = mysql_escape_string2($data["IPADDR"]);
        if (isset($data["MAC"])) {
            $mac = mysql_escape_string2($data["MAC"]);
        }
        $uid = mysql_escape_string2($data["UID"]);
        $familysite = mysql_escape_string2($data["WWW"]);
        if (isset($data["category"])) {
            $category = mysql_escape_string2($data["category"]);
        }
        if ($uid == null) {
            $uid = $qCommon->UID_FROM_MAC($data["MAC"]);
        }
        if ($uid == null) {
            $uid = $qCommon->UID_FROM_IP($data["IPADDR"]);
        }
        $uid = mysql_escape_string2($uid);
        $length = strlen($ipaddr) + strlen($mac) + strlen($uid) + strlen($familysite);
        if ($length == 0) {
            continue;
        }
        while (list($day, $array) = each($data["HOURLY"])) {
            while (list($hour, $size) = each($array)) {
                $md5 = md5("'{$ipaddr}','{$mac}','{$uid}','{$familysite}','{$day}','{$hour}','{$size}','{$category}'");
                $wwwUH[] = "('{$md5}','{$ipaddr}','{$mac}','{$uid}','{$familysite}','{$day}','{$hour}','{$size}','{$category}')";
                if ($GLOBALS["VERBOSE"]) {
                    echo "('{$md5}','{$ipaddr}','{$mac}','{$uid}','{$familysite}','{$day}','{$hour}','{$size}','{$category}')\n";
                }
            }
        }
    }
    dba_close($db_con);
    $TABLE_WEEK_RTTH = "WEEK_RTTH";
    $ENGINE = "MEMORY";
    if ($asmeta) {
        $TABLE_WEEK_RTTH = "{$uuid}_WEEK_RTTH";
        $ENGINE = "MYISAM";
    }
    if ($asmeta) {
        xmeta_events("DROP TABLE `{$TABLE_WEEK_RTTH}`", __FUNCTION__, __FILE__, __LINE__);
    }
    $q->QUERY_SQL("DROP TABLE `{$TABLE_WEEK_RTTH}`");
    if ($asmeta) {
        xmeta_events("CREATE TABLE `{$TABLE_WEEK_RTTH}`", __FUNCTION__, __FILE__, __LINE__);
    }
    $q->QUERY_SQL("CREATE TABLE IF NOT EXISTS `{$TABLE_WEEK_RTTH}` (\n\t\t\t`zmd5` varchar(90) NOT NULL,\n\t\t\t`familysite` varchar(128) NOT NULL,\n\t\t\t`ipaddr` varchar(50) NOT NULL DEFAULT '',\n\t\t\t`day` smallint(2) NOT NULL,\n\t\t\t`hour` smallint(2) NOT NULL,\n\t\t\t`uid` varchar(128) NOT NULL,\n\t\t\t`MAC` varchar(20) NOT NULL,\n\t\t\t`size` BIGINT UNSIGNED NOT NULL,\n\t\t\t`category` varchar(90) NOT NULL,\n\t\t\tPRIMARY KEY `zmd5` (`zmd5`),\n\t\t\tKEY `familysite` (`familysite`),\n\t\t\tKEY `ipaddr` (`ipaddr`),\n\t\t\tKEY `uid` (`uid`),\n\t\t\tKEY `category` (`category`),\n\t\t\tKEY `hour` (`hour`),\n\t\t\tKEY `day` (`day`),\n\t\t\tKEY `MAC` (`MAC`)\n\t) ENGINE={$ENGINE};");
    if (!$q->ok) {
        if ($asmeta) {
            meta_admin_mysql(1, "MySQL error", $q->mysql_error, __FILE__, __LINE__);
        }
        echo $q->mysql_error;
        return;
    }
    $q->QUERY_SQL("INSERT IGNORE INTO `{$TABLE_WEEK_RTTH}` ( `zmd5`,`ipaddr`,`MAC`,`uid`,familysite,`day`,`hour`,`size`,`category`) VALUES " . @implode(",", $wwwUH));
    if (!$q->ok) {
        if ($asmeta) {
            meta_admin_mysql(1, "MySQL error", $q->mysql_error, __FILE__, __LINE__);
        }
        echo $q->mysql_error;
        return;
    }
    if ($asmeta) {
        xmeta_events("Success parsing {$path} adding " . count($wwwUH) . " elements", __FUNCTION__, __FILE__, __LINE__);
        return;
    }
    $sock = new sockets();
    $EnableArticaMetaClient = intval($sock->GET_INFO("EnableArticaMetaClient"));
    $EnableSquidRemoteMySQL = intval($sock->GET_INFO("EnableSquidRemoteMySQL"));
    if ($EnableSquidRemoteMySQL == 1) {
        return;
    }
    if ($EnableArticaMetaClient == 0) {
        return;
    }
    $DIR_TEMP = $unix->TEMP_DIR();
    if (!$unix->compress($path, "{$DIR_TEMP}/SQUID_QUOTASIZE.gz")) {
        meta_admin_mysql(1, "Unable to compress {$path}", null, __FILE__, __LINE__);
        @unlink("{$DIR_TEMP}/SQUID_QUOTASIZE.gz");
        return;
    }
    $artica_meta = new artica_meta();
    if (!$artica_meta->SendFile("{$DIR_TEMP}/SQUID_QUOTASIZE.gz", "SQUID_QUOTASIZE")) {
        meta_admin_mysql(1, "Unable to updload {$DIR_TEMP}/SQUID_QUOTASIZE.gz", null, __FILE__, __LINE__);
    }
    @unlink("{$DIR_TEMP}/SQUID_QUOTASIZE.gz");
}
function showlist(){
	$page=1;
	$q=new mysql_squid_builder();
	$table=date("Ymd")."_daccess";

	if($_GET["uuid"]<>null){
		$q=new mysql_meta();
		$table="{$_GET["uuid"]}_CACHED_SITES";
	}



	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_flexquery();
	if($searchstring<>null){
		$sql="SELECT COUNT(*) as TCOUNT FROM $table WHERE 1 $searchstring";
		$ligne=mysql_fetch_array($q->QUERY_SQL($sql,"artica_events"));
		$total = $ligne["TCOUNT"];

	}else{
		$sql="SELECT COUNT(*) as TCOUNT FROM $table";
		$ligne=mysql_fetch_array($q->QUERY_SQL($sql,"artica_events"));
		$total = $ligne["TCOUNT"];
	}

	if (isset($_POST['rp'])) {$rp = $_POST['rp'];}
	if(!is_numeric($rp)){$rp=50;}


	$pageStart = ($page-1)*$rp;
	$limitSql = "LIMIT $pageStart, $rp";



	$sql="SELECT *  FROM $table WHERE 1 $searchstring $ORDER $limitSql";

	if(isset($_GET["verbose"])){echo "<hr><code>$sql</code></hr>";}
	$results = $q->QUERY_SQL($sql,"artica_events");

	if(!$q->ok){json_error_show($q->mysql_error,1);}

	if(mysql_num_rows($results)==0){
		json_error_show("$table no data",1);
	}




	$data = array();
	$data['page'] = 1;
	$data['total'] = mysql_num_rows($results);
	$data['rows'] = array();

	//if(mysql_num_rows($results)==0){$data['rows'][] = array('id' => $ligne[time()],'cell' => array($sql,"", "",""));}

	while ($ligne = mysql_fetch_assoc($results)) {
		$familysite=$ligne["familysite"];
		$size=FormatBytes($ligne["size"]/1024);
		$hits=FormatNumber($ligne["hits"]);
		
		$macenc=urlencode($ligne["MAC"]);
		$macuri="<a href=\"javascript:blur();\" 
		Onclick=\"javascript:Loadjs('squid.nodes.php?node-infos-js=yes&MAC=$macenc',true);\"
		style='text-decoration:underline;font-size:18px'>";

		if(strlen($ligne["hour"])==1){$ligne["hour"]="0{$ligne["hour"]}";}
			
		$data['rows'][] = array(
				'id' => md5(serialize($ligne)),
				'cell' => array(
						"<span style='font-size:16px'>{$ligne["hour"]}h</span>",
						"<span style='font-size:16px'>$familysite</span>",
						"<span style='font-size:16px'>{$ligne["category"]}</span>",
						"<span style='font-size:16px'>{$ligne["uid"]}</span>",
						"<span style='font-size:16px'>{$ligne["ipaddr"]}</span>",
						"<span style='font-size:16px'>$macuri{$ligne["MAC"]}</a></span>",
						"<span style='font-size:16px'>$hits</span>",
						"<span style='font-size:16px'>$size</span>"
				)
		);

	}


	echo json_encode($data);
}
function add_node()
{
    $sock = new sockets();
    $ArticaMetaAddNewServ = unserialize($sock->GET_INFO("ArticaMetaAddNewServ"));
    $ArticaMetaHost = $ArticaMetaAddNewServ["ArticaMetaHost"];
    $ArticaMetaPort = $ArticaMetaAddNewServ["ArticaMetaPort"];
    $ArticaMetaUsername = $ArticaMetaAddNewServ["ArticaMetaUsername"];
    $ArticaMetaPassword = $ArticaMetaAddNewServ["ArticaMetaPassword"];
    $change_uuid = $ArticaMetaAddNewServ["change_uuid"];
    echo "ArticaMetaHost.........: {$ArticaMetaHost}\n";
    echo "ArticaMetaPort.........: {$ArticaMetaPort}\n";
    echo "ArticaMetaUsername.....: {$ArticaMetaUsername}\n";
    echo "Testing authentication...\n";
    add_node_progress("Authenticate to {$ArticaMetaHost}:{$ArticaMetaPort}", 10);
    $array["username"] = $ArticaMetaUsername;
    $array["password"] = $ArticaMetaPassword;
    $ident = urlencode(base64_encode(serialize($array)));
    $curl = new ccurl("https://{$ArticaMetaHost}:{$ArticaMetaPort}/artica.meta.listener.php?test-local-ident={$ident}");
    $curl->NoHTTP_POST = true;
    $curl->NoLocalProxy();
    $curl->Timeout = 120;
    if (!$curl->get()) {
        echo @implode("\n", $curl->errors);
        add_node_progress("{$curl->error}", 110);
        die;
    }
    if (!preg_match("#<ARTICA_META>(.+?)</ARTICA_META>#is", $curl->data, $re)) {
        echo "Expected <ARTICA_META>Someting...</ARTICA_META>";
        add_node_progress("Communication: {failed}", 110);
        die;
    }
    if ($re[1] != "SUCCESS") {
        add_node_progress("Authenticate: {failed}", 110);
        die;
    }
    echo "Testing authentication - success -...\n";
    if ($change_uuid == 1) {
        echo "Ask to remote server to change UUID...\n";
        add_node_progress("{change_uuid}", 20);
        $curl = new ccurl("https://{$ArticaMetaHost}:{$ArticaMetaPort}/artica.meta.listener.php?local-ident={$ident}&chuuid=yes");
        $curl->NoHTTP_POST = true;
        $curl->NoLocalProxy();
        $curl->Timeout = 120;
        if (!$curl->get()) {
            echo @implode("\n", $curl->errors);
            add_node_progress("{$curl->error}", 110);
            die;
        }
        if (!preg_match("#<ARTICA_META>(.+?):(.+?)</ARTICA_META>#is", $curl->data, $re)) {
            add_node_progress("{change_uuid}: Communication: {failed}", 110);
            die;
        }
        add_node_progress("{change_uuid}:{$re[2]} {success}", 25);
        echo "Ask to remote server to change UUID - success -...\n";
    }
    echo "Ask UUID to remote server...\n";
    add_node_progress("{uuid}:", 30);
    $curl = new ccurl("https://{$ArticaMetaHost}:{$ArticaMetaPort}/artica.meta.listener.php?local-ident={$ident}&GetYourUUID=yes");
    $curl->NoHTTP_POST = true;
    $curl->NoLocalProxy();
    $curl->Timeout = 120;
    if (!$curl->get()) {
        echo @implode("\n", $curl->errors);
        add_node_progress("{$curl->error}", 110);
        die;
    }
    if (!preg_match("#<ARTICA_META>(.+?):(.+?)</ARTICA_META>#is", $curl->data, $re)) {
        add_node_progress("{uuid}: Communication: {failed}", 110);
        die;
    }
    $RESULT = $re[1];
    $uuid = $re[2];
    echo "UUID results:\n---------------------------------------------\n{$uuid}\n{$RESULT}\n---------------------------------------------\n";
    if ($RESULT == "SUCCESS") {
        add_node_progress("{uuid}: {$uuid} {success}", 35);
    } else {
        add_node_progress("{uuid}: {failed}", 110);
        return;
    }
    echo "Ask to remote server to register to Artica Meta server ...\n";
    add_node_progress("{order}: -> {register}", 50);
    $ArticaMetaServerUsername = $sock->GET_INFO("ArticaMetaServerUsername");
    $ArticaMetaServerPassword = $sock->GET_INFO("ArticaMetaServerPassword");
    $ArticaMetaAddNewServ["ArticaMetaUsername"] = $ArticaMetaServerUsername;
    $ArticaMetaAddNewServ["ArticaMetaPassword"] = $ArticaMetaServerPassword;
    if ($GLOBALS["VERBOSE"]) {
        $verbosed = "&verbose=yes";
    }
    $ArticaMetaAddNewServ_enc = urlencode(base64_encode(serialize($ArticaMetaAddNewServ)));
    $curl = new ccurl("https://{$ArticaMetaHost}:{$ArticaMetaPort}/artica.meta.listener.php?local-ident={$ident}&registerby={$ArticaMetaAddNewServ_enc}{$verbosed}");
    $curl->NoHTTP_POST = true;
    $curl->NoLocalProxy();
    $curl->Timeout = 120;
    if (!$curl->get()) {
        echo @implode("\n", $curl->errors);
        add_node_progress("{$curl->error}", 110);
        die;
    }
    if ($GLOBALS["VERBOSE"]) {
        echo "***********************************\n{$curl->data}\n***********************************\n";
    }
    if (!preg_match("#<ARTICA_META>(.+?):(.+?)</ARTICA_META>#is", $curl->data, $re)) {
        add_node_progress("{register}: Communication: {failed}", 110);
        die;
    }
    $RESULT = $re[1];
    $DATA = $re[2];
    echo $DATA;
    echo "Register results:\n---------------------------------------------\n{$DATA}\n{$RESULT}\n---------------------------------------------\n";
    if ($RESULT == "SUCCESS") {
        add_node_progress("{register}: {success}", 99);
    } else {
        add_node_progress("{register}: {failed}", 110);
        return;
    }
    $artica_meta = new mysql_meta();
    add_node_progress("{waiting}: {$ArticaMetaHost} {to_return_back}", 79);
    for ($i = 0; $i < 20; $i++) {
        if ($artica_meta->isExists($uuid)) {
            break;
        }
        echo "Waiting {$ArticaMetaHost} {$uuid} to register to Artica Meta...{$i}/20 second\n";
        $prc = 79 + $i;
        add_node_progress("{waiting}: {$ArticaMetaHost} {to_return_back}", $prc);
        sleep(1);
    }
    if ($artica_meta->isExists($uuid)) {
        $hostname = $artica_meta->uuid_to_host($uuid);
        add_node_progress("{register}: {success} `{$hostname}`", 100);
        return;
    }
    add_node_progress("{register}: {failed}", 110);
}
function ident()
{
    if (isset($_SERVER["REMOTE_ADDR"])) {
        $IPADDR = $_SERVER["REMOTE_ADDR"];
    }
    if (isset($_SERVER["HTTP_X_REAL_IP"])) {
        $IPADDR = $_SERVER["HTTP_X_REAL_IP"];
    }
    if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
        $IPADDR = $_SERVER["HTTP_X_FORWARDED_FOR"];
    }
    $GLOBALS["CLIENT_META_IP"] = $IPADDR;
    $sock = new sockets();
    $ARRAY = unserialize(base64_decode($_GET["ident"]));
    $EnableArticaMetaServer = intval($sock->GET_INFO("EnableArticaMetaServer"));
    $ArticaMetaServerUsername = trim(strtolower($sock->GET_INFO("ArticaMetaServerUsername")));
    $ArticaMetaServerPassword = $sock->GET_INFO("ArticaMetaServerPassword");
    if ($EnableArticaMetaServer == 0) {
        die;
    }
    $UUID = $ARRAY["uuid"];
    $GLOBALS["UUID"] = $UUID;
    $hostname = $ARRAY["hostname"];
    $version = $ARRAY["version"];
    $username = trim(strtolower($ARRAY["username"]));
    $password = $ARRAY["password"];
    if ($ArticaMetaServerUsername != $username) {
        writelogs_meta("Checking identification FROM {$IPADDR} failed, wrong username or password", __FUNCTION__, __FILE__, __LINE__);
        die;
    }
    if ($ArticaMetaServerPassword != $password) {
        writelogs_meta("Checking identification FROM {$IPADDR} failed, wrong username or password", __FUNCTION__, __FILE__, __LINE__);
        die;
    }
    $q = new mysql_meta();
    if (!$q->TABLE_EXISTS("metahosts")) {
        if (!$q->CheckTables()) {
            echo $q->mysql_error;
        }
    }
    if (isset($ARRAY["ARTICA_META_EVENTS"])) {
        echo __LINE__ . " ** ARTICA_META_EVENTS:" . strlen($ARRAY["ARTICA_META_EVENTS"]) . " bytes\n";
        $qev = new mysql();
        $qev->QUERY_SQL($ARRAY["ARTICA_META_EVENTS"], "artica_events");
        if (!$qev->ok) {
            echo "*********************************\n\${$qev->mysql_error}\n*********************************\n";
        }
    } else {
        echo __LINE__ . " ** ARTICA_META_EVENTS: NONE\n";
    }
    $CPU = $ARRAY["CPU"];
    $load = $ARRAY["load"];
    $pourc_mem = $ARRAY["memory"]["ram"]["percent"];
    $ram_used = $ARRAY["memory"]["ram"]["used"];
    $ram_total = $ARRAY["memory"]["ram"]["total"];
    $ALL_DISKS_STATUS = mysql_escape_string2($ARRAY["ALL_DISKS_STATUS"]);
    echo "ALL_DISKS_STATUS:{$ALL_DISKS_STATUS}\n";
    $sql = "SELECT hostname FROM metahosts WHERE uuid='{$UUID}'";
    $ligne = mysql_fetch_array($q->QUERY_SQL($sql));
    $currentDate = date("Y-m-d H:i:s");
    $squid = 0;
    $squidver = null;
    if (isset($ARRAY["SQUID"])) {
        $squid = $ARRAY["SQUID"];
    }
    if (isset($ARRAY["squidver"])) {
        $squidver = $ARRAY["squidver"];
    }
    if (trim($ligne["hostname"]) == null) {
        $q->QUERY_SQL("INSERT IGNORE INTO `metahosts` (uuid,hostname,public_ip,updated,blacklisted,`version`,`CPU_NUMBER`\n\t\t\t\t,`load`,`mem_perc`,`mem_used`,mem_total,disks,PROXY,squidver) \n\t\t\t\tVALUES('{$UUID}','{$hostname}','{$IPADDR}','{$currentDate}',0,'{$version}','{$CPU}'\n\t\t\t\t,'{$load}','{$pourc_mem}','{$ram_used}','{$ram_total}','{$ALL_DISKS_STATUS}','{$squid}','{$squidver}')");
        if (!$q->ok) {
            echo $q->mysql_error;
            return false;
        }
    } else {
        $q->QUERY_SQL("UPDATE `metahosts` SET public_ip='{$IPADDR}', `hostname`='{$hostname}',\n\t\t\t\t`updated`='{$currentDate}',`version`='{$version}',\n\t\t\t\t`CPU_NUMBER`='{$CPU}',\n\t\t\t\t`load`='{$load}',\n\t\t\t\t`mem_perc`='{$pourc_mem}',\n\t\t\t\t`mem_used`='{$ram_used}',\n\t\t\t\tmem_total='{$ram_total}',\n\t\t\t\t`disks`='{$ALL_DISKS_STATUS}',\n\t\t\t\tPROXY='{$squid}',\n\t\t\t\tsquidver='{$squidver}'\n\t\t\t\tWHERE uuid='{$UUID}'");
        if (!$q->ok) {
            if (preg_match("#Unknown column#", $q->mysql_error)) {
                $q->CheckTables();
            }
        }
        if (!$q->ok) {
            echo $q->mysql_error;
            return false;
        }
    }
    return true;
}
Example #27
0
function search()
{
    $MyPage = CurrentPageName();
    $page = CurrentPageName();
    $tpl = new templates();
    $sock = new sockets();
    $q = new mysql_meta();
    $ArticaMetaPooling = intval($sock->GET_INFO("ArticaMetaPooling"));
    $ArticaMetaUseSendClient = intval($sock->GET_INFO("ArticaMetaUseSendClient"));
    if ($ArticaMetaPooling == 0) {
        $ArticaMetaPooling = 15;
    }
    $switch = intval($_GET["switch"]);
    $table = "metahosts";
    $searchstring = string_to_flexquery();
    $page = 1;
    if (isset($_POST["sortname"])) {
        if ($_POST["sortname"] != null) {
            $ORDER = "ORDER BY `{$_POST["sortname"]}` {$_POST["sortorder"]}";
        }
    }
    if (isset($_POST['page'])) {
        $page = $_POST['page'];
    }
    if ($searchstring != null) {
        $sql = "SELECT COUNT( * ) AS tcount FROM {$table} WHERE 1 {$searchstring}";
        $ligne = mysql_fetch_array($q->QUERY_SQL($sql));
        if (!$q->ok) {
            json_error_show("Mysql Error [" . __LINE__ . "]: <br>{$q->mysql_error}.<br>{$sql}", 1);
        }
        $total = $ligne["tcount"];
    } else {
        $total = $q->COUNT_ROWS($table);
    }
    if (isset($_POST['rp'])) {
        $rp = $_POST['rp'];
    }
    if (!is_numeric($rp)) {
        $rp = 50;
    }
    $pageStart = ($page - 1) * $rp;
    $limitSql = "LIMIT {$pageStart}, {$rp}";
    $sql = "SELECT * FROM {$table} WHERE 1 {$searchstring} {$ORDER} {$limitSql} ";
    $results = $q->QUERY_SQL($sql);
    if (!$q->ok) {
        if ($q->mysql_error != null) {
            json_error_show(date("H:i:s") . "<br>SORT:{$_POST["sortname"]}:<br>Mysql Error [L." . __LINE__ . "]: {$q->mysql_error}<br>{$sql}", 1);
        }
    }
    if (mysql_num_rows($results) == 0) {
        json_error_show("no data", 1);
    }
    $data = array();
    $data['page'] = $page;
    $data['total'] = $total;
    $data['rows'] = array();
    $fontsize = "18";
    if ($switch == 1) {
        $fontsize = 12;
    }
    $style = "<span style='font-size:{$fontsize}px'>";
    $free_text = $tpl->javascript_parse_text("{free}");
    $computers = $tpl->javascript_parse_text("{computers}");
    $overloaded_text = $tpl->javascript_parse_text("{overloaded}");
    $orders_text = $tpl->javascript_parse_text("{orders}");
    $policies_text = $tpl->javascript_parse_text("{policies}");
    $directories_monitor = $tpl->javascript_parse_text("{directories_monitor}");
    while ($ligne = mysql_fetch_assoc($results)) {
        $LOGSWHY = array();
        $overloaded = null;
        $loadcolor = "black";
        $StatHourColor = "black";
        $uuid = $ligne["uuid"];
        $hostname = $ligne["hostname"];
        $public_ip = $ligne["public_ip"];
        $updated = $ligne["updated"];
        $version = $ligne["version"];
        $ColorTime = "black";
        $CPU_NUMBER = $ligne["CPU_NUMBER"];
        $CPU_NUMBER_MAX = $ligne["CPU_NUMBER"] + 1.5;
        $load = $ligne["load"];
        $mem_perc = $ligne["mem_perc"];
        $mem_total = FormatBytes($ligne["mem_total"]);
        $proxyversion = null;
        $CountdeComputers_text = null;
        $policies_text_line = null;
        $CountdeComputers = $q->network_hosts_count($uuid);
        $icon_warning_32 = "warning32.png";
        $icon_red_32 = "32-red.png";
        $icon = "ok-32.png";
        $BANDWIDTH = $ligne["BANDWIDTH"];
        $BANDWIDTH_text = null;
        $hostag_switch = null;
        $uuidenc = urlencode($uuid);
        $PING_URI_SWITCH = null;
        if ($ArticaMetaUseSendClient == 1) {
            $PING_URI = "&nbsp;<a href=\"javascript:blur();\" \n\t\t\tOnClick=\"javascript:Loadjs('artica-meta.menus.php?send-ping-js=yes&uuid={$uuidenc}&gpid=0');\"\n\t\t\tstyle='font-size:12px;text-decoration:underline;color:#0021C6'\n\t\t\t>Ping</a>";
        }
        if ($BANDWIDTH > 0) {
            $BANDWIDTH_text = " (" . FormatBytes($BANDWIDTH / 1024) . ")";
        }
        if ($switch == 1) {
            $icon_warning_32 = "22-warn.png";
            $icon_red_32 = "22-red.png";
            $icon = "ok22.png";
        }
        if ($load > $CPU_NUMBER_MAX) {
            $overloaded = "<br><strong style='color:red'>{$overloaded_text}</strong>";
            $icon = $icon_warning_32;
            $loadcolor = "#CC0000";
            $LOGSWHY[] = "{$overloaded_text} {$load}>{$CPU_NUMBER_MAX}";
        }
        $xtime = strtotime($updated);
        $diff = time_diff_min($xtime);
        $Difftext = distanceOfTimeInWords($xtime, time(), true);
        if ($diff > $ArticaMetaPooling) {
            $icon = $icon_warning_32;
            $ColorTime = "#CC0000";
            $LOGSWHY[] = $Difftext . "/{$ArticaMetaPooling}Mn";
        }
        if ($diff > $ArticaMetaPooling * 4) {
            $icon = $icon_red_32;
            $ColorTime = "#CC0000";
            $LOGSWHY[] = $Difftext . "/{$ArticaMetaPooling}Mn";
        }
        $disks = unserialize($ligne["disks"]);
        $SIZE = 0;
        $USED = 0;
        $infodisk = null;
        $DISKS_TEXT = array();
        if ($q->philesight_count($uuid) > 0) {
            $DISKS_TEXT[] = "<a href=\"javascript:blur();\" OnClick=\"javascript:Loadjs('artica-meta.hosts.philesight.php?uuid={$uuid}')\"\n\t\t\tstyle='font-size:14px;font-weight:bold;text-decoration:underline'>{$directories_monitor}</a><hr style='margin-bottom:15px;border:0px;'>";
        }
        if (is_array($disks)) {
            $DISKS_TEXT[] = "<ul>";
            while (list($disks, $mainarray) = each($disks)) {
                $SIZE = FormatBytes(intval($mainarray["SIZE"]) / 1024);
                $DISKS_TEXT[] = "<li style='font-weight:bold;font-size:14px'>{$disks} {$SIZE}</li>";
                $DISKS_TEXT[] = "<ul>";
                while (list($part, $partArray) = each($mainarray["PARTS"])) {
                    $color_disk = "black";
                    $POURC = $partArray["POURC"];
                    if ($POURC > 95) {
                        $color_disk = "red";
                        $icon = $icon_red_32;
                        $LOGSWHY[] = "{$part} {used}:{$POURC}%";
                    }
                    $TOT = FormatBytes($partArray["TOT"] / 1024);
                    $AIV = FormatBytes($partArray["AIV"] / 1024);
                    $DISKS_TEXT[] = "<li style='color:{$color_disk}'>{$part} {$TOT} - {used}:{$POURC}% {free}: {$AIV}</li>";
                }
                $DISKS_TEXT[] = "</ul>";
            }
            $DISKS_TEXT[] = "</ul>";
            $infodisk = $tpl->_ENGINE_parse_body(@implode("", $DISKS_TEXT));
        }
        if ($switch == 1) {
            $infodisk = null;
        }
        $info = $tpl->_ENGINE_parse_body("<br>{last_status}:&nbsp;<span style='color:{$ColorTime}'>{$Difftext}</span><br><span style='font-size:12px'>{$CPU_NUMBER} CPU(s), {memory}:{$mem_total}{$overloaded}</span>");
        $cell = array();
        $linkver = "<a href=\"javascript:Loadjs('artica-meta.update.artica.php?uuid={$uuid}');\" \n\t\tstyle='text-decoration:underline'>";
        if ($q->isOrder($uuid, "UPDATE_ARTICA")) {
            $version = "<center style='margin:10px'><img src='img/preloader.gif'></center>";
        }
        if ($ligne["PROXY"] == 1) {
            $proxyuri = "<a href=\"javascript:blur();\" OnClick=\"javascript:Loadjs('artica-meta.squid.watchdog-events.php?js=yes&uuid={$uuid}');\"\n\t\tstyle='text-decoration:underline'>";
            $proxyversion = "<br><span style='font-size:12px'>{$proxyuri}Proxy: {$ligne["squidver"]}</a> {$BANDWIDTH_text}</span>";
        }
        if ($CountdeComputers > 0) {
            $CountdeComputers = FormatNumber($CountdeComputers);
            $CountdeComputers_uri = "<a href=\"javascript:blur();\" OnClick=\"javascript:Loadjs('artica-meta.networks.hosts.php?js=yes&uuid={$uuid}');\"\n\t\t\tstyle='text-decoration:underline'>";
            $CountdeComputers_text = "<br><span style='font-size:12px'>{$CountdeComputers_uri}{$computers}: <strong>{$CountdeComputers}</strong></a></span>";
        }
        $OrdersText = null;
        $ligneOrders = mysql_fetch_array($q->QUERY_SQL("SELECT COUNT(orderid) as tcount FROM `metaorders` WHERE `uuid`='{$uuid}'"));
        $OrdersCount = $ligneOrders["tcount"];
        if ($OrdersCount > 0) {
            $OrdersText = "<br><a href=\"javascript:blur();\" \n\t\t\tOnClick=\"javascript:Loadjs('artica-meta.hosts.orders.php?uuid={$uuid}');\">\n\t\t\t<strong style='text-decoration:underline;color:#E48407'>{$orders_text}:{$OrdersCount}</strong>";
        }
        $ligneOrders = mysql_fetch_array($q->QUERY_SQL("SELECT COUNT(uuid) as tcount FROM `policies_storage` WHERE `uuid`='{$uuid}'"));
        $OrdersCount = $ligneOrders["tcount"];
        if ($OrdersCount > 0) {
            $policies_text_line = "<br><strong style='text-decoration:underline;color:#E48407'>{$policies_text}:{$OrdersCount}</strong>";
        }
        $events = "<a href=\"javascript:blur();\" OnClick=\"javascript:Loadjs('artica-meta.events.php?js=yes&uuid={$uuid}');\"\n\t\tstyle='float:right'><img src='css/images-flexigrid/magnifier.png'></a>";
        $cpus = "<a href=\"javascript:blur();\" OnClick=\"javascript:Loadjs('artica-meta.cpustats.php?js=yes&uuid={$uuid}');\"\n\t\tstyle='text-decoration:underline'>";
        $hostsCommands = "<a href=\"javascript:blur();\" OnClick=\"javascript:Loadjs('artica-meta.menus.php?js=yes&uuid={$uuid}');\"\n\t\tstyle='text-decoration:underline'>";
        $hostag = utf8_encode($ligne["hostag"]);
        if ($hostag != null) {
            $hostag = "<br><i style='font-size:12px'>{$hostag}</i>";
        }
        if ($switch == 1) {
            $info = null;
            $hostag = null;
            $proxyversion = null;
            $CountdeComputers_text = null;
            $events = null;
            $hostag_switch = utf8_encode($ligne["hostag"]);
            $PING_URI_SWITCH = $PING_URI;
            $PING_URI = null;
            if (count($LOGSWHY) > 0) {
                $infodisk = $tpl->_ENGINE_parse_body("<span style='color:red;font-size:12px'>" . @implode(", ", $LOGSWHY) . "</span>");
            }
        }
        $cell = array();
        $link_ip = "<a href=\"https://{$public_ip}:9000\" style='text-decoration:underline' target=_new>";
        $cell[] = "<img src=\"img/{$icon}\">";
        $cell[] = "{$style}{$hostsCommands}{$hostname}{$hostag}</a>{$PING_URI_SWITCH}{$events} </span>{$info}{$proxyversion}{$CountdeComputers_text}{$OrdersText}{$policies_text_line}";
        $cell[] = "{$style}<span style='color:{$loadcolor}'>{$load}</span></span>";
        $cell[] = "{$style}{$cpus}{$mem_perc}%</a></span>";
        $cell[] = $hostag_switch . "&nbsp;" . $infodisk;
        $cell[] = "{$style}{$link_ip}{$public_ip}</a>{$PING_URI}</span>";
        $cell[] = "{$style}{$linkver}{$version}</a></span>";
        $data['rows'][] = array('id' => $ligne['uuid'], 'cell' => $cell);
    }
    echo json_encode($data);
}
function delete_category()
{
    $category = trim($_POST["remove_category"]);
    if (strlen($category) == 0) {
        return;
    }
    $q = new mysql_meta();
    $q->QUERY_SQL("DELETE FROM webfiltering_categories WHERE `category`='{$category}'");
    if (!$q->ok) {
        echo $q->mysql_error;
        return;
    }
    $q->QUERY_SQL("DELETE FROM webfiltering_categories_items WHERE `category`='{$category}'");
    if (!$q->ok) {
        echo $q->mysql_error;
        return;
    }
    $q->QUERY_SQL("DELETE FROM webfiltering_categories_urls WHERE `category`='{$category}'");
    $sock = new sockets();
    $sock->getFrameWork("artica.php?scan-categories=yes");
}
function search()
{
    $tpl = new templates();
    $MyPage = CurrentPageName();
    $q = new mysql_meta();
    $search = '%';
    $table = "(SELECT * FROM system_schedules WHERE `uuid`='{$_GET["uuid"]}') as t";
    $page = 1;
    $ORDER = "ORDER BY ID DESC";
    $sock = new sockets();
    $DisableSquidDefaultSchedule = $sock->GET_INFO("DisableSquidDefaultSchedule");
    if (!is_numeric($DisableSquidDefaultSchedule)) {
        $DisableSquidDefaultSchedule = 0;
    }
    $schedules = new system_tasks();
    $ForceTaskType = $_GET["ForceTaskType"];
    if (!is_numeric($ForceTaskType)) {
        $ForceTaskType = 0;
    }
    $total = 0;
    $FORCE = 1;
    if ($ForceTaskType > 0) {
        $FORCE = "TaskType={$ForceTaskType}";
    }
    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_flexquery();
    $sql = "SELECT COUNT(*) as TCOUNT FROM {$table} WHERE {$FORCE} {$searchstring}";
    $ligne = mysql_fetch_array($q->QUERY_SQL($sql));
    $total = $ligne["TCOUNT"];
    if (isset($_POST['rp'])) {
        $rp = $_POST['rp'];
    }
    $pageStart = ($page - 1) * $rp;
    if (is_numeric($rp)) {
        $limitSql = "LIMIT {$pageStart}, {$rp}";
    }
    $sql = "SELECT *  FROM {$table} WHERE {$FORCE} {$searchstring} {$ORDER} {$limitSql}";
    writelogs($sql, __FUNCTION__, __FILE__, __LINE__);
    $results = $q->QUERY_SQL($sql);
    $data = array();
    $data['page'] = $page;
    $data['total'] = $total;
    $data['rows'] = array();
    if (!$q->ok) {
        json_error_show("no schedule");
    }
    $q2 = new mysql();
    if (mysql_num_rows($results) == 0) {
        json_error_show("no schedule", 1);
    }
    while ($ligne = mysql_fetch_assoc($results)) {
        $color = "black";
        $events = "&nbsp;";
        $md5 = md5("SquidTask{$ligne['ID']}");
        $TaskType = $ligne["TaskType"];
        $jstaskexplain = $tpl->javascript_parse_text($schedules->tasks_array[$ligne["TaskType"]]);
        $ligne["TaskType"] = $tpl->_ENGINE_parse_body($schedules->tasks_array[$ligne["TaskType"]]);
        $TimeDescription = $ligne["TimeDescription"];
        $enable = Field_checkbox($md5, 1, $ligne["enabled"], "SystemTaskEnable('{$md5}',{$ligne['ID']})");
        $delete = imgtootltip("delete-24.png", "{delete} {$ligne['ID']}", "SquidTaskDelete('{$ligne['ID']}')");
        $run = $tpl->_ENGINE_parse_body(imgtootltip("24-run.png", "{run} {$ligne['ID']}", "SystemTaskRun('{$ligne['ID']}','{$jstaskexplain}')"));
        if ($ligne["enabled"] == 0) {
            $color = "#A0A0A0";
        }
        $tablename = "Taskev{$ligne['ID']}";
        if (!$q->TABLE_EXISTS($tablename, "artica_events")) {
            $events = imgsimple("delete_disabled.png");
        } else {
            $evs = $q2->COUNT_ROWS($tablename, "artica_events");
            if ($evs > 0) {
                $events = imgsimple("events-24.png", "{events} {$ligne['ID']}", "Loadjs('squid.update.events.php?taskid={$ligne['ID']}&table={$tablename}')");
            }
        }
        $explainTXT = $tpl->_ENGINE_parse_body($schedules->tasks_explain_array[$TaskType]);
        $TimeText = $tpl->_ENGINE_parse_body($schedules->PatternToHuman($ligne["TimeText"]));
        $TimeText = str_replace("<br>", "", $TimeText);
        if (preg_match("#(.+?)\\s+(.+?)\\s+(.+?)\\s+(.+?)\\s+(.+?)#", $TimeDescription, $re)) {
            $TimeDescription = $TimeText;
            $TimeText = null;
        }
        $span = "<a href=\"javascript:blur();\" OnClick=\"javascript:Loadjs('{$MyPage}?AddNewSchedule-js=yes&ID={$ligne['ID']}');\"\n\t\t style='font-size:16px;font-weight:bold;color:{$color};text-decoration:underline'>";
        $ligne["TimeDescription"] = utf8_encode($ligne["TimeDescription"]);
        $ligne["TaskType"] = utf8_encode($ligne["TaskType"]);
        //rowSquidTask
        $data['rows'][] = array('id' => "SquidTask" . $ligne['ID'], 'cell' => array("{$span}{$ligne['ID']}</a>", "{$span}{$ligne["TaskType"]}</a>", "{$span}{$TimeDescription}</a>\n\t\t<div style='font-size:11px'><i>{$explainTXT}</i></div>", "<div style='margin-top:5px'>{$enable}</div>", $delete));
    }
    echo json_encode($data);
}
function search()
{
    $MyPage = CurrentPageName();
    $page = CurrentPageName();
    $tpl = new templates();
    $sock = new sockets();
    $q = new mysql_meta();
    $table = "snapshots";
    $database = null;
    $uuid = $_GET["uuid"];
    $uuidenc = urlencode($uuid);
    $gpid = intval($_GET["gpid"]);
    if (!$q->TABLE_EXISTS($table, $database)) {
        json_error_show("no data - no table");
    }
    $searchstring = string_to_flexquery();
    $page = 1;
    $table = "(SELECT \n\t\tsnapshots.zmd5,snapshots.zDate,\n\t\tsnapshots.size,\n\t\tmetahosts.hostname,\n\t\tmetahosts.hostag\n\t\tFROM snapshots,metahosts WHERE metahosts.uuid=snapshots.uuid) as t";
    if (isset($_POST["sortname"])) {
        if ($_POST["sortname"] != null) {
            $ORDER = "ORDER BY `{$_POST["sortname"]}` {$_POST["sortorder"]}";
        }
    }
    if (isset($_POST['page'])) {
        $page = $_POST['page'];
    }
    $sql = "SELECT COUNT( * ) AS tcount FROM {$table} WHERE 1 {$searchstring}";
    $ligne = mysql_fetch_array($q->QUERY_SQL($sql, $database));
    if (!$q->ok) {
        json_error_show("Mysql Error [" . __LINE__ . "]: <br>{$q->mysql_error}.<br>{$sql}", 1);
    }
    $total = $ligne["tcount"];
    if (isset($_POST['rp'])) {
        $rp = $_POST['rp'];
    }
    if (!is_numeric($rp)) {
        $rp = 50;
    }
    $pageStart = ($page - 1) * $rp;
    $limitSql = "LIMIT {$pageStart}, {$rp}";
    $sql = "SELECT * FROM {$table} WHERE 1 {$searchstring} {$ORDER} {$limitSql} ";
    $results = $q->QUERY_SQL($sql, $database);
    if (!$q->ok) {
        if ($q->mysql_error != null) {
            json_error_show(date("H:i:s") . "<br>SORT:{$_POST["sortname"]}:<br>Mysql Error [L." . __LINE__ . "]: {$q->mysql_error}<br>{$sql}", 1);
        }
    }
    if (mysql_num_rows($results) == 0) {
        json_error_show("no data", 0);
    }
    $data = array();
    $data['page'] = $page;
    $data['total'] = $total;
    $data['rows'] = array();
    $fontsize = "14";
    $style = " style='font-size:{$fontsize}px'";
    $styleHref = " style='font-size:{$fontsize}px;text-decoration:underline'";
    $free_text = $tpl->javascript_parse_text("{free}");
    $computers = $tpl->javascript_parse_text("{computers}");
    $overloaded_text = $tpl->javascript_parse_text("{overloaded}");
    $orders_text = $tpl->javascript_parse_text("{orders}");
    $directories_monitor = $tpl->javascript_parse_text("{directories_monitor}");
    while ($ligne = mysql_fetch_assoc($results)) {
        $LOGSWHY = array();
        $overloaded = null;
        $loadcolor = "black";
        $StatHourColor = "black";
        $ColorTime = "black";
        $hostname = $ligne["hostname"];
        $hostag = utf8_encode($ligne["hostag"]);
        $zmd5 = $ligne["zmd5"];
        $icon_warning_32 = "warning32.png";
        $icon_red_32 = "32-red.png";
        $icon = "ok-32.png";
        $xdate = $ligne["zDate"];
        $xtime = strtotime($xdate);
        $date = $tpl->time_to_date($xtime, true);
        $size = FormatBytes($ligne["size"] / 1024);
        $urijs = "Loadjs('{$MyPage}?content-js=yes&ID={$ligne["ID"]}');";
        $link = "<a href=\"javascript:blur();\" OnClick=\"javascript:{$urijs}\" {$styleHref}>";
        $delete = imgtootltip("delete-32.png", null, "Loadjs('{$MyPage}?unlink-js={$ligne["zmd5"]}')");
        $restore = imgtootltip("32-import.png", null, "Loadjs('artica-meta.menus.php?snapshot-restore-js=yes&zmd5={$ligne["zmd5"]}&uuid={$uuidenc}&gpid={$gpid}')");
        if ($uuid == null) {
            if ($gpid == 0) {
                $restore = "&nbsp;-&nbsp;";
            }
        }
        $cell = array();
        $cell[] = "<span {$style}>{$xdate}<br><i style='font-size:12px'>{$date}</i></a></span>";
        $cell[] = "<span {$style}>{$hostname}<br><i style='font-size:12px'>{$hostag}</i></a></span>";
        $cell[] = "<span {$style}>{$size}</a></span>";
        $cell[] = $restore;
        $cell[] = "{$delete}";
        $data['rows'][] = array('id' => $ligne['uuid'], 'cell' => $cell);
    }
    echo json_encode($data);
}