function popup_cluster_infos()
{
    $cyr = new cyrus_cluster();
    if (!$cyr->test_remote_server($_SESSION["WIZARD_CYRUS"]["REMOTE_ARTICA_SERVER"], $_SESSION["WIZARD_CYRUS"]["REMOTE_ARTICA_SERVER_PORT"], $_SESSION["WIZARD_CYRUS"]["REMOTE_ARTICA_USR"], $_SESSION["WIZARD_CYRUS"]["REMOTE_ARTICA_PASS"])) {
        $error = $cyr->error_text;
        $html = "<p style='font-size:12px;color:#d32d2d'>{WIZARD_CLUSTER_ERROR}</p>\n\t\t<p style='font-size:13px;color:#d32d2d;font-weight:bold'>{$error}</p>\t<hr>\n\t\t<table style='width:100%'>\n\t\t\t<tr>\n\t\t\t\t<td width=50%>" . button("{back}", "WizardCyrusClusterLoad()") . "</td>\n\t\t\t\t<td width=50% align='right'>" . button("{back}", "WizardCyrusClusterLoad()") . "</td>\n\t\t\t</tr>\n\t\t</table>";
        $tpl = new templates();
        echo $tpl->_ENGINE_parse_body($html);
        return;
    }
    $users = new usersMenus();
    if ($_SESSION["WIZARD_CYRUS"]["LOCAL_ARTICA_SERVER"] == null) {
        $_SESSION["WIZARD_CYRUS"]["LOCAL_ARTICA_SERVER"] = $users->hostname;
    }
    $html = "<H3 style='color:#005447;font-size:16px'>{WIZARD_CLUSTER_CYRUS_REPLICA_SUCCESS}<hr></H3>\n\t\t<p style='font-size:13px'>{server}:&nbsp;<strong>{$_SESSION["WIZARD_CYRUS"]["REMOTE_ARTICA_SERVER"]}<br>{WIZARD_CLUSTER_CYRUS_REPLICA_SUCCESS_EXPLAIN}</p>\n\t\t</strong>\n\t<table style='width:100%'>\n\t<tr>\n\t\t<td style='font-size:13px' align='right'>{ip_address}:</td>\n\t\t<td>" . Field_text("LOCAL_ARTICA_SERVER", $_SESSION["WIZARD_CYRUS"]["LOCAL_ARTICA_SERVER"], "font-size:13px;padding:5px") . "</td>\n\t</tr>\t\n\t</table>\t\t\n\t\t\n\t\t<center>\n\t\t<hr>\n\t\t" . button("{BUILD_CLUSTER}", "WizardClusterBuild()") . "\n\t\t<hr>\n\t\t</center>\n\t</table>\n\t<table style='width:100%'>\n\t\t<tr>\n\t\t\t<td width=50%>" . button("{back}", "WizardCyrusClusterLoad()") . "</td>\n\t\t\t<td width=50% align='right'>" . button("{BUILD_CLUSTER}", "WizardClusterBuild()") . "</td>\n\t\t</tr>\n\t</table>\n\t";
    $tpl = new templates();
    echo $tpl->_ENGINE_parse_body($html);
}
function cyrus_cluster_receive()
{
    $array = unserialize(base64_decode($_POST["cyrus-cluster"]));
    $users = new usersMenus();
    $sock = new sockets();
    $fqdn = $users->fqdn;
    if ($fqdn == null) {
        $fqdn = $users->hostname;
    }
    $_GET["admin"] = $array["admin"];
    $_GET["pass"] = $array["pass"];
    if (!islogged(1, 1)) {
        writelogs("Bad username and password", __FUNCTION__, __FILE__, __LINE__);
        $return["RESULT"] = "{$fqdn}: {$array["admin"]}: {username}/{password} {failed}";
        $return["REPLY"] = false;
        echo base64_encode(serialize($return));
        return;
    }
    writelogs("Username and password OK", __FUNCTION__, __FILE__, __LINE__);
    $users = new usersMenus();
    if (!$users->cyrus_sync_installed) {
        $return["RESULT"] = "{$fqdn}: {sync_tools_not_compiled}";
        $return["REPLY"] = false;
        echo base64_encode(serialize($return));
        return;
    }
    if ($sock->GET_INFO("CyrusEnableImapMurderedFrontEnd") == 1) {
        $return["RESULT"] = "{$fqdn}: {already_a_murder_frontend}";
        $return["REPLY"] = false;
        echo base64_encode(serialize($return));
        return;
    }
    if (!function_exists("curl_init")) {
        $return["RESULT"] = "{$fqdn}:{error_php_curl}";
        $return["REPLY"] = false;
        echo base64_encode(serialize($return));
        return;
    }
    writelogs("Success pass tests...", __FUNCTION__, __FILE__, __LINE__);
    if ($array["cmd"] == "tests") {
        $return["RESULT"] = "{$fqdn}: {success}";
        $return["REPLY"] = true;
        echo base64_encode(serialize($return));
        return;
    }
    if ($array["cmd"] == "connect") {
        writelogs("Try to be a replica {$array["master_ip"]}:{$array["master_artica_port"]}", __FUNCTION__, __FILE__, __LINE__);
        $cyrus_cluster = new cyrus_cluster();
        if (!$cyrus_cluster->test_remote_server($array["master_ip"], $array["master_artica_port"], $array["ldap_admin"], $array["ldap_password"])) {
            writelogs("Unable to call master server {$array["master_ip"]}:{$cyrus_cluster->error_text}", __FUNCTION__, __FILE__, __LINE__);
            $return["RESULT"] = $cyrus_cluster->error_text;
            $return["REPLY"] = false;
            echo base64_encode(serialize($return));
            return;
        }
        writelogs("Call master server {$array["master_ip"]}: success", __FUNCTION__, __FILE__, __LINE__);
        $ini = new Bs_IniHandler();
        $ini->set("REPLICA", "servername", $array["master_ip"]);
        $ini->set("REPLICA", "username", $array["ldap_admin"]);
        $ini->set("REPLICA", "password", $array["ldap_password"]);
        $ini->set("REPLICA", "artica_port", $array["master_artica_port"]);
        $ini->set("REPLICA", "suffix", $array["suffix"]);
        $sock->SaveConfigFile($ini->toString(), "CyrusReplicaLDAPConfig");
        $sock->SET_INFO("EnableCyrusReplicaCluster", 1);
        $sock->SET_INFO("EnableCyrusMasterCluster", 0);
        $sock->SET_INFO("CyrusReplicaClusterPort", $array["master_cyrus_port"]);
        $sock->SET_INFO("CyrusReplicaClusterServer", $array["master_ip"]);
        $sock->getFrameWork('cmd.php?cyrus-reconfigure=yes&force=yes');
        writelogs("Success Enable replica", __FUNCTION__, __FILE__, __LINE__);
        $return["RESULT"] = "{success}";
        $return["REPLY"] = true;
        echo base64_encode(serialize($return));
        writelogs("Success to be a replica", __FUNCTION__, __FILE__, __LINE__);
        $sock->getFrameWork('cmd.php?cyrus-reconfigure=yes&force=yes');
        return;
    }
    if ($array["cmd"] == "disconnect") {
        writelogs("Try to disable replica", __FUNCTION__, __FILE__, __LINE__);
        $sock->SET_INFO("EnableCyrusReplicaCluster", 0);
        writelogs("Success disable replica", __FUNCTION__, __FILE__, __LINE__);
        $sock->getFrameWork('cmd.php?cyrus-reconfigure=yes&force=yes');
    }
    if ($array["cmd"] == "isReplica") {
        if ($sock->GET_INFO("EnableCyrusReplicaCluster") == 1) {
            $return["RESULT"] = "{success}";
            $return["REPLY"] = true;
        } else {
            $return["RESULT"] = "{failed}: not a replica";
            $return["REPLY"] = false;
        }
        echo base64_encode(serialize($return));
    }
}