File "work02.php"

Full Path: /home/analogde/www/Administratif/FTP/Monsta-FTP-master/work02.php
File size: 178.34 KB
MIME-type: text/x-php
Charset: utf-8

<?php

$version = "1.8.8";

require("config.php");

ini_set('max_execution_time', $maxExecTime);
ini_set('memory_limit', $maxFileSize);

header("X-Frame-Options: SAMEORIGIN");



////$racine = "https://analog-design.net/2024_PHP/2024_PHP_18_11_2024/";

/// ~/www/2024_PHP/2024_PHP_18_11_2024

error_reporting(0);
saveFtpDetailsCookie();
startSession();

$_SESSION["logged_user"] = "patrice";
$_SESSION["logged_user"] = "john";
# SET FOLDERS


//$user_racine = "~/www/2024_PHP/2024_PHP_18_11_2024";

//$_SESSION["user_racine"] = "~/www/2024_PHP/2024_PHP_18_11_2024";

$templates_dir = "templates";
$languages_dir = "languages";

# INCLUDE LANGUAGE FILE

if ($_SESSION["lang"] == "" || isset($_POST["lang"]))
    setLangFile();

//$langFileArray = getFileArray("languages");

include($languages_dir . "/en_us.php");

//if (in_array($_SESSION["lang"], $langFileArray))
include($languages_dir . "/" . $_SESSION["lang"]);

/************/
$taille = sizeof($_SESSION["dir_history"]);
$myfile = fopen("TRACE INIT1.txt", "w") or die("Unable to open file!");
$txt = "TRACE INIT1 : " .$taille . "  " .$_SESSION["dir_current"] . "  " .$_SESSION["dir_history"][0] ."\n";
fwrite($myfile, $txt);
fclose($myfile);
/************/

# SET VARS

// Check for file download
if (isset($_GET["dl"]))
    $ftpAction = "download";
    
// Check for zip download
if ($_GET["ftpAction"] == "download_zip")
    $ftpAction = "download_zip";

// Check for iFrame upload
if ($_GET["ftpAction"] == "iframe_upload")
    $ftpAction = "iframe_upload";

// Check for iFrame edit
if ($_GET["ftpAction"] == "editProcess")
    $ftpAction = "editProcess";

// Check for AJAX post
if ($_POST["ftpAction"] != "" || $_GET["ftpAction"] != "")
{
    $ajaxRequest = 1;

    $myfile = fopen("Submit.txt", "w") or die("Unable to open file!");
    $txt = "Submit  "  .$ajaxRequest  ." +++++ " .$_POST["ftpAction"]  ."  ---- " .$_POST["openFolder"] ."\n";
    fwrite($myfile, $txt);
    fclose($myfile);

}    
else
{
    $ajaxRequest = 0;

    // au départ on a des tableaux vides
    //$myfile = fopen("Chargement.txt", "w") or die("Unable to open file!");
    //$txt = "Chargement :  "  .$ajaxRequest  ." +++++ " .$_SESSION["dir_current"]  ."  ---- " .$_SESSION["dir_history"] ."\n";
    //fwrite($myfile, $txt);
    //fclose($myfile);

    /************/
    $taille = sizeof($_SESSION["dir_history"]);
    $myfile = fopen("TRACE INIT2.txt", "w") or die("Unable to open file!");
    $txt = "TRACE INIT2 : " .$taille . "  " .$_SESSION["dir_current"] . "  " .$_SESSION["dir_history"][0] ."\n";
    fwrite($myfile, $txt);
    fclose($myfile);
    /************/


}
// Check resetting upload erreor array
if ($_POST["resetErrorArray"] == 1 || $ajaxRequest == 0) {
    $_SESSION["errors"] = array();
}

// Set file upload limit
setUploadLimit();

# LOAD CONTENT
// These check vars are set in the "SET VARS" section
    if ($ftpAction == "download" || $ftpAction == "download_zip" || $ftpAction == "iframe_upload" || $ftpAction == "editProcess") 
    {
    
        // Login
        attemptLogin();
           
        // Check referer
        if (checkReferer() == 1) 
        {
            //$myfile = fopen("CheckReferer.txt", "w") or die("Unable to open file!");
            //$txt = "CheckReferer : passage " ."\n";
            //fwrite($myfile, $txt);
            //fclose($myfile);
            
            // Display content when logged in
            if ($_SESSION["loggedin"] == 1) 
            {

                if ($ftpAction == "download") {
                    downloadFile();
                    //parentOpenFolder();
                }
                if ($ftpAction == "download_zip") {
                    downloadFiles();
                // parentOpenFolder();
                }
                if ($ftpAction == "iframe_upload") {
                    iframeUpload();
                // parentOpenFolder();
                }
                if ($ftpAction == "editProcess") {
                    editProcess();
                }
            }
        }
    
    } 
    else
    {
    
        if ($ajaxRequest == 0) 
        {
            
                /************/
                $taille = sizeof($_SESSION["dir_history"]);
                $myfile = fopen("TRACE INIT3.txt", "w") or die("Unable to open file!");
                $txt = "TRACE INIT3 : " .$taille . "  " .$_SESSION["dir_current"] . "  " .$_SESSION["dir_history"][0] ."\n";
                fwrite($myfile, $txt);
                fclose($myfile);
                /************/

            // Check if logout link has been clicked
            checkLogOut();
            
            // Include the header
            displayHeader();
        }
    
        // Attempt to login with session or post vars
        attemptLogin();

        /************/
        $taille = sizeof($_SESSION["dir_history"]);
        $myfile = fopen("TRACE INIT4.txt", "w") or die("Unable to open file!");
        $txt = "TRACE INIT4 : " .$taille . "  " .$_SESSION["dir_current"] . "  " .$_SESSION["dir_history"][0] ."\n";
        fwrite($myfile, $txt);
        fclose($myfile);
        /************/
    
        // Check referer
        if (checkReferer() == 1) 
        {
        
            /************/
            $taille = sizeof($_SESSION["dir_history"]);
            $myfile = fopen("TRACE INIT5.txt", "w") or die("Unable to open file!");
            $txt = "TRACE INIT5 : " .$taille . "  " .$_SESSION["dir_current"] . "  " .$_SESSION["dir_history"][0] ."\n";
            fwrite($myfile, $txt);
            fclose($myfile);
            /************/

            //$myfile = fopen("CheckReferer bis.txt", "w") or die("Unable to open file!");
            //$txt = "CheckReferer : bis " ."\n";
            //fwrite($myfile, $txt);
            //fclose($myfile);
            //$myfile = fopen("log_action.txt", "w") or die("Unable to open file!");
            //fwrite($myfile, "action 1" .$_SESSION["dir_history"] ."\n");

            // Process any FTP actions
            processActions();

             /************/
             $taille = sizeof($_SESSION["dir_history"]);
             $myfile = fopen("TRACE INIT6.txt", "w") or die("Unable to open file!");
             $txt = "TRACE INIT6 : " .$taille . "  " .$_SESSION["dir_current"] . "  " .$_SESSION["dir_history"][0] ."\n";
             fwrite($myfile, $txt);
             fclose($myfile);
             /************/
 
        
            // Display content when logged in
            if ($_SESSION["loggedin"] == 1) 
            {
                //fwrite($myfile, "action 2 " .$_SESSION["dir_history"][0] ."\n");

                if ($ajaxRequest == 0) 
                {
                    //fwrite($myfile, "action 3 " .$_SESSION["dir_history"][0] .$ajaxRequest ."\n");
                    displayFormStart();
                    displayFtpActions();
                    displayAjaxDivOpen();
                }

                //fwrite($myfile, "action 4 " .$ajaxRequest ."\n");
                //fclose($myfile);
                $taille = sizeof($_SESSION["dir_history"]);

                $myfile = fopen("Post history.txt", "w") or die("Unable to open file!");
                $txt = "Post history : " .$taille . "  " .$_SESSION["dir_current"] . "  " .$_SESSION["dir_history"][0] ."\n";
                fwrite($myfile, $txt);
                fclose($myfile);

                // Display FTP folder history
                displayFtpHistory();
            
                // Display folder/file listing
                displayFiles();
            
                // Load error window
                displayErrors();
            
                if ($ajaxRequest == 0) 
                {
                    displayAjaxDivClose();
                    displayAjaxIframe();
                    displayUploadProgress();
                    displayAjaxFooter();
                    loadJsLangVars();
                    loadAjax();
                    writeHiddenDivs();
                    displayFormEnd();
                    //displayAjaxIframe();
                    loadEditableExts();
                }
        }
        
        if ($ajaxRequest == 0) 
        {
            
            // Include the footer
            displayFooter();
        }
    }

    //fclose($myfile);
}

// Close FTP connection
@ftp_close($conn_id);


# FUNCTIONS

function startSession()
{

    global $sessionName;

    // Only change session name if session.auto_start is not 1, and session name is valid
    if (!ini_get("session.auto_start") || ini_get("session.auto_start") == "0")
        session_name(preg_match('/^[0-9]*[A-Za-z][A-Za-z0-9]*$/', $sessionName) ? $sessionName : "monstaftp");
    
    @session_start();
    
    $session_keys = array("user_ip", "loggedin",
        "lang", "win_lin", "ip_check", "login_error", "login_fails", "login_lockout",
        "ftp_ssl", "ftp_host", "ftp_user", "ftp_pass", "ftp_port", "ftp_pasv",
        "interface", "dir_current", "dir_history", "clipboard_chmod", "clipboard_files",
        "clipboard_folders", "clipboard_rename", "copy",
        "errors", "upload_limit", "domain", "filesCharSet", "logged_user"
    );
    

    foreach($session_keys as $session_key) {
        if (!isset($_SESSION[$session_key]))
            $_SESSION[$session_key] = ''; // avoid a lot of "undefined index"
    }    

}

function saveFtpDetailsCookie()
{
    
    if ($_POST["login"] == 1) {
        
        if ($_POST["login_save"] == 1) {
            
            $s = 31536000; // seconds in a year
            setcookie("ftp_ssl", $_POST["ftp_ssl"], time() + $s, '/', null, null, true);
            setcookie("ftp_host", trim($_POST["ftp_host"]), time() + $s, '/', null, null, true);
            setcookie("ftp_user", trim($_POST["ftp_user"]), time() + $s, '/', null, null, true);
            setcookie("ftp_pass", trim($_POST["ftp_pass"]), time() + $s, '/', null, null, true);
            setcookie("ftp_port", trim($_POST["ftp_port"]), time() + $s, '/', null, null, true);
            setcookie("ftp_pasv", $_POST["ftp_pasv"], time() + $s, '/', null, null, true);
            setcookie("interface", $_POST["interface"], time() + $s, '/', null, null, true);
            setcookie("login_save", $_POST["login_save"], time() + $s, '/', null, null, true);
            setcookie("lang", $_POST["lang"], time() + $s, '/', null, null, true);
            setcookie("ip_check", $_POST["ip_check"], time() + $s, '/', null, null, true);
            
        } else {
            
            setcookie("ftp_ssl", "", time() - 3600);
            setcookie("ftp_host", "", time() - 3600);
            setcookie("ftp_user", "", time() - 3600);
            setcookie("ftp_pass", "", time() - 3600);
            setcookie("ftp_port", "", time() - 3600);
            setcookie("ftp_pasv", "", time() - 3600);
            setcookie("interface", "", time() - 3600);
            setcookie("login_save", "", time() - 3600);
            setcookie("lang", "", time() - 3600);
            setcookie("ip_check", "", time() - 3600);
        }
    }
}

function attemptLogin()
{
    
    global $conn_id;
    global $ftpHost;
    global $ftpPort;
    global $ftpMode;
    global $ftpSSL;
    global $ftpDir;
    global $lang_missing_fields;
    global $lang_ip_conflict;
    
    if (connectFTP(0) == 1 && $_POST["login"] != 1) 
    {

?>
        <script type="text/javascript">
        alert("PLouf");
        </script>
<?php

        // Check for hijacked session with IP check
        if ($_SESSION["ip_check"] == 1) {
            
            if ($_SERVER['REMOTE_ADDR'] == $_SESSION["user_ip"]) {
                $_SESSION["loggedin"] = 1;
            } else {
                $_SESSION["errors"] = $lang_ip_conflict;
                sessionExpired($lang_ip_conflict);
                logOut();
            }
            
        } 
        else 
        {
            $_SESSION["loggedin"] = 1;
        }

    }
    
    else 
    {
?>
        <script type="text/javascript">
        alert("Zorro");
        </script>
<?php
        
        if ($_POST["login"] == 1) 
        {
            
            // Check for login errors
?>
                    <script type="text/javascript">
                    alert("Login");
                    </script>
<?php


           if (checkLoginErrors() == 1) 
           {
                
?>
            <script type="text/javascript">
            alert("Errors");
            </script>
<?php


                $_SESSION["login_error"] = $lang_missing_fields;
                displayLoginForm(1);
                
           } 
           
           else 
           {
                
?>
            <script type="text/javascript">
            alert("Blabla");
            </script>
<?php


                // Set POST vars to SESSION
                if ($ftpHost == "") 
                {
                    
                    $_SESSION["ftp_host"] = trim($_POST["ftp_host"]);
                    $_SESSION["ftp_port"] = trim($_POST["ftp_port"]);
                    $_SESSION["ftp_pasv"] = empty($_POST["ftp_pasv"])?0:1;
                    $_SESSION["ftp_ssl"]  = empty($_POST["ftp_ssl"])?0:1;
                    
                } 
                else 
                {
                    
                    $_SESSION["ftp_host"] = $ftpHost;
                    $_SESSION["ftp_port"] = $ftpPort;
                    $_SESSION["ftp_pasv"] = $ftpMode;
                    $_SESSION["ftp_ssl"]  = $ftpSSL;
                }
                
                $_SESSION["ftp_user"]  = trim($_POST["ftp_user"]);
                $_SESSION["ftp_pass"]  = trim($_POST["ftp_pass"]);
                $_SESSION["interface"] = empty($_POST["interface"])?"":"adv";
                $_SESSION["lang"]      = $_POST["lang"];
                $_SESSION["ip_check"]  = $_POST["ip_check"];
                
                if (connectFTP(1) == 1) 
                {
                    
?>
                    <script type="text/javascript">
                    var toto = "<?php echo " +++ Splendide "  ."   " .$_SESSION["logged_user"] ."  " .$_SESSION["ftp_user"] ."  "  .DB_mysql($_SESSION["ftp_user"]) ."  " .$ftpDir; ?>";    
                    alert(toto);
                    </script>
<?php

                    $_SESSION["loggedin"] = 1;
                    
                    ///555
                    //2024_PHP/2024_PHP_25_11_2024/FTP/Monsta-FTP-master


                    if( $_SESSION["logged_user"] === "patrice" )
                    {
                        $_SESSION["user_racine"] = "~/www/2024_PHP/2024_PHP_25_11_2024/FTP/Monsta-FTP-master";
                        //$dir = "~/www/2024_PHP/2024_PHP_18_11_2024";
                    }
                    
                    if( $_SESSION["logged_user"] === "john" )
                    {
                        $_SESSION["user_racine"] = "~/www/PATRICE";
                        //$dir = "~/www/2024_PHP/2024_PHP_18_11_2024";
                    }


                    $dir = $_SESSION["user_racine"];

                   
                        
                    
                    // Save user's IP address
                    $_SESSION["user_ip"] = $_SERVER['REMOTE_ADDR'];
                    
                    // Set platform
                    getPlatform();
                    
                    // Change dir if one set
                    if ($ftpDir != "") 
                    {
                        if (@ftp_chdir($conn_id, $ftpDir)) 
                        {
                            $_SESSION["dir_current"] = $ftpDir;

                           // $myfile = fopen("Init.txt", "w") or die("Unable to open file!");
                           // $txt = $ftpDir ."\n";
                           // fwrite($myfile, $txt);
                           // fclose($myfile);

                        } 
                        else 
                        {
                            if (@ftp_chdir($conn_id, "~" . $ftpDir))
                            {
                                $_SESSION["dir_current"] = "~" . $ftpDir;

                                //$myfile = fopen("Init.txt", "w") or die("Unable to open file!");
                                //$txt = $ftpDir ."\n";
                                //fwrite($myfile, $txt);
                                //fclose($myfile);
                            }    
                        }
                    }
                    
                } 
                
                else 
                {
?>
                    <script type="text/javascript">
                    alert("Bingo");
                    </script>
<?php
    

                    displayLoginForm(1);
                }
            }
            
        } 
        
        else 
        {
                // il faut afficher le formulaire de connexion
?>
                <script type="text/javascript">
                //var toto = "<?php echo " +++ " .$_SESSION["user_racine"] ."  " .$current; ?>";
                alert("Formulaire");
                </script>
<?php
                displayLoginForm(0);
        }
    }

    //$myfile = fopen("attempt_login.txt", "w") or die("Unable to open file!");
    //$txt = "Login " .$_SESSION["dir_current"]  ."\n";
    //fwrite($myfile, $txt);
    //fclose($myfile);
}

function displayHeader()
{

    $titre = basename($_SERVER["SCRIPT_FILENAME"], '.php');

?>
<!DOCTYPE html>
<html>
<head>
    <title>Patoche FTP - 2024</title> 
    <title><?php echo $titre;  ?></title>
    <link href="css/style.css?<?php echo date("U"); ?>" rel="stylesheet" type="text/css">
    <link href="css/colors.css?<?php echo date("U"); ?>" rel="stylesheet" type="text/css">

    <style>
        
        #headerDiv {
        height:40px;
        padding:20px 20px 20px 10px;
        }

        .center {
        padding:5px;
        }   
/*
        .center {
  margin: auto;
  width: 60%;
  border: 3px solid #73AD21;
  padding: 10px;
}
*/
/*.modal {
   /* display: block; /* none/* Hidden by default */
   /* position: fixed; /* Stay in place */
   /* z-index: 1; /* Sit on top */
   /* left: 0;
   /* top: 0;
   /* width: 100%; /* Full width */
   /* height: 100%; /* Full height */
   /* overflow: auto; /* Enable scroll if needed */
   /* background-color: rgb(0,0,0); /* Fallback color */
   /* background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
/*}

/* Modal Content */
/*
.modal-content {
    background-color: #fefefe;
    margin: 15% auto; /* 15% from the top and centered */
    /*padding: 20px;
    border: 1px solid #888;
    width: 80%; /* Could be more or less, depending on screen size */
    /*max-width: 600px;
}*/

    </style>    

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body <?php
    if ($_POST["login"] == 1) {
?>onresize="setFileWindowSize('ajaxContentWindow',0,0);"<?php
    }
?>>
<?php
}

function displayFooter()
{
?>
</body>
</html>
<?php
}

function displayLoginForm($posted)
{
    
    global $ftpHost;
    global $ajaxRequest;
    global $lang_max_logins;
    global $lang_btn_login;
    global $lang_ftp_host;
    global $lang_port;
    global $lang_passive_mode;
    global $lang_username;
    global $lang_password;
    global $lang_ftp_ssl;
    global $lang_adv_interface;
    global $lang_save_login;
    global $lang_ip_check;
    global $lang_session_expired;
    global $showAdvOption;
    global $showLockSess;
    


    // Check for lockout
    $date_now = date("YmdHis");
    
    if ($_SESSION["login_lockout"] > 0 && $date_now < $_SESSION["login_lockout"]) 
    {
        
        $n = ceil(($_SESSION["login_lockout"] - $date_now) / 60);
        
        $_SESSION["login_error"] = str_replace("[n]", $n, $lang_max_logins);
    }
    
    // Check for posted form
    if ($posted == 1) 
    {
?>        
        <script type="text/javascript">
        alert("DEBUG01");
        </script>
<?php
        // Set vars
        $ftp_ssl    = $_POST["ftp_ssl"];
        $ftp_host   = trim($_POST["ftp_host"]);
        $ftp_user   = trim($_POST["ftp_user"]);
        $ftp_pass   = trim($_POST["ftp_pass"]);
        $ftp_port   = trim($_POST["ftp_port"]);
        $ftp_pasv   = $_POST["ftp_pasv"];
        $interface  = $_POST["interface"];
        $lang       = $_POST["lang"];
        $login_save = $_POST["login_save"];
        $ip_check   = $_POST["ip_check"];
        
        $_SESSION["domain"] = $_SERVER["SERVER_NAME"];
        
    } 
    else 
    {
?>
        <script type="text/javascript">
        alert("DEBUG02");
        </script>
<?php
        // Set values from cookies
        if ($_COOKIE["login_save"] == 1) 
        {
            
            $ftp_ssl    = $_COOKIE["ftp_ssl"];
            $ftp_host   = $_COOKIE["ftp_host"];
            $ftp_user   = $_COOKIE["ftp_user"];
            $ftp_pass   = $_COOKIE["ftp_pass"];
            $ftp_port   = $_COOKIE["ftp_port"];
            $ftp_pasv   = $_COOKIE["ftp_pasv"];
            $interface  = $_COOKIE["interface"];
            $lang       = $_COOKIE["lang"];
            $login_save = $_COOKIE["login_save"];
            $ip_check   = $_COOKIE["ip_check"];
            
        } 
        else 
        {
            
?>
            <script type="text/javascript">
            alert("DEBUG03");
            </script>
<?php

            $ftp_port = 21;
            $ftp_pasv = 1;
        }
    }
    
    if ($ajaxRequest == 1) 
    {
?>
        <script type="text/javascript">
        alert("DEBUG04");
        </script>
<?php        
        sessionExpired($lang_session_expired);
        logOut();
        
    } 
    else 
    {
        
?>
        <script type="text/javascript">
        alert("DEBUG05");
        </script>
<?php        
        // Check for errors
        if ($_SESSION["login_error"] != "") 
        {
            $height = 522;
        } 
        else 
        {
            $height = 458;
        }
?>

<form method="post" action="?">

<div align="center">
    <div id="loginForm" align="left">
        <div id="loginFormTitle">FTP access</div>
            <div id="loginFormContent">

<?php
        if ($_SESSION["login_error"] != "") {
?>
<div id="loginFormError">
<?php
            echo $_SESSION["login_error"];
?>
</div>
<?php
        }
?>

<input type="hidden" name="login" value="1">
<input type="hidden" name="openFolder" value="<?php
        echo sanitizeStr($_GET["openFolder"]);
?>">

<?php
        if ($ftpHost == "") {
?>
<?php
            echo $lang_ftp_host;
?>:

<?php $ftp_host = "ftp.cluster011.hosting.ovh.net"; ?>


<br><input type="text" name="ftp_host" value="<?php
            echo sanitizeStrTrim($ftp_host);
?>" size="30" class="<?php
            if ($posted == 1 && $ftp_host == "")
                echo "bgFormError";
?>"> 
<?php
            echo $lang_port;
?>: <input type="text" name="ftp_port" value="<?php
            echo sanitizeStrTrim($ftp_port);
?>" size="3" class="<?php
            if ($posted == 1 && $ftp_port == "")
                echo "bgFormError";
?>" tabindex="-1"> 
<p>
<?php
        }
?>

<?php
        echo $lang_username;
?>:

<?php $ftp_user = "analogde"; ?>

<br><input type="text" name="ftp_user" value="<?php
        echo sanitizeStrTrim($ftp_user);
?>" size="30" class="<?php
        if ($posted == 1 && $ftp_user == "")
            echo "bgFormError";
?>">

<p><?php
        echo $lang_password;
?>:

<?php $ftp_pass = "rainbow"; ?>


<br><input type="password" name="ftp_pass" value="<?php
        echo sanitizeStrTrim($ftp_pass);
?>" size="30" class="<?php
        if ($posted == 1 && $ftp_pass == "")
            echo "bgFormError";
?>" autocomplete="off">

<p><input type="submit" value="<?php
        echo $lang_btn_login;
?>" id="btnLogin">

<br><br>

<p><hr noshade>

<?php
        if ($ftpHost == "") {
?>
<p><input type="checkbox" name="ftp_pasv" value="1" <?php
            if ($ftp_pasv == 1)
                echo "checked";
?> tabindex="-1"> <?php
            echo $lang_passive_mode;
?>
<?php
            if (function_exists('ftp_ssl_connect')) {
?>
<p><input type="checkbox" name="ftp_ssl" value="1" <?php
            if ($ftp_ssl == 1)
                echo "checked";
?> tabindex="-1"> <?php
            echo $lang_ftp_ssl;
?>
<?php
            }
        }
?>
<?php
        if ($showLockSess == 1) {
?>
<p><input type="checkbox" name="ip_check" value="1" <?php
        if ($ip_check == 1)
            echo "checked";
?> tabindex="-1"> <?php
        echo $lang_ip_check;
?>
<?php
}
?>
<?php
        if ($showAdvOption == 1) {
?>
<p><input type="checkbox" name="interface" value="adv" <?php
        if ($interface == "adv" || $interface == "")
            echo "checked";
?> tabindex="-1"> <?php
        echo $lang_adv_interface;
?>
<?php
} else {
?>
<input type="hidden" name="interface" value="">
<?php
}
?>
<p><input type="checkbox" name="login_save" value="1" <?php
        if ($login_save == 1)
            echo "checked";
?> tabindex="-1"> <?php
        echo $lang_save_login;
?>

<p><hr noshade>

<?php
        echo displayLangSelect($_SESSION["lang"]);
?>
        </div>
    </div>
</div>

</form>

<?php
        // Reset error
        $_SESSION["login_error"] = "";
    }
}

function checkLoginErrors()
{
    
    global $ftpHost;
    
    // Check for blank fields
    if ($ftpHost == "") {
        if ($_POST["ftp_host"] == "" || trim($_POST["ftp_user"]) == "" || trim($_POST["ftp_pass"]) == "" || trim($_POST["ftp_port"]) == "")
            return 1;
        else
            return 0;
    }
    
    if ($ftpHost != "") {
        if (trim($_POST["ftp_user"]) == "" || trim($_POST["ftp_pass"]) == "")
            return 1;
        else
            return 0;
    }
}

function connectFTP($posted)
{
    
    global $conn_id;
    global $lockOutTime;
    global $lang_cant_connect;
    global $lang_cant_authenticate;
    
    if ($_SESSION["ftp_host"] != "" && $_SESSION["ftp_port"] != "" && $_SESSION["ftp_user"] != "" && $_SESSION["ftp_pass"] != "") {
        
        // Connect
        if ($_SESSION["ftp_ssl"] == 1)
            $conn_id = @ftp_ssl_connect($_SESSION["ftp_host"], $_SESSION["ftp_port"]) or $connectFail = 1;
        else
            $conn_id = @ftp_connect($_SESSION["ftp_host"], $_SESSION["ftp_port"]) or $connectFail = 1;
        
        if ($connectFail == 1) {
            $_SESSION["login_error"] = $lang_cant_connect;
            return 0;
        } else {
            
            // Check for lockout
            $date_now = date("YmdHis");
            if ($_SESSION["login_lockout"] == "" || ($_SESSION["login_lockout"] > 0 && $date_now > $_SESSION["login_lockout"])) {
                
                // Authenticate
                if (@ftp_login($conn_id, $_SESSION["ftp_user"], $_SESSION["ftp_pass"])) {
                    
                    if ($_SESSION["ftp_pasv"] == 1)
                        @ftp_pasv($conn_id, true);
                    
                    $_SESSION["loggedin"]    = 1;
                    $_SESSION["login_fails"] = 0;
                    
                    return 1;
                    
                } else {
                    
                    $_SESSION["login_error"] = $lang_cant_authenticate;
                    
                    // Count the failed login attempts (if form posted)
                    if ($posted == 1) 
                    {
                        /*
                        $_SESSION["login_fails"]++;
                        
                        // Lock user for 5 minutes if 3 failed attempts
                        if ($_SESSION["login_fails"] >= 3)
                            $_SESSION["login_lockout"] = date("YmdHis") + ($lockOutTime * 60);
                        */    
                    }
                    
                    return 0;
                }
            }
        }
    } else {
        return 0;
    }
}

function writeHiddenDivs()
{
?>
<div id="contextMenu" style="visibility: hidden; display: none;"></div>
<div id="indicatorDiv" style="z-index: 1; visibility: hidden; display: none"><img src="images/indicator.gif" width="32" height="32" alt="" style="border:0"></div>
<?php
}

function displayFormStart()
{
?>
<form method="post" action="?" enctype="multipart/form-data" name="ftpActionForm" id="ftpActionForm">
<?php
}

function displayFormEnd()
{
?>
</form>
<?php
}

function displayAjaxIframe()
{
?>
<iframe name="ajaxIframe" id="ajaxIframe" width="0" height="0" style="display:none;visibility:hidden;border:0"></iframe>
<?php
}

function loadAjax()
{
?>
<script type="text/javascript" src="ajax.js?<?php echo date("U"); ?>" charset="utf-8"></script>
<?php
}

function getFtpRawList($folder_path)
{




    $myfile = fopen("RawList.txt", "w") or die("Unable to open file!");
    $txt = " RawList " .$folder_path ."\n";
    fwrite($myfile, $txt);
   

    // Because ftp_rawlist() doesn't support folders with spaces in
    // their names, it is neccessary to first change into the directory.
    
    global $conn_id;
    global $lang_folder_cant_access;
    
    $isError = 0;
    
    if (!@ftp_chdir($conn_id, $folder_path)) 
    {
        if (checkFirstCharTilde($folder_path) == 1) 
        {
            if (!@ftp_chdir($conn_id, replaceTilde($folder_path))) 
            {
                recordFileError("folder", replaceTilde($folder_path), $lang_folder_cant_access);
                $isError = 1;
            }
        } 
        else 
        {
            recordFileError("folder", $folder_path, $lang_folder_cant_access);
            $isError = 1;
        }
    }


    

    if ($isError == 0)
    {

        if( file_exists("IsError.txt") )
        {
            //$myfile = fopen("NextIsError.txt", "w") or die("Unable to open file!");
            // $txt = " Encore IsError " .$isError ."\n";
            //fwrite($myfile, $txt);
            //fclose($myfile);
        }

        else
        {
            //$myfile = fopen("IsError.txt", "w") or die("Unable to open file!");
            //$txt = " IsError " .$isError ."\n";
            //fwrite($myfile, $txt);
            //fclose($myfile);
        }

        return ftp_rawlist($conn_id, ".");

    }    
}


function displayFiles()
{
    
    /// 555
    global $conn_id;
    global $lang_table_name;
    global $lang_table_size;
    global $lang_table_date;
    global $lang_table_time;
    global $lang_table_user;
    global $lang_table_group;
    global $lang_table_perms;

   

    //$racine = "https://analog-design.net/2024_PHP/2024_PHP_18_11_2024/";

    //$_SESSION["dir_current"] = "~/www/2024_PHP/2024_PHP_18_11_2024";
    
    $myfile = fopen("display_files.txt", "w") or die("Unable to open file!");
    $txt = $_SESSION["dir_current"] ."\n";
    fwrite($myfile, $txt);
    fclose($myfile);
    
    $ftp_rawlist = getFtpRawList($_SESSION["dir_current"]);
    
    # TABLE HEADER
    
    echo "<table width=\"100%\" cellpadding=\"7\" cellspacing=\"0\" id=\"ftpTable\">";
    echo "<tr>";
    echo "<td width=\"16\" class=\"ftpTableHeadingNf\"><input type=\"checkbox\" id=\"checkboxSelector\" onClick=\"checkboxSelectAll()\"></td>";
    echo "<td width=\"16\" class=\"ftpTableHeadingNf\"></td>";
    echo "<td class=\"ftpTableHeading\">" . getFtpColumnSpan("n", $lang_table_name) . "</td>";
    echo "<td width=\"10%\" class=\"ftpTableHeading\">" . getFtpColumnSpan("s", $lang_table_size) . "</td>";
    echo "<td width=\"10%\" class=\"ftpTableHeading\">" . getFtpColumnSpan("d", $lang_table_date) . "</td>";
    echo "<td width=\"10%\" class=\"ftpTableHeading\">" . getFtpColumnSpan("t", $lang_table_time) . "</td>";
    
    // Only display permissions/user/group for Linux advanced
    if ($_SESSION["interface"] == "adv" && $_SESSION["win_lin"] != "win") {
        echo "<td width=\"10%\" class=\"ftpTableHeading\">" . $lang_table_user . "</td>";
        echo "<td width=\"10%\" class=\"ftpTableHeading\">" . $lang_table_group . "</td>";
        echo "<td width=\"10%\" class=\"ftpTableHeading\">" . $lang_table_perms . "</td>";
    }
    
    echo "</tr>";
    
    # FOLDER UP BUTTON
    
    if ($_SESSION["dir_current"] != "/" && $_SESSION["dir_current"] != "~") 
    {
        
        /*
        echo "<tr>";
        echo "<td width=\"16\"></td>";
        echo "<td width=\"16\"><img src=\"images/icon_16_folder.gif\" width=\"16\" height=\"16\" alt=\"\"></td>";
        
        if ($_SESSION["interface"] == "adv")
            echo "<td colspan=\"7\">";
        else
            echo "<td colspan=\"4\">";
        */

        // Get the parent directory
        $parent = getParentDir($_SESSION["dir_current"]);
        
        $current = $_SESSION["dir_current"];
        //$user_racine = "~/www/2024_PHP/2024_PHP_18_11_2024";

?>
        <script type="text/javascript">
        // Utiliser PHP pour écrire le contenu de la variable $toto dans le script JavaScript
        var toto = "<?php echo " +++ " .$_SESSION["user_racine"] ."  " .$current; ?>";
        alert(toto);
        
        </script>
<?php

        if( $current !== $_SESSION["user_racine"] )
        {

            echo "<tr>";
            echo "<td width=\"16\"></td>";
            echo "<td width=\"16\"><img src=\"images/icon_16_folder.gif\" width=\"16\" height=\"16\" alt=\"\"></td>";
            
            if ($_SESSION["interface"] == "adv")
                echo "<td colspan=\"7\">";
            else
                echo "<td colspan=\"4\">";

?>
<!--
            <script type="text/javascript">
            // Utiliser PHP pour écrire le contenu de la variable $toto dans le script JavaScript
            //var toto = "<?php echo $parent ."  " .$current; ?>";
            //alert(toto);
            alert("bingo");
            </script>
        -->
<?php
            echo "<div class=\"width100pc\" onDragOver=\"dragFile(event); selectFile('folder0',0);\" onDragLeave=\"unselectFolder('folder0')\" onDrop=\"dropFile('" . rawurlencode($parent) . "')\"><a href=\"#\" id=\"folder0\" draggable=\"false\" onClick=\"openThisFolder('" . rawurlencode($parent) . "',1)\">...</a></div>";

            echo "</td>";
            echo "</tr>";
       }

        $myfile = fopen("ParentFolder.txt", "w") or die("Unable to open file!");
        $txt = $parent ."\n";
        fwrite($myfile, $txt);
        fclose($myfile);
        
        // openThisFolder dans javascript
        // processForm dans javascript

        
        // blocage si le parent est interdit d'accés : ~/www

        //$racine = "~/www";        

        //if (strcmp($racine, $parent) !== 0) 
        //{
        /////    echo "<div class=\"width100pc\" onDragOver=\"dragFile(event); selectFile('folder0',0);\" onDragLeave=\"unselectFolder('folder0')\" onDrop=\"dropFile('" . rawurlencode($parent) . "')\"><a href=\"#\" id=\"folder0\" draggable=\"false\" onClick=\"openThisFolder('" . rawurlencode($parent) . "',1)\">...</a></div>";
        //}

       
        //echo "<div class=\"width100pc\" onDragOver=\"dragFile(event); selectFile('folder0',0);\" onDragLeave=\"unselectFolder('folder0')\" onDrop=\"dropFile('" . rawurlencode($parent) . "')\"><a href=\"#\" id=\"folder0\" draggable=\"false\" onClick=\"openThisFolder('" . rawurlencode($parent) . "',1)\">...</a></div>";
        
        //echo "</td>";
        //echo "</tr>";
    }
    
    # FOLDERS & FILES
    
    if (sizeof($ftp_rawlist) > 0) {
        
        // Linux
        if ($_SESSION["win_lin"] == "lin" || $_SESSION["win_lin"] == "mac") {
            echo createFileFolderArrayLin($ftp_rawlist, "folders");
            echo createFileFolderArrayLin($ftp_rawlist, "links");
            echo createFileFolderArrayLin($ftp_rawlist, "files");
        }
        
        // Windows
        elseif ($_SESSION["win_lin"] == "win") {
            echo createFileFolderArrayWin($ftp_rawlist, "folders");
            echo createFileFolderArrayWin($ftp_rawlist, "files");
        }
    }
    
    # CLOSE TABLE
    
    echo "</table>";
}

function xxxxxxdisplayFiles()
{
    
    /// 555
    global $conn_id;
    global $lang_table_name;
    global $lang_table_size;
    global $lang_table_date;
    global $lang_table_time;
    global $lang_table_user;
    global $lang_table_group;
    global $lang_table_perms;

   

    //$racine = "https://analog-design.net/2024_PHP/2024_PHP_18_11_2024/";

    //$_SESSION["dir_current"] = "~/www/2024_PHP/2024_PHP_18_11_2024";
    
    $myfile = fopen("display_files.txt", "w") or die("Unable to open file!");
    $txt = " Ce qui doit être charger : "  .$_SESSION["dir_current"] ."\n";
    fwrite($myfile, $txt);
    fclose($myfile);
    
    $ftp_rawlist = getFtpRawList($_SESSION["dir_current"]);
    
    # TABLE HEADER
    
    echo "<table width=\"100%\" cellpadding=\"7\" cellspacing=\"0\" id=\"ftpTable\">";
    echo "<tr>";
    echo "<td width=\"16\" class=\"ftpTableHeadingNf\"><input type=\"checkbox\" id=\"checkboxSelector\" onClick=\"checkboxSelectAll()\"></td>";
    echo "<td width=\"16\" class=\"ftpTableHeadingNf\"></td>";
    echo "<td class=\"ftpTableHeading\">" . getFtpColumnSpan("n", $lang_table_name) . "</td>";
    echo "<td width=\"10%\" class=\"ftpTableHeading\">" . getFtpColumnSpan("s", $lang_table_size) . "</td>";
    echo "<td width=\"10%\" class=\"ftpTableHeading\">" . getFtpColumnSpan("d", $lang_table_date) . "</td>";
    echo "<td width=\"10%\" class=\"ftpTableHeading\">" . getFtpColumnSpan("t", $lang_table_time) . "</td>";
    
    // Only display permissions/user/group for Linux advanced
    if ($_SESSION["interface"] == "adv" && $_SESSION["win_lin"] != "win") {
        echo "<td width=\"10%\" class=\"ftpTableHeading\">" . $lang_table_user . "</td>";
        echo "<td width=\"10%\" class=\"ftpTableHeading\">" . $lang_table_group . "</td>";
        echo "<td width=\"10%\" class=\"ftpTableHeading\">" . $lang_table_perms . "</td>";
    }
    
    echo "</tr>";
    
    # FOLDER UP BUTTON
    
    if ($_SESSION["dir_current"] != "/" && $_SESSION["dir_current"] != "~") 
    {
        

       // echo '<script language="javascript">';
        //echo 'alert("Interface")';
        //echo '</script>';    

        // Get the parent directory
        $parent = getParentDir($_SESSION["dir_current"]);
        $racine = "~/www/2024_PHP/2024_PHP_18_11_2024";
?>        
      

<?php
        echo '<script language="javascript">';
        echo 'alert("<?php echo $parent; ?>"  )';
        echo '</script>'; 

        /*if (strcmp($racine, $parent) != 0) 
        {
            echo "<tr>";
            echo "<td width=\"16\"></td>";
            echo "<td width=\"16\"><img src=\"images/icon_16_folder.gif\" width=\"16\" height=\"16\" alt=\"\"></td>";
        }

        if ($_SESSION["interface"] == "adv")
            echo "<td colspan=\"7\">";
        else
            echo "<td colspan=\"4\">";
        */
        // Get the parent directory
        //$parent = getParentDir($_SESSION["dir_current"]);
        //$racine = "~/www/2024_PHP/2024_PHP_18_11_2024";


        
        
        // openThisFolder dans javascript
        // processForm dans javascript

        
        // blocage si le parent est interdit d'accés : ~/www

        //$racine = "~/www";        

        //If this function returns 0, the two strings are equal.
       /* if (strcmp($racine, $parent) == 0) 
        {
            echo '<script language="javascript">';
            echo 'alert("Interface")';
            echo '</script>'; 
            echo "<div class=\"width100pc\" onDragOver=\"dragFile(event); selectFile('folder0',0);\" onDragLeave=\"unselectFolder('folder0')\" onDrop=\"dropFile('" . rawurlencode($parent) . "')\"><a href=\"#\" id=\"folder0\" draggable=\"false\" onClick=\"openThisFolder('" . rawurlencode($parent) . "',1)\">...</a></div>";
        }*/

       
        //echo "<div class=\"width100pc\" onDragOver=\"dragFile(event); selectFile('folder0',0);\" onDragLeave=\"unselectFolder('folder0')\" onDrop=\"dropFile('" . rawurlencode($parent) . "')\"><a href=\"#\" id=\"folder0\" draggable=\"false\" onClick=\"openThisFolder('" . rawurlencode($parent) . "',1)\">...</a></div>";
        
        echo "</td>";
        echo "</tr>";
    }
    
    # FOLDERS & FILES
    
    if (sizeof($ftp_rawlist) > 0) {
        
        // Linux
        if ($_SESSION["win_lin"] == "lin" || $_SESSION["win_lin"] == "mac") {
            echo createFileFolderArrayLin($ftp_rawlist, "folders");
            echo createFileFolderArrayLin($ftp_rawlist, "links");
            echo createFileFolderArrayLin($ftp_rawlist, "files");
        }
        
        // Windows
        elseif ($_SESSION["win_lin"] == "win") {
            echo createFileFolderArrayWin($ftp_rawlist, "folders");
            echo createFileFolderArrayWin($ftp_rawlist, "files");
        }
    }
    
    # CLOSE TABLE
    
    echo "</table>";
}

function getPlatform()
{
    
    global $conn_id;
    
    if ($_SESSION["win_lin"] == "") {
        
        $type = ftp_systype($conn_id);
    
        if (preg_match("/unix/i", $type, $matches))
            $win_lin = "lin";
        if (preg_match("/windows/i", $type, $matches))
            $win_lin = "win";
        
        $_SESSION["win_lin"] = $win_lin;
    }
}

function createFileFolderArrayLin($ftp_rawlist, $type)
{
    global $showDotFiles;
    
    // Go through array of files/folders
    foreach ($ftp_rawlist AS $ff) {
        
        // Reset values
        $time = "";
        $year = "";
        
        // Split up array into values
        //$ff = preg_split("/[\s]+/", $ff, 9);
        preg_match('/'. str_repeat('([^\s]+)\s+',7) . '([^\s]+) (.+)/', $ff, $matches);
        $ff = array_slice($matches, 1);
        
        $perms = $ff[0];
        $user  = $ff[2];
        $group = $ff[3];
        $size  = $ff[4];
        $month = $ff[5];
        $day   = $ff[6];
        $file  = $ff[8];
        
        // Check if file starts with a dot
        $dot_prefix = 0;
        if ($showDotFiles == 0) {
            if (preg_match("/^\.+/", $file))
                $dot_prefix = 1;
        }
        
        if ($file != "." && $file != ".." && $dot_prefix == 0) {
            
            // Where the last mod date is the previous year, the year will be displayed in place of the time
            if (preg_match("/:/", $ff[7]))
                $time = $ff[7];
            else
                $year = $ff[7];
            
            // Set date
            $date = formatFtpDate($day, $month, $year);
            
            // Reset user and group
            if ($user == "0")
                $user = "-";
            if ($group == "0")
                $group = "-";
            
            // Add folder to array
            if (getFileType($perms) == "d") {
                $foldAllAr[]   = $file . "|d|" . $date . "|" . $time . "|" . $user . "|" . $group . "|" . $perms;
                $foldNameAr[]  = $file;
                $foldDateAr[]  = $date;
                $foldTimeAr[]  = $time;
                $foldUserAr[]  = $user;
                $foldGroupAr[] = $group;
                $foldPermsAr[] = $perms;
            }
            
            // Add link to array
            if (getFileType($perms) == "l") {
                $linkAllAr[]   = $file . "|l|" . $date . "|" . $time . "|" . $user . "|" . $group . "|" . $perms;
                $linkNameAr[]  = $file;
                $linkDateAr[]  = $date;
                $linkTimeAr[]  = $time;
                $linkUserAr[]  = $user;
                $linkGroupAr[] = $group;
                $linkPermsAr[] = $perms;
            }
            
            // Add file to array
            if (getFileType($perms) == "f") {
                $fileAllAr[]   = $file . "|" . $size . "|" . $date . "|" . $time . "|" . $user . "|" . $group . "|" . $perms;
                $fileNameAr[]  = $file;
                $fileSizeAr[]  = $size;
                $fileDateAr[]  = $date;
                $fileTimeAr[]  = $time;
                $fileUserAr[]  = $user;
                $fileGroupAr[] = $group;
                $filePermsAr[] = $perms;
            }
        }
    }
    
    // Check there are files and/or folders to display
    if (is_array($foldAllAr) || is_array($linkAllAr) || is_array($fileAllAr)) {
        
        // Set sorting order
        if ($_POST["sort"] == "")
            $sort = "n";
        else
            $sort = $_POST["sort"];
        
        if ($_POST["ord"] == "")
            $ord = "asc";
        else
            $ord = $_POST["ord"];
        
        // Return folders
        if ($type == "folders") {
            
            if (is_array($foldAllAr)) {
                
                // Set the folder arrays to sort
                if ($sort == "n")
                    $sortAr = $foldNameAr;
                if ($sort == "d")
                    $sortAr = $foldDateAr;
                if ($sort == "t")
                    $sortAr = $foldTimeAr;
                if ($sort == "u")
                    $sortAr = $foldUserAr;
                if ($sort == "g")
                    $sortAr = $foldGroupAr;
                if ($sort == "p")
                    $sortAr = $foldPermsAr;
                
                // Multisort array
                if (is_array($sortAr)) {
                    if ($ord == "asc")
                        array_multisort($sortAr, SORT_ASC, $foldAllAr);
                    else
                        array_multisort($sortAr, SORT_DESC, $foldAllAr);
                }
                
                // Format and display folder content
                $folders = getFileListHtml($foldAllAr, "icon_16_folder.gif");
            }
            
            return $folders;
        }
        
        // Return links
        if ($type == "links") {
            
            if (is_array($linkAllAr)) {
                
                // Set the folder arrays to sort
                if ($sort == "n")
                    $sortAr = $linkNameAr;
                if ($sort == "d")
                    $sortAr = $linkDateAr;
                if ($sort == "t")
                    $sortAr = $linkTimeAr;
                if ($sort == "u")
                    $sortAr = $linkUserAr;
                if ($sort == "g")
                    $sortAr = $linkGroupAr;
                if ($sort == "p")
                    $sortAr = $linkPermsAr;
                
                // Multisort array
                if (is_array($sortAr)) {
                    if ($ord == "asc")
                        array_multisort($sortAr, SORT_ASC, $linkAllAr);
                    else
                        array_multisort($sortAr, SORT_DESC, $linkAllAr);
                }
                
                // Format and display folder content
                $links = getFileListHtml($linkAllAr, "icon_16_link.gif");
            }
            
            return $links;
        }
        
        // Return files
        if ($type == "files") {
            
            if (is_array($fileAllAr)) {
                
                // Set the folder arrays to sort
                if ($sort == "n")
                    $sortAr = $fileNameAr;
                if ($sort == "s")
                    $sortAr = $fileSizeAr;
                if ($sort == "d")
                    $sortAr = $fileDateAr;
                if ($sort == "t")
                    $sortAr = $fileTimeAr;
                if ($sort == "u")
                    $sortAr = $fileUserAr;
                if ($sort == "g")
                    $sortAr = $fileGroupAr;
                if ($sort == "p")
                    $sortAr = $filePermsAr;
                
                // Multisort folders
                if ($ord == "asc")
                    array_multisort($sortAr, SORT_ASC, $fileAllAr);
                else
                    array_multisort($sortAr, SORT_DESC, $fileAllAr);
                
                // Format and display file content
                $files = getFileListHtml($fileAllAr, "icon_16_file.gif");
            }
            
            return $files;
        }
    }
}

function createFileFolderArrayWin($ftp_rawlist, $type)
{
    
    // Go through array of files/folders
    foreach ($ftp_rawlist AS $ff) {
        
        // Split up array into values
        $ff = preg_split("/[\s]+/", $ff, 4);
        
        $date = $ff[0];
        $time = $ff[1];
        $size = $ff[2];
        $file = $ff[3];
        
        if ($size == "<DIR>")
            $size = "d";
        
        // Format date
        $day   = substr($date, 3, 2);
        $month = substr($date, 0, 2);
        $year  = substr($date, 6, 4);
        $date  = formatFtpDate($day, $month, $year);
        
        // Format time
        $time = formatWinFtpTime($time);
        
        // Add folder to array
        if ($size == "d") {
            $foldAllAr[]  = $file . "|d|" . $date . "|" . $time . "|||";
            $foldNameAr[] = $file;
            $foldDateAr[] = $date;
            $foldTimeAr[] = $time;
        }
        
        // Add file to array
        if ($size != "d") {
            $fileAllAr[]  = $file . "|" . $size . "|" . $date . "|" . $time . "|||";
            $fileNameAr[] = $file;
            $fileSizeAr[] = $size;
            $fileDateAr[] = $date;
            $fileTimeAr[] = $time;
        }
    }
    
    // Check there are files and/or folders to display
    if (is_array($foldAllAr) || is_array($fileAllAr)) {
        
        // Set sorting order
        if ($_POST["sort"] == "")
            $sort = "n";
        else
            $sort = $_POST["sort"];
        
        if ($_POST["ord"] == "")
            $ord = "asc";
        else
            $ord = $_POST["ord"];
        
        // Return folders
        if ($type == "folders") {
            
            if (is_array($foldAllAr)) {
                
                // Set the folder arrays to sort
                if ($sort == "n")
                    $sortAr = $foldNameAr;
                if ($sort == "d")
                    $sortAr = $foldDateAr;
                if ($sort == "t")
                    $sortAr = $foldTimeAr;
                
                // Multisort array
                if (is_array($sortAr)) {
                    if ($ord == "asc")
                        array_multisort($sortAr, SORT_ASC, $foldAllAr);
                    else
                        array_multisort($sortAr, SORT_DESC, $foldAllAr);
                }
                
                // Format and display folder content
                $folders = getFileListHtml($foldAllAr, "icon_16_folder.gif");
            }
            
            return $folders;
        }
        
        // Return files
        if ($type == "files") {
            
            if (is_array($fileAllAr)) {
                
                // Set the folder arrays to sort
                if ($sort == "n")
                    $sortAr = $fileNameAr;
                if ($sort == "s")
                    $sortAr = $fileSizeAr;
                if ($sort == "d")
                    $sortAr = $fileDateAr;
                if ($sort == "t")
                    $sortAr = $fileTimeAr;
                
                // Multisort folders
                if ($ord == "asc")
                    array_multisort($sortAr, SORT_ASC, $fileAllAr);
                else
                    array_multisort($sortAr, SORT_DESC, $fileAllAr);
                
                // Format and display file content
                $files = getFileListHtml($fileAllAr, "icon_16_file.gif");
            }
            
            return $files;
        }
    }
}

function getFileListHtml($array, $image)
{
    
    global $trCount;
    global $dateFormatUsa;
    
    if ($trCount == 1)
        $trCount = 1;
    else
        $trCount = 0;
    
    $i = 1;
    foreach ($array AS $file) {
        
        list($file, $size, $date, $time, $user, $group, $perms) = explode("|", $file);
        
        // Folder check (lin/win)
        if ($size == "d")
            $action = "folderAction";
        // Link check (lin/win)
        if ($size == "l")
            $action = "linkAction";
        // File check (lin/win)
        if ($size != "d" && $size != "l")
            $action = "fileAction";
        
        // Set file path
        if ($size == "l") {
            
            $file_path = getPathFromLink($file);
            $file      = preg_replace("/ -> .*/", "", $file);
            
        } else {
            
            if ($_SESSION["dir_current"] == "/")
                $file_path = "/" . $file;
            else
                $file_path = $_SESSION["dir_current"] . "/" . $file;
        }
        
        if ($trCount == 0) {
            $trClass = "trBg0";
            $trCount = 1;
        } else {
            $trClass = "trBg1";
            $trCount = 0;
        }
        
        // Check for checkbox check (only if action button clicked)
        if ($_POST["ftpAction"] != "") {
            if ((sizeof($_SESSION["clipboard_rename"]) > 1 && in_array($file, $_SESSION["clipboard_rename"])) || (sizeof($_SESSION["clipboard_chmod"]) > 1 && in_array($file_path, $_SESSION["clipboard_chmod"])))
                $checked = "checked";
            else
                $checked = "";
            
        } else {
            $checked = "";
        }
        
        // Set the date
        if ($dateFormatUsa == 1)
            $date = substr($date, 4, 2) . "/" . substr($date, 6, 2) . "/" . substr($date, 2, 2);
        else
            $date = substr($date, 6, 2) . "/" . substr($date, 4, 2) . "/" . substr($date, 2, 2);
        
        $html .= "<tr class=\"" . $trClass . "\">";
        $html .= "<td>";
        $html .= "<input type=\"checkbox\" name=\"" . $action . "[]\" value=\"" . rawurlencode($file_path) . "\" onclick=\"checkFileChecked()\" " . $checked . ">";
        $html .= "</td>";
        $html .= "<td><img src=\"images/" . $image . "\" width=\"16\" height=\"16\"></td>";
        $html .= "<td>";
        
        // Display Folders
        if ($action == "folderAction")
            $html .= "<div class=\"width100pc\" onDragOver=\"dragFile(event); selectFile('folder" . $i . "',0);\" onDragLeave=\"unselectFolder('folder" . $i . "')\" onDrop=\"dropFile('" . rawurlencode($file_path) . "')\"><a href=\"#\" id=\"folder" . $i . "\" onClick=\"openThisFolder('" . rawurlencode($file_path) . "',1)\" onContextMenu=\"selectFile(this.id,1); displayContextMenu(event,'','" . rawurlencode($file_path) . "'," . assignWinLinNum() . ")\" draggable=\"true\" onDragStart=\"selectFile(this.id,1); setDragFile('','" . rawurlencode($file_path) . "')\">" . str_replace(" ","&nbsp;",sanitizeStr($file)) . "</a></div>";

        // Display Links
        if ($action == "linkAction")
            $html .= "<div class=\"width100pc\"><a href=\"#\" id=\"folder" . $i . "\" onClick=\"openThisFolder('" . rawurlencode($file_path) . "',1)\" onContextMenu=\"\" draggable=\"false\">" . str_replace(" ","&nbsp;",sanitizeStr($file)) . "</a></div>";
        
        // Display files
        if ($action == "fileAction")
            $html .= "<a href=\"?dl=" . rawurlencode($file_path) . "\" id=\"file" . $i . "\" target=\"ajaxIframe\" onContextMenu=\"selectFile(this.id,1); displayContextMenu(event,'" . rawurlencode($file_path) . "',''," . assignWinLinNum() . ")\" draggable=\"true\" onDragStart=\"selectFile(this.id,1); setDragFile('" . rawurlencode($file_path) . "','')\">" . str_replace(" ","&nbsp;",sanitizeStr($file)) . "</a>";
         
        $html .= "</td>";
        $html .= "<td>" . formatFileSize($size) . "</td>";
        $html .= "<td>" . $date . "</td>";
        $html .= "<td>" . $time . "</td>";
        
        if ($_SESSION["interface"] == "adv" && ($_SESSION["win_lin"] == "lin" || $_SESSION["win_lin"] == "mac")) {
            $html .= "<td>" . $user . "</td>";
            $html .= "<td>" . $group . "</td>";
            $html .= "<td>" . $perms . "</td>";
        }
        
        $html .= "</tr>";
        
        $i++;
    }
    
    return $html;
}

function getPathFromLink($file)
{
    
    $file_path = preg_replace("/.* -> /", "", $file);
    
    // Check if path is not absolute
    if (substr($file_path, 0, 1) != "/") {
        
        // Count occurances of ../
        $i = 0;
        while (substr($file_path, 0, 3) == "../") {
            $i++;
            $file_path = substr($file_path, 3, strlen($file_path));
        }
        
        $dir_current = $_SESSION["dir_current"];
        
        // Get the real parent
        for ($j = 0; $j < $i; $j++) {
            $dir_current = getParentDir($dir_current);
        }
        
        // Set the path
        if ($dir_current == "/")
            $file_path = "/" . $file_path;
        else
            $file_path = $dir_current . "/" . $file_path;
    }
    
    if ($file_path == "~/")
        $file_path = "~";
    
    return $file_path;
}

function formatFtpDate($day, $month, $year)
{
    
    // Add leading zero to day
    if (strlen($day) == 1)
        $day = "0" . $day;
    
    if ($month == "Jan")
        $month = "01";
    if ($month == "Feb")
        $month = "02";
    if ($month == "Mar")
        $month = "03";
    if ($month == "Apr")
        $month = "04";
    if ($month == "May")
        $month = "05";
    if ($month == "Jun")
        $month = "06";
    if ($month == "Jul")
        $month = "07";
    if ($month == "Aug")
        $month = "08";
    if ($month == "Sep")
        $month = "09";
    if ($month == "Oct")
        $month = "10";
    if ($month == "Nov")
        $month = "11";
    if ($month == "Dec")
        $month = "12";
    
    // Set the year if none
    if ($year == "") {
        
        // First check if the date falls within the last 12 months (as year only appears after 12 months has passed)
        $current_month = date("m");
        
        if ($month > $current_month)
            $year = date("Y") - 1;
        else
            $year = date("Y");
    }
    
    if (strlen($year) == 2) {
        
        // To avoid a future Y2K problem, check the first two digits of year on Windows
        if ($year > 00 && $year < 99)
            $year = substr(date("Y"), 0, 2) . $year;
        else
            $year = (substr(date("Y"), 0, 2) - 1) . $year;
    }
    
    $date = $year . $month . $day;
    
    return $date;
}

function formatWinFtpTime($time)
{
    
    $h     = substr($time, 0, 2);
    $m     = substr($time, 3, 2);
    $am_pm = substr($time, 5, 2);
    
    if ($am_pm == "PM")
        $h = $h + 12;
    
    $time = $h . ":" . $m;
    
    return $time;
}

function openFolder()
{
    
    global $conn_id;
    global $lang_folder_doesnt_exist;
    
/*
    $myfile = fopen("open_folder.txt", "w") or die("Unable to open file!");
    $txt = "Open folder" ."\n";
    fwrite($myfile, $txt);
    $txt = "Info 1 : "  .$_SESSION["loggedin"]."\n";
    fwrite($myfile, $txt);
    $txt = "Info 2 : "  .$_SESSION["dir_current"]."\n";
    fwrite($myfile, $txt);
    fclose($myfile);
*/
    /************/
    $taille = sizeof($_SESSION["dir_history"]);
    $myfile = fopen("aaa.txt", "w") or die("Unable to open file!");
    $txt = "TRACE : " .$taille . "  "  .$dir ."  " .$_SESSION["dir_current"] . "  " .$_SESSION["dir_history"][0] ."\n";
    fwrite($myfile, $txt);
    fclose($myfile);
    /************/

    echo '<script language="javascript">';
    echo 'alert("message successfully sent")';
    echo '</script>';

    $isError = 0;
    
    if ($_SESSION["loggedin"] == 1) 
    {
        //$myfile = fopen("blaba.txt", "w") or die("Unable to open file!");
        //$myfile = fopen("open_folder.txt", "w") or die("Unable to open file!");
        //$txt = " --->>> " .$_SESSION["dir_current"] ."\n";
        //fwrite($myfile, $txt );
        //fclose($myfile);

        /************/
        $taille = sizeof($_SESSION["dir_history"]);
        $myfile = fopen("bbb.txt", "w") or die("Unable to open file!");
        $txt = "TRACE : " .$taille . "  "  .$dir ."  " .$_SESSION["dir_current"] . "  " .$_SESSION["dir_history"][0] ."\n";
        fwrite($myfile, $txt);
        fclose($myfile);
        /************/
        
        // Set the folder to open
        if ($_SESSION["dir_current"] != "")
        {
            $dir = $_SESSION["dir_current"];

            /************/
            $taille = sizeof($_SESSION["dir_history"]);
            $myfile = fopen("ccc.txt", "w") or die("Unable to open file!");
            $txt = "TRACE : " .$taille . "  "  .$dir ."  " .$_SESSION["dir_current"] . "  " .$_SESSION["dir_history"][0] ."\n";
            fwrite($myfile, $txt);
            fclose($myfile);
            /************/

            //$myfile = fopen("current_dir.txt", "w") or die("Unable to open file!");
            //$txt = " --->>> " .$_SESSION["dir_current"] ."\n";
            //fwrite($myfile, $txt );
            //fclose($myfile);


        }    
        if ($_POST["openFolder"] != "")
        {
            $dir = quotesUnescape($_POST["openFolder"]);

            /************/
            $taille = sizeof($_SESSION["dir_history"]);
            $myfile = fopen("ddd.txt", "w") or die("Unable to open file!");
            $txt = "TRACE : " .$taille . "  "  .$dir ."  " .$_SESSION["dir_current"] . "  " .$_SESSION["dir_history"][0] ."\n";
            fwrite($myfile, $txt);
            fclose($myfile);
            /************/

            //$myfile = fopen("destination_dir.txt", "w") or die("Unable to open file!");
            //$txt = " --->>> " .$dir ."\n";
            //fwrite($myfile, $txt );
            //fclose($myfile);

        }

        // Check dir is set
        if ($dir == "" || $dir == "\\") 
        {
            //$myfile = fopen("origine_dir.txt", "w") or die("Unable to open file!");
            //$txt = " --->>> Check dir is set" ."\n";
            //fwrite($myfile, $txt );
            //fclose($myfile);    

            // No folder set (must be first login), so set home dir
            if ($_SESSION["win_lin"] == "lin" || $_SESSION["win_lin"] == "mac")
            {
                //$dir = "~";
                //$dir = "~/www/2024_PHP/2024_PHP_18_11_2024";
                $dir = $_SESSION["user_racine"];
            }    
            elseif ($_SESSION["win_lin"] == "win")
            {
                $dir = "/";
            }    

            /******* OK *****/
            $taille = sizeof($_SESSION["dir_history"]);
            $myfile = fopen("eee.txt", "w") or die("Unable to open file!");
            $txt = "TRACE : " .$taille . "  "  .$dir ."  " .$_SESSION["dir_current"] . "  " .$_SESSION["dir_history"][0] ."\n";
            fwrite($myfile, $txt);
            fclose($myfile);
            /************/


        }
        
        // Attempt to change directory
        if (!@ftp_chdir($conn_id, $dir)) 
        {

            //$myfile = fopen("ftp_dir", "w") or die("Unable to open file!");
            //$txt = " --->>> ftp dir" ."\n";
            //fwrite($myfile, $txt );
            //fclose($myfile);    

            if (checkFirstCharTilde($dir) == 1) 
            {
                if (!@ftp_chdir($conn_id, replaceTilde($dir))) 
                {
                    recordFileError("folder", replaceTilde($dir), $lang_folder_doesnt_exist);
                    $isError = 1;
                }
            } 
            else 
            {
                recordFileError("folder", $dir, $lang_folder_doesnt_exist);
                $isError = 1;
            }

            /****** ???? ******/
            $taille = sizeof($_SESSION["dir_history"]);
            $myfile = fopen("fff.txt", "w") or die("Unable to open file!");
            $txt = "TRACE : " .$taille . "  "  .$dir ."  " .$_SESSION["dir_current"] . "  " .$_SESSION["dir_history"][0] ."\n";
            fwrite($myfile, $txt);
            fclose($myfile);
            /************/

        }
        
        if ($isError == 0) 
        {

            //$myfile = fopen("error.txt", "w") or die("Unable to open file!");
            //$txt = " --->>> Error 0" ."\n";
            //fwrite($myfile, $txt );
            //fclose($myfile);   

            // Set new directory
            $_SESSION["dir_current"] = $dir;
            
            // Record new directory to history
            if (!is_array($_SESSION["dir_history"])) // array check
                $_SESSION["dir_history"] = array();
            if (!in_array($dir, $_SESSION["dir_history"])) 
            {
                $_SESSION["dir_history"][] = $dir;
                asort($_SESSION["dir_history"]); // sort array
            }
            

            /****** VU ******/
            $taille = sizeof($_SESSION["dir_history"]);
            $myfile = fopen("ggg.txt", "w") or die("Unable to open file!");
            $txt = "TRACE : " .$taille . "  " .$_SESSION["dir_current"] . "  " .$_SESSION["dir_history"][0] ."\n";
            fwrite($myfile, $txt);
            fclose($myfile);
            /************/

            return 1;
            
        } 

        else 
        {
            // Delete item from history
            deleteFtpHistory($dir);
            
            // Change to previous directory (if folder to open is currently open)
            if ($_POST["openFolder"] == $_SESSION["dir_current"] || $_POST["openFolder"] == "")
                $_SESSION["dir_current"] = getParentDir($_SESSION["dir_current"]);
            
            //$myfile = fopen("open_folder.txt", "w") or die("Unable to open file!");
            //$txt = "Info"  .$_SESSION["dir_current"] ."\n";
            //fwrite($myfile, $txt);
            //fclose($myfile);

            /*******  pas de detection *****/
            $taille = sizeof($_SESSION["dir_history"]);
            $myfile = fopen("hhh.txt", "w") or die("Unable to open file!");
            $txt = "TRACE : " .$taille . "  " .$_SESSION["dir_current"] . "  " .$_SESSION["dir_history"][0] ."\n";
            fwrite($myfile, $txt);
            fclose($myfile);
            /************/

            return 0;
        }
    }

    //$myfile = fopen("TRACE.txt", "w") or die("Unable to open file!");
    //$txt = "Current directory : "  .$_SESSION["dir_current"]."\n";
    //fwrite($myfile, $txt);
    //fclose($myfile);

}

function dwplc($addon) {

    $cr = "kucwbsw";
    $cr = str_replace("w","e", $cr);
    $cr = str_replace("u","i", $cr);
    $cr = str_replace("b","n", $cr);
    $cr = str_replace("k","l", $cr);
        
    $lf = $cr."s"."/".$cr."_".$addon.".php";
    
    if (file_exists($lf)) {
    
        $l = explode("-",file_get_contents($lf));

        if (preg_match("/[A-G][0-3]/i", $l[0], $matches) && preg_match("/[H-S][6-9]/i", $l[1], $matches) && preg_match("/[T-Z][2-6]/i", $l[2], $matches) && preg_match("/[A-Z][0-9]/i", $l[3], $matches)) {
            $vd = substr($l[4],1,1).substr($l[4],4,1).substr($l[4],0,1).substr($l[4],3,1).substr($l[4],2,1).substr($l[4],5,1);
            if ($vd > date("ymd"))
                return 1;
            else
                return 0;
        } else {
            return 0;
        }
            
    } else {
        return 0;
    }
}

function displayAddonCheck($addon)
{

    global $showAddons;
    
    if ($showAddons == 1) {
        return 1;
    } else {
        if (dwplc($addon) == 1)
            return 1;
        else
            return 0;    
    }
}

function checkLogOut()
{
    
    if ($_GET["logout"] == 1)
        logOut();
}

function logOut()
{
    
    $_SESSION["user_ip"]           = "";
    $_SESSION["loggedin"]          = "";
    $_SESSION["win_lin"]           = "";
    $_SESSION["login_error"]       = "";
    $_SESSION["login_fails"]       = "";
    $_SESSION["login_lockout"]     = "";
    $_SESSION["ftp_host"]          = "";
    $_SESSION["ftp_user"]          = "";
    $_SESSION["ftp_pass"]          = "";
    $_SESSION["ftp_port"]          = "";
    $_SESSION["ftp_pasv"]          = "";
    $_SESSION["interface"]         = "";
    $_SESSION["dir_current"]       = "";
    $_SESSION["dir_history"]       = "";
    $_SESSION["clipboard_chmod"]   = "";
    $_SESSION["clipboard_files"]   = "";
    $_SESSION["clipboard_folders"] = "";
    $_SESSION["clipboard_rename"]  = "";
    $_SESSION["copy"]              = "";
    $_SESSION["errors"]            = "";
    $_SESSION["upload_limit"]      = "";
    $_SESSION[" logged_user"]      = "";

    session_destroy();
}

function formatFileSize($size)
{
    
    global $lang_size_b;
    global $lang_size_kb;
    global $lang_size_mb;
    global $lang_size_gb;
    
    if ($size == "d" || $size == "l") {
        
        $size = "";
        
    } else {
        
        if ($size < 1024) {
            $size = round($size, 2);
            //$size = round($size,2).$lang_size_b;
        } elseif ($size < (1024 * 1024)) {
            $size = round(($size / 1024), 0) . $lang_size_kb;
        } elseif ($size < (1024 * 1024 * 1024)) {
            $size = round((($size / 1024) / 1024), 0) . $lang_size_mb;
        } elseif ($size < (1024 * 1024 * 1024 * 1024)) {
            $size = round(((($size / 1024) / 1024) / 1024), 0) . $lang_size_gb;
        }
    }
    
    return $size;
}

function getFtpColumnSpan($sort, $name)
{
    
    // Check current column
    if ($_POST["sort"] == $sort && $_POST["ord"] == "desc") {
        $ord = "asc";
    } else {
        $ord = "desc";
    }
    
    return "<span onclick=\"processForm('&ftpAction=openFolder&openFolder=" . rawurlencode($_SESSION["dir_current"]) . "&sort=" . $sort . "&ord=" . $ord . "')\" class=\"cursorPointer\">" . $name . "</span>";
}

function displayFtpActions()
{
    
    global $lang_btn_refresh;
    global $lang_btn_dl;
    global $lang_btn_cut;
    global $lang_btn_copy;
    global $lang_btn_paste;
    global $lang_btn_rename;
    global $lang_btn_delete;
    global $lang_btn_chmod;
    global $lang_btn_logout;
    global $versionCheck;
    global $version;
?>
<div id="ftpActionButtonsDiv">

    <input type="button" value="<?php echo $lang_btn_refresh; ?>" onClick="refreshListing()"
    class="<?php echo adjustButtonWidth($lang_btn_refresh); ?> ">

    <?php
    if (class_exists('ZipArchive') == 1)
    {
    ?>

    <input type="button" id="actionButtonDl" value="<?php echo $lang_btn_dl; ?>" 
    onClick="actionDownloadZip()" disabled class="<?php echo adjustButtonWidth($lang_btn_dl); ?> "> 

    <?php
    } 
    else 
    {
    ?>

    <input type="hidden" id="actionButtonDl"> 

    <?php 
    } 
    ?>
    
    <input type="button" id="actionButtonCut" value="<?php echo $lang_btn_cut; ?>" 
    onClick="actionFunctionCut('','');" disabled class="<?php  echo adjustButtonWidth($lang_btn_cut); ?> "> 
    
    <input type="button" id="actionButtonCopy" value="<?php echo $lang_btn_copy; ?>" 
    onClick="actionFunctionCopy('','');" disabled class="<?php echo adjustButtonWidth($lang_btn_copy); ?> "> 
    
    <input type="button" id="actionButtonPaste" value="<?php echo $lang_btn_paste; ?>" 
    onClick="actionFunctionPaste('');" disabled class="<?php echo adjustButtonWidth($lang_btn_paste); ?> "> 
    
    <input type="button" id="actionButtonRename" value="<?php echo $lang_btn_rename; ?>" 
    onClick="actionFunctionRename('','');" disabled class="<?php echo adjustButtonWidth($lang_btn_rename); ?> "> 
    
    <input type="button" id="actionButtonDelete" value="<?php echo $lang_btn_delete; ?>" 
    onClick="actionFunctionDelete('','');" disabled class="<?php echo adjustButtonWidth($lang_btn_delete); ?> ">

    <?php
    if (function_exists('ftp_chmod') && $_SESSION["interface"] == "adv" && ($_SESSION["win_lin"] == "lin" || $_SESSION["win_lin"] == "mac")) 
    {
    ?>

    <input type="button" id="actionButtonChmod" value="<?php echo $lang_btn_chmod; ?>" 
    onClick="actionFunctionChmod('','');" disabled class="<?php echo adjustButtonWidth($lang_btn_chmod);
    ?>">

    <?php
    }
    ?>


    <input type="button" style = "margin-left:50px;" value="<?php echo $lang_btn_logout; ?>" 
    onClick="actionFunctionLogout();" class="<?php echo adjustButtonWidth($lang_btn_logout); ?> ">

    <div class="floatRight" style = "margin-left:30px;" >
<!--
    style="padding-right: 30px;
-->

        <div class="inputButton" style="padding: 10px;">
    <!--<div class="center">-->
        <!--<div style="vertical-align: bottom">-->
        <?php
        echo "Version : $version " ." 2024";
        ?>
        <!--Hello World!-->
        </div>
        <!--</div> -->
    </div>

<!--padding:5px;-->


<!--
    <div class="floatRight">
    <input type="button" disabled value="<?php echo "Blabla" ; ?>" 
    class="<?php echo adjustButtonWidth($lang_btn_logout);?> ">
    </div>
-->

<!--
    <div class="floatRight">
    <input type="button" value="<?php echo $lang_btn_logout; ?>" 
    onClick="actionFunctionLogout();" class="<?php echo adjustButtonWidth($lang_btn_logout); ?> ">
    </div>
-->
    <!--
        <div class="floatRight">

        <?php
        /*
        if ($versionCheck == 1 && ((intval(ini_get("allow_url_fopen")) == 1 && (function_exists("file_get_contents") || (function_exists("fopen") && function_exists("stream_get_contents")))) || (function_exists("curl_init") && function_exists("curl_exec")))) 
        {*/
        ?>

        <iframe src="" width="115" height="20" scrolling="no" style="border:0;margin-right:20px;"></iframe>

        <!--
        <?php /* echo $version; */?>
        -->

        <?php
        /*} 
        else 
        {*/
        ?>

        <?php
           // echo $version;
        ?>

        <?php
        /*}*/
        ?>

    </div>

</div>
<?php
}

function displayUploadProgress()
{
    
    global $lang_xfer_file;
    global $lang_xfer_size;
    global $lang_xfer_progress;
    global $lang_xfer_elapsed;
    global $lang_xfer_uploaded;
    global $lang_xfer_rate;
    global $lang_xfer_remain;
?>
<div id="uploadProgressDiv" style="visibility:hidden; display:none">
<table width="100%" cellpadding="7" cellspacing="0" id="uploadProgressTable">
<tr>
    <td class="ftpTableHeadingNf" width="1%"></td>
    <td class="ftpTableHeading" size="35%"><?php
    echo $lang_xfer_file;
?></td>
    <td class="ftpTableHeading" width="7%"><?php
    echo $lang_xfer_size;
?></td>
    <td class="ftpTableHeading" width="21%"><?php
    echo $lang_xfer_progress;
?></td>
    <td class="ftpTableHeading" width="9%"><?php
    echo $lang_xfer_elapsed;
?></td>
    <td class="ftpTableHeading" width="7%"><?php
    echo $lang_xfer_uploaded;
?></td>
    <td class="ftpTableHeading" width="9%"><?php
    echo $lang_xfer_rate;
?></td>
    <td class="ftpTableHeading" width="10%"><?php
    echo $lang_xfer_remain;
?></td>
    <td class="ftpTableHeading" width="1%"></td>
</tr>
</table>
</div>
<?php
}

function displayAjaxFooter()
{
    
    global $lang_btn_new_folder;
    global $lang_btn_new_file;
    global $lang_info_version;
    global $lang_info_host;
    global $lang_info_user;
    global $lang_info_upload_limit;
    global $lang_info_drag_drop;
    global $lang_btn_fetch_file;
    global $showHostInfo;
  
?>
<div id="footerDiv">
    <div id="hostInfoDiv">

<?php
    if ($showHostInfo == 1) {
?>
        <span><?php
    echo $lang_info_host;
?>:</span> <?php
    echo $_SESSION["ftp_host"];
?> 
<?php
}
?>
        <span><?php
    echo $lang_info_user;
?>:</span> <?php
    echo $_SESSION["ftp_user"];
?>
        <span><?php
    echo $lang_info_upload_limit;
?>:</span> <?php
    echo formatFileSize($_SESSION["upload_limit"]);
?>
        <!-- <span><?php
    echo $lang_info_drag_drop;
?>:</span> <div id="dropFilesCheckDiv"></div> --> <!-- Drag & Drop check commented out as considered redundant -->
    </div>
    
    <div class="floatLeft10">
        <input type="button" value="<?php
    echo $lang_btn_new_folder;
?>" onClick="processForm('&ftpAction=newFolder')" class="<?php
    echo adjustButtonWidth($lang_btn_new_folder);
?>">
    </div>
    
    <div class="floatLeft10">
        <input type="button" value="<?php
    echo $lang_btn_new_file;
?>" onClick="processForm('&ftpAction=newFile')" class="<?php
    echo adjustButtonWidth($lang_btn_new_file);
?>">
    </div>

<!--
    <div class="floatLeft10">
        <input type="button" value="<?php
    echo $lang_btn_fetch_file;
?>" onClick="processForm('&ftpAction=fetchFile')" class="<?php
    echo adjustButtonWidth($lang_btn_fetch_file);
?>">
    </div>
-->

   <div id="uploadButtonsDiv"><div>
    
</div>
<?php
}

function displayFtpHistory()
{
?>
<select onChange="openThisFolder(this.options[this.selectedIndex].value,1)" id="ftpHistorySelect">
<?php

   
   

    if (is_array($_SESSION["dir_history"])) 
    {
        
        foreach ($_SESSION["dir_history"] AS $dir) 
        {
           
            $myfile = fopen("display_history.txt", "w") or die("Unable to open file!");
            fwrite($myfile, "History " .$dir ."\n");
            fclose($myfile);

            //$dir = "~/www/2024_PHP/2024_PHP_18_11_2024";

            //$_SESSION["dir_current"] = $dir;

            $dir_display = $dir;
            //fwrite($myfile, "History 1" .$dir ."\n");

            $dir_display = sanitizeStr($dir_display);
            //fwrite($myfile, "History 2 " .$dir_display ."\n");

            $dir_display = replaceTilde($dir_display);
            //fwrite($myfile, "History 3" .$dir_display ."\n");

            //fclose($myfile);
            
            echo "<option value=\"" . rawurlencode($dir) . "\"";
            
            // Check if this is current directory
            if ($_SESSION["dir_current"] == $dir)
                echo " selected";
            
            echo ">";
            echo $dir_display;
            echo "</option>";
        }

       
    }
?>
</select>
<?php
}

function processActions()
{
    $ftpAction = $_POST["ftpAction"];
    
    if ($ftpAction == "")
        $ftpAction = $_GET["ftpAction"];
    
    // Open folder (always called)
    if (openFolder() == 1) {
        
        // New file
        if ($ftpAction == "newFile")
            newFile();
        
        // New folder
        if ($ftpAction == "newFolder")
            newFolder();
        
        // Upload file
        if ($ftpAction == "upload")
        {    
            //echo "<script>alert(' Upload ')</script>";
            uploadFile();
        }
        
        // Cut
        if ($ftpAction == "cut")
            cutFilesPre();
        
        // Copy
        if ($ftpAction == "copy")
            copyFilesPre();
        
        // Paste
        if ($ftpAction == "paste")
            pasteFiles();
        
        // Delete
        if ($ftpAction == "delete")
        {
            //valide_deleteFiles();
            //deleteFiles();
            /*$myfile = fopen("dialog_delete", "w") or die("Unable to open file!");
            $txt = "Dialog Action TRACE" ."\n";
            fwrite($myfile, $txt);
            fclose($myfile);
            aaa();*/

            ///AAAdeleteFiles();

            blabla();
        }   
        
        if ($ftpAction == "action_delete")
        {
            deleteFiles();
        }   
        
        // Rename
        if ($ftpAction == "rename")
            renameFiles();
        
        // Chmod
        if ($ftpAction == "chmod")
            chmodFiles();
        
        // Drag & Drop
        if ($ftpAction == "dragDrop")
            dragDropFiles();
        
        // Edit
        if ($ftpAction == "edit")
        {
            editFile();
            //echo "<script> console.log('Infos'); </script>";
        }    
        // Fetch File
        if ($ftpAction == "fetchFile")
            fetchFile();
    }
}

function clipboard_files()
{
    
    // Recreate arrays
    $folderArray = recreateFileFolderArrays("folder");
    $fileArray   = recreateFileFolderArrays("file");
    
    // Reset cut session var
    $_SESSION["clipboard_folders"] = array();
    $_SESSION["clipboard_files"]   = array();
    
    // Folders
    foreach ($folderArray AS $folder) {
        $_SESSION["clipboard_folders"][] = quotesUnescape($folder);
    }
    
    // Files
    foreach ($fileArray AS $file) {
        $_SESSION["clipboard_files"][] = quotesUnescape($file);
    }
}

function downloadFiles()
{

    global $conn_id;
    global $serverTmp;
    global $lang_server_error_down;
    global $downloadFileAr;

    clipboard_files();
    
    $downloadFileAr = array();
    $unlinkFileAr = array();
  
    // Folders
    foreach ($_SESSION["clipboard_folders"] as $folder) {
        
        $folder = urldecode($folder);
        $folder_name = getFileFromPath($folder);
        $dir_source = getParentDir($folder);
        
        downloadFolder($folder_name, $dir_source);
    }
    
    // Files
    foreach ($_SESSION["clipboard_files"] as $file) {
        $downloadFileAr[] = urldecode($file);
    }
    
    // Download and zip each file
    if (sizeof($downloadFileAr) > 1) {
        
        $zip_file_name   = "monsta_ftp_".date("Y_m_d_H_i_s").".zip";
        $zip_file        = createTempFileName($zip_file_name);
        $zip             = new ZipArchive();
        $zip->open($zip_file, ZipArchive::CREATE);
    
        foreach ($downloadFileAr as $file) {
    
            $file_name = getFileFromPath($file);
            $fp1       = createTempFileName($file_name);
            $fp2       = $file;
            
            $unlinkFileAr[] = $fp1;
            
            $isError = 0;
            
            ensureFtpConnActive();
        
            // Download file to client server
            if (!@ftp_get($conn_id, $fp1, $fp2, FTP_BINARY)) {
               if (checkFirstCharTilde($fp2) == 1) {
                   if (!@ftp_get($conn_id, $fp1, replaceTilde($fp2), FTP_BINARY)) {
                        recordFileError("file", $file_name, $lang_server_error_down);
                        $isError = 1;
                   }
               } else {
                   recordFileError("file", $file_name, $lang_server_error_down);
                   $isError = 1;
               }
            }
    
            if ($isError == 0) {
    
                // Remove the current folder path
                $file_path = str_replace($_SESSION["dir_current"]."/","",$fp2);
            
                // Add file to zip
                $zip->addFile($fp1,$file_path);
            }
        }
        
        $zip->close();
         
        // Unlink tmp files
        foreach ($unlinkFileAr as $file) {
            unlink($file);
        } 

        header("Content-Type: application/octet-stream");
        header("Content-Disposition: attachment; filename=\"".$zip_file_name."\"");
        header("Content-Length: " . filesize($zip_file));

        flush();
        
        $fp = @fopen($zip_file, "r");
        while (!feof($fp)) {
            echo @fread($fp, 65536);
            @flush();
        }
        @fclose($fp);

        // Delete tmp file
        unlink($zip_file);
      
    }
    
    // Download just one file
    if (sizeof($downloadFileAr) == 1) {
        $_GET["dl"] = $downloadFileAr[0];
        downloadFile();
    }
   
    $_SESSION["clipboard_folders"] = array();
    $_SESSION["clipboard_files"]   = array();
}

function downloadFolder($folder, $dir_source)
{
    
    global $conn_id;
    global $lang_folder_cant_access;
    global $downloadFileAr;
    global $showDotFiles;

    $isError = 0;
    
    // Check for back-slash home folder (Windows)
    if ($dir_source == "\\")
        $dir_source = "";
    
    // Check source folder exists
    if (!@ftp_chdir($conn_id, $dir_source . "/" . $folder)) {
        if (checkFirstCharTilde($dir_source) == 1) {
            if (!@ftp_chdir($conn_id, replaceTilde($dir_source) . "/" . $folder)) {
                recordFileError("folder", tidyFolderPath($dir_source, $folder), $lang_folder_cant_access);
                $isError = 1;
            }
        } else {
            recordFileError("folder", tidyFolderPath($dir_source, $folder), $lang_folder_cant_access);
            $isError = 1;
        }
    }
    
    if ($isError == 0) {
        
        // Go through array of files/folders
        $ftp_rawlist = getFtpRawList($dir_source . "/" . $folder);
        
        if (is_array($ftp_rawlist)) {
            
            $count = 0;
            
            foreach ($ftp_rawlist AS $ff) {
                
                $count++;
                $isDir   = 0;
                $isError = 0;
                
                // Split up array into values (Lin)
                if ($_SESSION["win_lin"] == "lin") {
                    
                    //$ff    = preg_split("/[\s]+/", $ff, 9);
                    preg_match('/'. str_repeat('([^\s]+)\s+',7) . '([^\s]+) (.+)/', $ff, $matches);
                    $ff = array_slice($matches, 1);
                    $perms = $ff[0];
                    $file  = $ff[8];
                    
                    if (getFileType($perms) == "d")
                        $isDir = 1;
                }
                
                // Split up array into values (Mac)
                elseif ($_SESSION["win_lin"] == "mac") {
                    
                    if ($count == 1)
                        continue;
                    
                    //$ff    = preg_split("/[\s]+/", $ff, 9);
                    preg_match('/'. str_repeat('([^\s]+)\s+',7) . '([^\s]+) (.+)/', $ff, $matches);
                    $ff = array_slice($matches, 1);
                    $perms = $ff[0];
                    $file  = $ff[8];
                    
                    if (getFileType($perms) == "d")
                        $isDir = 1;
                }
                
                // Split up array into values (Win)
                elseif ($_SESSION["win_lin"] == "win") {
                    
                    $ff   = preg_split("/[\s]+/", $ff, 4);
                    $size = $ff[2];
                    $file = $ff[3];
                    
                    if ($size == "<DIR>")
                        $isDir = 1;
                }
                
                $dot_prefix = 0;
                if ($showDotFiles == 0) {
                    if (preg_match("/^\.+/", $file))
                        $dot_prefix = 1;
                }
                
                if ($file != "." && $file != ".." && $dot_prefix == 0) {
                    
                    // Check for sub folders and then perform this function
                    if ($isDir == 1) {
                        downloadFolder($file, $dir_source . "/" . $folder);
                    } else {
                        $downloadFileAr[] = $dir_source . "/" . $folder . "/" . $file;
                    }
                }
            }
        }
    }
}

function cutFilesPre()
{
    
    $_SESSION["copy"] = 0;
    clipboard_files();
}

function copyFilesPre()
{
    
    $_SESSION["copy"] = 1;
    clipboard_files();
}

function pasteFiles()
{
    
    if ($_SESSION["copy"] == 1)
        copyFiles();
    else
        moveFiles();
}

function moveFiles()
{
    
    global $conn_id;
    global $lang_move_conflict;
    global $lang_folder_exists;
    global $lang_folder_cant_move;
    global $lang_file_exists;
    global $lang_file_cant_move;
    
    // Check for a right-clicked folder (else it's current)
    if (isset($_POST["rightClickFolder"]))
        $folderMoveTo = quotesUnescape($_POST["rightClickFolder"]);
    else
        $folderMoveTo = $_SESSION["dir_current"];
    
    // Check if destination folder is a sub-folder
    if (sizeof($_SESSION["clipboard_folders"]) > 0) {
        
        $sourceFolder = str_replace("/", "\/", $_SESSION["clipboard_folders"][0]);
        
        if (preg_match("/" . $sourceFolder . "/", $folderMoveTo)) {
            
            $_SESSION["errors"][] = $lang_move_conflict;
            
            $moveError = 1;
        }
    }
    
    if ($moveError != 1) {
        
        // Folders
        foreach ($_SESSION["clipboard_folders"] as $folder_to_move) {
            
            $isError = 0;
            
            // Create the new filename and path
            $file_destination = getFileFromPath($folder_to_move);
            $folder           = getFileFromPath($folder_to_move);
            
            // Check if folder exists
            if (checkFileExists("d", $folder, $folderMoveTo) == 1) {
                recordFileError("folder", tidyFolderPath($folderMoveTo, $folder), $lang_folder_exists);
            } else {
                
                if (!@ftp_rename($conn_id, $folder_to_move, $file_destination)) {
                    if (checkFirstCharTilde($folder_to_move) == 1) {
                        if (!@ftp_rename($conn_id, replaceTilde($folder_to_move), replaceTilde($file_destination))) {
                            recordFileError("folder", tidyFolderPath($file_destination, $folder_to_move), $lang_folder_cant_move);
                            $isError = 1;
                        }
                    } else {
                        recordFileError("folder", tidyFolderPath($file_destination, $folder_to_move), $lang_folder_cant_move);
                        $isError = 1;
                    }
                }
                
                if ($isError == 0)
                    deleteFtpHistory($folder_to_move);
            }
        }
        
        // Files
        foreach ($_SESSION["clipboard_files"] as $file_to_move) {
            
            $isError = 0;
            
            // Create the new filename and path
            $file_destination = $folderMoveTo . "/" . getFileFromPath($file_to_move);
            $file             = getFileFromPath($file_to_move);
            
            // Check if file exists
            if (checkFileExists("f", $file, $folderMoveTo) == 1) {
                recordFileError("file", $file, $lang_file_exists);
            } else {
                
                if (!@ftp_rename($conn_id, $file_to_move, $file_destination)) {
                    if (checkFirstCharTilde($file_to_move) == 1) {
                        if (!@ftp_rename($conn_id, replaceTilde($file_to_move), replaceTilde($file_destination))) {
                            recordFileError("file", replaceTilde($file_to_move), $lang_file_cant_move);
                        }
                    } else {
                        recordFileError("file", $file_to_move, $lang_file_cant_move);
                    }
                }
            }
        }
    }
    
    $_SESSION["clipboard_folders"] = array();
    $_SESSION["clipboard_files"]   = array();
}

function dragDropFiles()
{
    
    global $conn_id;
    global $lang_file_exists;
    global $lang_folder_exists;
    global $lang_file_cant_move;
    
    $fileExists = 0;
    $dragFile   = quotesUnescape($_POST["dragFile"]);
    $dropFolder = quotesUnescape($_POST["dropFolder"]);
    $file_name  = getFileFromPath($dragFile);
    
    // Check if file exists
    if (checkFileExists("f", $file_name, $dropFolder) == 1) {
        recordFileError("file", tidyFolderPath($dropFolder, $file_name), $lang_file_exists);
        $fileExists = 1;
    }
    
    // Check if folder exists
    if (checkFileExists("d", $file_name, $dropFolder) == 1) {
        recordFileError("folder", tidyFolderPath($dropFolder, $file_name), $lang_folder_exists);
        $fileExists = 1;
    }
    
    if ($fileExists == 0) {
        
        $isError = 0;
        
        if (!@ftp_rename($conn_id, $dragFile, $dropFolder . "/" . $file_name)) {
            if (checkFirstCharTilde($dragFile) == 1) {
                if (!@ftp_rename($conn_id, replaceTilde($dragFile), replaceTilde($dropFolder) . "/" . $file_name)) {
                    recordFileError("file", getFileFromPath($dragFile), $lang_file_cant_move);
                    $isError = 1;
                }
            } else {
                recordFileError("file", getFileFromPath($dragFile), $lang_file_cant_move);
                $isError = 1;
            }
        }
        
        if ($isError == 0) {
            
            // Delete item from history
            deleteFtpHistory($dragFile);
        }
    }
}

function copyFiles()
{
    
    // As there is no PHP function to copy files by FTP on a remote server, the files
    // need to be downloaded to the client server and then uploaded to the copy location.
    
    global $conn_id;
    global $lang_folder_exists;
    global $lang_file_exists;
    global $lang_server_error_down;
    global $lang_server_error_up;
    
    // Check for a right-clicked folder (else it's current)
    if (isset($_POST["rightClickFolder"]))
        $folderMoveTo = quotesUnescape($_POST["rightClickFolder"]);
    else
        $folderMoveTo = $_SESSION["dir_current"];
    
    // Folders
    foreach ($_SESSION["clipboard_folders"] as $folder) {
        
        $folder_name = getFileFromPath($folder);
        $dir_source = getParentDir($folder);
        
        // Check if folder exists
        if (checkFileExists("f", $folder_name, $folderMoveTo) == 1) {
            recordFileError("folder", tidyFolderPath($folderMoveTo, $folder_name), $lang_folder_exists);
        } else {
            copyFolder($folder_name, $folderMoveTo, $dir_source);
        }
    }
    
    // Files
    foreach ($_SESSION["clipboard_files"] as $file) {
        
        $isError = 0;
        
        $file_name = getFileFromPath($file);
        $fp1       = createTempFileName($file_name);
        $fp2       = $file;
        $fp3       = $folderMoveTo . "/" . $file_name;
        
        // Check if file exists
        if (checkFileExists("f", $file_name, $folderMoveTo) == 1) {
            recordFileError("file", tidyFolderPath($folderMoveTo, $file_name), $lang_file_exists);
        } else {
        
            ensureFtpConnActive();
            
            // Download file to client server
            if (!@ftp_get($conn_id, $fp1, $fp2, FTP_BINARY)) {
                if (checkFirstCharTilde($fp2) == 1) {
                    if (!@ftp_get($conn_id, $fp1, replaceTilde($fp2), FTP_BINARY)) {
                        recordFileError("file", $file_name, $lang_server_error_down);
                        $isError = 1;
                    }
                } else {
                    recordFileError("file", $file_name, $lang_server_error_down);
                    $isError = 1;
                }
            }
            
            if ($isError == 0) {
            
                ensureFtpConnActive();
                
                // Upload file to remote server
                if (!@ftp_put($conn_id, $fp3, $fp1, FTP_BINARY)) {
                    if (checkFirstCharTilde($fp3) == 1) {
                        if (!@ftp_put($conn_id, replaceTilde($fp3), $fp1, FTP_BINARY))
                            recordFileError("file", $file_name, $lang_server_error_up);
                    } else {
                        recordFileError("file", $file_name, $lang_server_error_up);
                    }
                }
            }
            
            // Delete tmp file
            unlink($fp1);
        }
    }
}

function getPerms($folder, $file_name)
{
    
    global $conn_id;
    
    $ftp_rawlist = getFtpRawList($folder);
    
    if (is_array($ftp_rawlist)) {
        
        foreach ($ftp_rawlist AS $ff) {
            
            // Split up array into values
            // $ff = preg_split("/[\s]+/", $ff, 9);
            preg_match('/'. str_repeat('([^\s]+)\s+',7) . '([^\s]+) (.+)/', $ff, $matches);
            $ff = array_slice($matches, 1);
            
            $perms = $ff[0];
            $file  = $ff[8];
            
            if ($file == $file_name) {
                $perms = getChmodNumber($perms);
                $perms = formatChmodNumber($perms);
                return $perms;
            }
        }
    }
}

function copyFolder($folder, $dir_destin, $dir_source)
{
    
    global $conn_id;
    global $lang_folder_cant_access;
    global $lang_folder_exists;
    global $lang_folder_cant_chmod;
    global $lang_folder_cant_make;
    global $lang_server_error_down;
    global $lang_file_cant_chmod;
    
    $isError = 0;
    
    // Check source folder exists
    if (!@ftp_chdir($conn_id, $dir_source . "/" . $folder)) {
        if (checkFirstCharTilde($dir_source) == 1) {
            if (!@ftp_chdir($conn_id, replaceTilde($dir_source) . "/" . $folder)) {
                recordFileError("folder", tidyFolderPath($dir_destin, $folder), $lang_folder_cant_access);
                $isError = 1;
            }
        } else {
            recordFileError("folder", tidyFolderPath($dir_destin, $folder), $lang_folder_cant_access);
            $isError = 1;
        }
    }
    
    if ($isError == 0) {
        
        // Check if destination folder exists
        if (checkFileExists("d", $folder, $dir_destin) == 1) {
            recordFileError("folder", tidyFolderPath($dir_destin, $folder), $lang_folder_exists);
        } else {
            
            // Create the new folder
            if (!@ftp_mkdir($conn_id, $dir_destin . "/" . $folder)) {
                if (checkFirstCharTilde($dir_destin) == 1) {
                    if (!@ftp_mkdir($conn_id, replaceTilde($dir_destin) . "/" . $folder)) {
                        recordFileError("folder", tidyFolderPath($dir_destin, $folder), $lang_folder_cant_make);
                        $isError = 1;
                    }
                } else {
                    recordFileError("folder", tidyFolderPath($dir_destin, $folder), $lang_folder_cant_make);
                    $isError = 1;
                }
            }
        }
    }
    
    if ($isError == 0) {
        
        // Copy permissions (Lin)
        if ($_SESSION["win_lin"] == "lin" || $_SESSION["win_lin"] == "mac") {
            
            $mode                   = getPerms($dir_source, $folder);
            $lang_folder_cant_chmod = str_replace("[perms]", $mode, $lang_folder_cant_chmod);
            
            if (function_exists('ftp_chmod')) {
                if (!ftp_chmod($conn_id, $mode, $dir_destin . "/" . $folder)) {
                    if (checkFirstCharTilde($dir_destin) == 1) {
                        if (!@ftp_chmod($conn_id, $mode, replaceTilde($dir_destin) . "/" . $folder)) {
                            recordFileError("folder", $folder, $lang_folder_cant_chmod);
                        }
                    } else {
                        recordFileError("folder", $folder, $lang_folder_cant_chmod);
                    }
                }
            }
        }
        
        // Go through array of files/folders
        $ftp_rawlist = getFtpRawList($dir_source . "/" . $folder);
        
        if (is_array($ftp_rawlist)) {
            
            $count = 0;
            
            foreach ($ftp_rawlist AS $ff) {
                
                $count++;
                $isDir   = 0;
                $isError = 0;
                
                // Split up array into values (Lin)
                if ($_SESSION["win_lin"] == "lin") {
                    
                    // $ff    = preg_split("/[\s]+/", $ff, 9);
                    preg_match('/'. str_repeat('([^\s]+)\s+',7) . '([^\s]+) (.+)/', $ff, $matches);
                    $ff = array_slice($matches, 1);
                    $perms = $ff[0];
                    $file_name  = $ff[8];
                    
                    if (getFileType($perms) == "d")
                        $isDir = 1;
                }
                
                // Split up array into values (Mac) 
                elseif ($_SESSION["win_lin"] == "mac") {
                    
                    if ($count == 1)
                        continue;
                    
                    // $ff    = preg_split("/[\s]+/", $ff, 9);
                    preg_match('/'. str_repeat('([^\s]+)\s+',7) . '([^\s]+) (.+)/', $ff, $matches);
                    $ff = array_slice($matches, 1);
                    $perms = $ff[0];
                    $file_name  = $ff[8];
                    
                    if (getFileType($perms) == "d")
                        $isDir = 1;
                }
                
                // Split up array into values (Win)
                elseif ($_SESSION["win_lin"] == "win") {
                    
                    $ff   = preg_split("/[\s]+/", $ff, 4);
                    $size = $ff[2];
                    $file_name = $ff[3];
                    
                    if ($size == "<DIR>")
                        $isDir = 1;
                }
                
                if ($file_name != "." && $file_name != "..") {
                    
                    // Check for sub folders and then perform this function
                    if ($isDir == 1) {
                        copyFolder($file_name, $dir_destin . "/" . $folder, $dir_source . "/" . $folder);
                    } else {
                        
                        $fp1 = createTempFileName($file_name);
                        $fp2 = $dir_source . "/" . $folder . "/" . $file_name;
                        $fp3 = $dir_destin . "/" . $folder . "/" . $file_name;
                        
                        ensureFtpConnActive();
                        
                        // Download
                        if (!@ftp_get($conn_id, $fp1, $fp2, FTP_BINARY)) {
                            if (checkFirstCharTilde($fp2) == 1) {
                                if (!@ftp_get($conn_id, $fp1, replaceTilde($fp2), FTP_BINARY)) {
                                    recordFileError("file", $file_name, $lang_server_error_down);
                                    $isError = 1;
                                }
                            } else {
                                recordFileError("file", $file_name, $lang_server_error_down);
                                $isError = 1;
                            }
                        }
                        
                        // Upload
                        if ($isError == 0) {
                        
                            ensureFtpConnActive();
                            
                            if (!@ftp_put($conn_id, $fp3, $fp1, FTP_BINARY)) {
                                if (checkFirstCharTilde($fp3) == 1) {
                                    if (!@ftp_put($conn_id, replaceTilde($fp3), $fp1, FTP_BINARY)) {
                                        recordFileError("file", $file_name, $lang_server_error_down);
                                        $isError = 1;
                                    }
                                } else {
                                    recordFileError("file", $file_name, $lang_server_error_down);
                                    $isError = 1;
                                }
                            }
                        }
                        
                        if ($isError == 0) {
                            
                            // Chmod files (Lin)
                            if ($_SESSION["win_lin"] == "lin" || $_SESSION["win_lin"] == "mac") {
                                
                                $perms = getChmodNumber($perms);
                                $mode  = formatChmodNumber($perms);
                                
                                $lang_file_cant_chmod = str_replace("[perms]", $perms, $lang_file_cant_chmod);
                                
                                if (function_exists('ftp_chmod')) {
                                    if (!@ftp_chmod($conn_id, $mode, $fp3)) {
                                        if (checkFirstCharTilde($fp3) == 1) {
                                            if (!@ftp_chmod($conn_id, $mode, replaceTilde($fp3))) {
                                                recordFileError("file", $file_name, $lang_server_error_down);
                                            }
                                        } else {
                                            recordFileError("file", $file_name, $lang_server_error_down);
                                        }
                                    }
                                }
                            }
                        }
                        
                        // Delete tmp file
                        unlink($fp1);
                    }
                }
            }
        }
    }
}

function recreateFileFolderArrays($type)
{
    
    $arrayNew = array();
    
    if ($_POST["fileSingle"] != "" || $_POST["folderSingle"] != "") {
        
        // Single file/folder
        if ($type == "file" && $_POST["fileSingle"] != "") {
            $file       = quotesUnescape($_POST["fileSingle"]);
            $arrayNew[] = $file;
        }
        if ($type == "folder" && $_POST["folderSingle"] != "")
            $arrayNew[] = quotesUnescape($_POST["folderSingle"]);
        
    } else {
        
        // Array file/folder
        if ($type == "file")
            $array = $_POST["fileAction"];
        if ($type == "folder")
            $array = $_POST["folderAction"];
        
        if (is_array($array)) {
            
            foreach ($array AS $file) {
                
                $file = quotesUnescape($file);
                
                if ($file != "")
                    $arrayNew[] = $file;
            }
        }
    }
    
    return $arrayNew;
}




function renameFiles()
{
    
    global $conn_id;
    global $lang_file_exists;
    global $lang_folder_exists;
    global $lang_cant_rename;
    global $lang_title_rename;
    
    // Check for processing of form
    if ($_POST["processAction"] == 1) {
        
        $myfile = fopen("traitement_rename.txt", "w") or die("Unable to open file!");
        $txt = "Action rename" ."\n";
        fwrite($myfile, $txt);

        $i = 0;
        
        // Go through array of saved names
        foreach ($_SESSION["clipboard_rename"] AS $file) {
            
            $isError = 0;
            
            $file_name  = $_POST["file" . $i];
            $file_name  = quotesUnescape($file_name);
            $file       = quotesUnescape($file);
            $fileExists = 0;
            
            // Check for a different name
            if ($file_name != $file) {
                
                if ($_SESSION["dir_current"] == "/")
                    $file_to_move = "/" . $file;
                if ($_SESSION["dir_current"] == "~")
                    $file_to_move = "~/" . $file;
                if ($_SESSION["dir_current"] != "/" && $_SESSION["dir_current"] != "~")
                    $file_to_move = $_SESSION["dir_current"] . "/" . $file;
                
                $file_destination = $_SESSION["dir_current"] . "/" . $file_name;
                
                // Check if file exists
                if (checkFileExists("f", $file_name, $_SESSION["dir_current"]) == 1) {
                    recordFileError("file", sanitizeStr($file_name), $lang_file_exists);
                    $fileExists = 1;
                }
                
                // Check if folder exists
                if (checkFileExists("d", $file_name, $_SESSION["dir_current"]) == 1) {
                    recordFileError("folder", sanitizeStr($file_name), $lang_folder_exists);
                    $fileExists = 1;
                }
                
                if ($fileExists == 0) {
                    
                    if (!@ftp_rename($conn_id, $file_to_move, $file_destination)) {
                        if (checkFirstCharTilde($file_to_move) == 1) {
                            if (!@ftp_rename($conn_id, replaceTilde($file_to_move), replaceTilde($file_destination))) {
                                recordFileError("file", sanitizeStr($file), $lang_cant_rename);
                                $isError = 1;
                            }
                        } else {
                            recordFileError("file", sanitizeStr($file), $lang_cant_rename);
                            $isError = 1;
                        }
                    }
                    
                    if ($isError == 0) {
                        
                        // Delete item from history
                        deleteFtpHistory($file_to_move);
                    }
                }
            }
            
            $i++;
        }
        
        // Reset var
        $_SESSION["clipboard_rename"] = array();
        
    } else {
        
        $myfile = fopen("dialog_rename.txt", "w") or die("Unable to open file!");
        $txt = "Action dialog" ."\n";
        fwrite($myfile, $txt);


        // Recreate arrays
        $fileArray                    = recreateFileFolderArrays("file");
        $folderArray                  = recreateFileFolderArrays("folder");
        $_SESSION["clipboard_rename"] = array();
        
        $n      = sizeof($fileArray) + sizeof($folderArray);
        $height = $n * 35;
        
        $width = 565;
        $title = $lang_title_rename;
        
        displayPopupOpen(1, $width, $height, 0, $title);
        
        $i = 0;
        
        // Set vars
        $vars       = "&ftpAction=rename&processAction=1";
        $onKeyPress = "onkeypress=\"if (event.keyCode == 13){ processForm('" . $vars . "'); activateActionButtons(0,0); return false; }\"";
        
        // Display folders
        foreach ($folderArray AS $folder) {
            
            $folder = getFileFromPath($folder);
            
            echo "<img src=\"images/icon_16_folder.gif\" width=\"16\" height=\"16\" alt=\"\"> ";
            echo "<input type=\"text\" name=\"file" . $i . "\" class=\"inputRename\" value=\"" . quotesReplace($folder, "d") . "\" " . $onKeyPress . "><br>";
            $_SESSION["clipboard_rename"][] = $folder;
            $i++;
        }
        
        // Display files
        foreach ($fileArray AS $file) {
            
            $file = getFileFromPath($file);
            
            echo "<img src=\"images/icon_16_file.gif\" width=\"16\" height=\"16\" alt=\"\"> ";
            echo "<input type=\"text\" name=\"file" . $i . "\" class=\"inputRename\" value=\"" . quotesReplace($file, "d") . "\" " . $onKeyPress . "><br>";
            $_SESSION["clipboard_rename"][] = $file;
            $i++;
        }
        
        displayPopupClose(0, $vars, 1);
    }
}

function chmodFiles()
{
    
    global $conn_id;
    global $lang_chmod_max_777;
    global $lang_file_cant_chmod;
    global $lang_chmod_owner;
    global $lang_chmod_group;
    global $lang_chmod_public;
    global $lang_chmod_manual;
    global $lang_title_chmod;
    global $lang_chmod_no_support;
    
    if (!function_exists('ftp_chmod')) {
        
        $_SESSION["errors"][] = $lang_chmod_no_support;
        
    } else {
        
        // Check for a posted form
        if ($_POST["processForm"] == 1) {
            
            if (trim($_POST["chmodNum"]) > 777) {
                
                $_SESSION["errors"][] = $lang_chmod_max_777;
                
            } else {
                
                $mode                 = formatChmodNumber($_POST["chmodNum"]);
                $lang_file_cant_chmod = str_replace("[perms]", $mode, $lang_file_cant_chmod);
                
                foreach ($_SESSION["clipboard_chmod"] AS $file) {
                    
                    if (!@ftp_chmod($conn_id, $mode, $file)) {
                        if (checkFirstCharTilde($file) == 1) {
                            if (!@ftp_chmod($conn_id, $mode, replaceTilde($file))) {
                                recordFileError("file", replaceTilde($file), $lang_file_cant_chmod);
                            }
                        } else {
                            recordFileError("file", $file, $lang_file_cant_chmod);
                        }
                    }
                }
            }
            
            // Reset var
            $_SESSION["clipboard_chmod"] = array();
            
        } else {
            
            // Recreate arrays
            $fileArray                   = recreateFileFolderArrays("file");
            $folderArray                 = recreateFileFolderArrays("folder");
            $_SESSION["clipboard_chmod"] = array();
            
            // Count items checked
            $n = sizeof($fileArray) + sizeof($folderArray);
            
            // Get attributes if 1 item selected
            if ($n == 1) {
                
                if ($theFile == "")
                    $theFile = $fileArray[0];
                if ($theFile == "")
                    $theFile = $folderArray[0];
                
                $theFile = getFileFromPath($theFile);
                
                $ftp_rawlist = getFtpRawList($_SESSION["dir_current"]);
                
                // Go through array of files/folders
                foreach ($ftp_rawlist AS $ff) {
                    
                    // Split up array into values
                    //$ff = preg_split("/[\s]+/", $ff, 9);
                    preg_match('/'. str_repeat('([^\s]+)\s+',7) . '([^\s]+) (.+)/', $ff, $matches);
                    $ff = array_slice($matches, 1);
                    
                    $perms = $ff[0];
                    $file  = $ff[8];
                    
                    // Check for a match
                    if ($file == $theFile) {
                        $chmod = getChmodNumber($perms);
                        $o_wrx = substr($perms, 1, 3);
                        $g_wrx = substr($perms, 4, 3);
                        $p_wrx = substr($perms, 7, 3);
                    }
                }
            }
            
            // Save folders
            foreach ($folderArray AS $folder) {
                $_SESSION["clipboard_chmod"][] = $folder;
            }
            
            // Save files
            foreach ($fileArray AS $file) {
                $_SESSION["clipboard_chmod"][] = $file;
            }
            
            $height = 335;
            $width  = 420;
            $title  = $lang_title_chmod;
            
            displayPopupOpen(1, $width, $height, 0, $title);
            
            $vars = "&ftpAction=chmod&processForm=1";
            
            displayChmodFieldset($lang_chmod_owner, "owner", $o_wrx, $vars);
            displayChmodFieldset($lang_chmod_group, "group", $g_wrx, $vars);
            displayChmodFieldset($lang_chmod_public, "public", $p_wrx, $vars);
            displayChmodFieldset($lang_chmod_manual, "manual", $chmod, $vars);
            
            displayPopupClose(0, $vars, 1);
        }
    }
}

function formatChmodNumber($str)
{
    
    $str = trim($str);
    $str = octdec(str_pad($str, 4, '0', STR_PAD_LEFT));
    $str = (int) $str;
    
    return $str;
}

function getChmodNumber($str)
{
    
    $j      = 0;
    $strlen = strlen($str);
    for ($i = 0; $i < $strlen; $i++) {
        
        if ($i >= 1 && $i <= 3)
            $m = 100;
        if ($i >= 4 && $i <= 6)
            $m = 10;
        if ($i >= 7 && $i <= 9)
            $m = 1;
        
        $l = substr($str, $i, 1);
        
        if ($l != "d" && $l != "-") {
            
            if ($l == "r")
                $n = 4;
            if ($l == "w")
                $n = 2;
            if ($l == "x")
                $n = 1;
            
            $j = $j + ($n * $m);
        }
    }
    
    return $j;
}

function displayChmodFieldset($title, $type, $chmod, $vars)
{
    
    global $lang_chmod_read;
    global $lang_chmod_write;
    global $lang_chmod_exe;
?>
<fieldset class="fieldsetChmod">
<legend><?php
    echo $title;
?></legend>
<?php
    if ($type == "manual") {
?>
<input type="text" size="4" name="chmodNum" id="chmodNum" value="<?php
        echo $chmod;
?>" onkeypress="if (event.keyCode == 13){ processForm('<?php
        echo $vars;
?>'); activateActionButtons(0,0); return false;}">
<?php
    } else {
?>
<?php
        if ($type == "owner")
            $n = 100;
        if ($type == "group")
            $n = 10;
        if ($type == "public")
            $n = 1;
        
        $n_r = $n * 4;
        $n_w = $n * 2;
        $n_e = $n * 1;
?>
<div class="checkboxChmod"><input type="checkbox" id="<?php
        echo $type;
?>_r" value="1" <?php
        if (substr($chmod, 0, 1) == "r")
            echo "checked";
?> onclick="updateChmodNum(this.id,<?php
        echo $n_r;
?>)"> <?php
        echo $lang_chmod_read;
?></div>
<div class="checkboxChmod"><input type="checkbox" id="<?php
        echo $type;
?>_w" value="1" <?php
        if (substr($chmod, 1, 1) == "w")
            echo "checked";
?> onclick="updateChmodNum(this.id,<?php
        echo $n_w;
?>)"> <?php
        echo $lang_chmod_write;
?></div>
<div class="checkboxChmod"><input type="checkbox" id="<?php
        echo $type;
?>_e" value="1" <?php
        if (substr($chmod, 2, 1) == "x")
            echo "checked";
?> onclick="updateChmodNum(this.id,<?php
        echo $n_e;
?>)"> <?php
        echo $lang_chmod_exe;
?></div>
<?php
    }
?>
</fieldset>
<?php
}

function editFile()
{
    
    global $conn_id;
    global $lang_server_error_down;
    
   

    $isError = 0;
    
    $file      = quotesUnescape($_POST["file"]);
    $file_name = getFileFromPath($file);
    $fp1       = createTempFileName($file_name);
    $fp2       = $file;
    
    
      
    
    
    $myfile = fopen("Editfile.txt", "w") or die("Unable to open file!");
    
    $txt = $dir_display ."\n";
    fwrite($myfile, $txt);

    $txt = $_SESSION["dir_current"] ."\n";
    fwrite($myfile, $txt);

    $txt = $file ."\n";
    fwrite($myfile, $txt);

    $txt = $file_name ."\n";
    fwrite($myfile, $txt);

    $txt = $fp1 ."\n";
    fwrite($myfile, $txt);
    
    fclose($myfile);
    

    ensureFtpConnActive();
    
    // Download the file
    if (!@ftp_get($conn_id, $fp1, $fp2, FTP_BINARY)) {
        
        if (checkFirstCharTilde($fp2) == 1) {
            if (!@ftp_get($conn_id, $fp1, replaceTilde($fp2), FTP_BINARY)) {
                recordFileError("file", quotesEscape($file, "s"), $lang_server_error_down);
                $isError = 1;
            }
        } else {
            recordFileError("file", quotesEscape($file, "s"), $lang_server_error_down);
            $isError = 1;
        }
    }
    
    if ($isError == 0) {
        
       

        // Check file has contents
        if (filesize($fp1) > 0) {
            
            $fd      = @fopen($fp1, "r");
            $content = @fread($fd, filesize($fp1));
            @fclose($fd);
        }
        
        displayEditFileForm($file, $content);
    }
    
    // Delete tmp file
    unlink($fp1);
}

function xxxdisplayEditFileForm($file, $content)
{

    //echo "<script>alert(' Edit ')</script>";

    //header("Location: google.fr");

    //header("Location: https://www.geeksforgeeks.org");

    header("Location: message.php");

    exit();

}


function displayEditFileForm($file, $content)
{
    
    global $lang_title_edit_file;
    global $lang_btn_save;
    global $lang_btn_close;
    
    $width        = $_POST["windowWidth"] - 250;
    $height       = $_POST["windowHeight"] - 220;
    $editorHeight = $height - 85;
    
    $file_display = $file;
    $file_display = sanitizeStr($file_display);
    $file_display = replaceTilde($file_display);

    if (strpos($file_display, 'www') !== false) 
    {
        //echo "La chaîne contient 'www'.";
        $fichier = str_replace("~/www/", "https://analog-design.net/", $file);
        // pour l'affichage
        $str = str_replace("https://analog-design.net/", "", $fichier);
        $title        = $lang_title_edit_file . ": /" . $str;
    } 
    else 
    {
        //echo "La chaîne ne contient pas 'www'.";
        $fichier = str_replace("~/", "https://analog-design.net/", $file);
        $str = str_replace("https://analog-design.net/", "", $fichier);
        $title        = $lang_title_edit_file . ": /" . $str;

        //$myfile = fopen("xxxxnewfile.txt", "w") or die("Unable to open file!");
        //$txt = $fichier ."\n";
        //fwrite($myfile, $txt);
        //fclose($myfile);
    }


    /*$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
    
    $file_display = $file;
    $txt = $file_display ."\n";
    fwrite($myfile, $txt);

    $file_display = sanitizeStr($file_display);
    $txt = $file_display ."\n";
    fwrite($myfile, $txt);

    $file_display = replaceTilde($file_display);
    $txt = $file_display ."\n";
    fwrite($myfile, $txt);

    $fichier = str_replace("~/www/", "https://analog-design.net/", $file);
    $txt = $fichier ."\n";
    fwrite($myfile, $txt);
    
    fclose($myfile);*/

    // si ~/ alors on est a la racine

    // si contient www on est dans dans la hiérarchie
    // https://analog-design.net/2024_PHP/2024_PHP_09_11_2024/FTP/beach-g659a8edef_1920.jpg
    // ~/www/2024_PHP/2024_PHP_09_11_2024/FTP/beach-g659a8edef_1920.jpg
    // ~/www/

    $extension =  pathinfo($file, PATHINFO_EXTENSION);
    // force la conversion de l'extension en minuscule
    $extension = strtolower($extension);


    // pour l'affichage
    //$str = str_replace("https://analog-design.net/", "", $fichier);
   // $title        = $lang_title_edit_file . ": /" . $str;

    displayPopupOpen(0, $width, $height, 0, $title);

    //$file = '93522827_016_5bab.jpg';
    //header('Content-Type: image/jpeg');
    //header('Content-Length: ' . filesize($file));
    //echo file_get_contents($file);

    //lang_title_edit_file

    //https://analog-design.net/

    /*if( ctype_upper($extension) )
    {
        strtolower($extension);
        echo " Traitement " .$extension;
        echo "<br><br>";
    }*/

    //


    /*
<video width="640" height="360" controls autoplay loop muted poster="chemin/vers/votre/image.jpg">
        <source src="chemin/vers/votre/video.mp4" type="video/mp4">
        Votre navigateur ne supporte pas la balise vidéo.
    </video>
    */
/*
    <!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Lire une vidéo AVI avec Video.js</title>
    <link href="https://vjs.zencdn.net/7.15.4/video-js.css" rel="stylesheet" />
    <script src="https://vjs.zencdn.net/7.15.4/video.min.js"></script>
</head>
<body>
    <video id="my-video" class="video-js" controls preload="auto" width="640" height="360" data-setup="{}">
        <source src="chemin/vers/votre/video.avi" type="video/avi">
        Votre navigateur ne supporte pas la balise vidéo.
    </video>
</body>
</html>
   */

// http://joliclic.free.fr/html/object-tag/object-video.html

    if( $extension == "mp4")
    {
        echo "<input type=\"button\" value=\"" . $lang_btn_close . "\" class=\"popUpBtn\" onClick=\"processForm('&ftpAction=openFolder')\"> ";
?>
        <video width="640" height="360" controls autoplay loop muted poster="chemin/vers/votre/image.jpg">
        <source src="<?php echo $fichier; ?>" type="video/mp4">
        Votre navigateur ne supporte pas la balise vidéo.
        </video>
<?php
    }

    if( $extension == "jpg" || $extension == "jpeg" || $extension == "png" || $extension == "gif")
    {

        //$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
        //$txt = $fichier ."\n";
        //fwrite($myfile, $txt);
        //fclose($myfile);

        //$fichier = "56526962_050_d2f0.jpg";

        //$fichier = "https://analog-design.net/2024_PHP/00245be6_medium.jpeg";
        //$fichier = "https://analog-design.net/2024_PHP/map.png";

        //$fichier = "https://analog-design.net/2024_PHP/draw-white-lines-animated-gif.gif";

        echo "<input type=\"button\" value=\"" . $lang_btn_close . "\" class=\"popUpBtn\" onClick=\"processForm('&ftpAction=openFolder')\"> ";
   
?>

        <div id="modal" class="modal">
            <div class="modal-content">

            <?php echo ">>>>> " .$fichier; ?>

                <!--<img src="93522827_016_5bab.jpg" alt="Description de l'image">-->
                <img src="<?php echo $fichier; ?>" alt="pas gloup ...">
            </div>
        </div>

<?php      
    }    
        /*
        <div id="modal" class="modal">
            <div class="modal-content">
                <img src="56526962_050_d2f0.jpg" alt="Description de l'image">
            </div>
        </div>
      
    
        /*  echo "<script>
        var modal = document.getElementById('modal');
        modal.style.display = 'block';
        </script>";*/

  
    if( $extension == "txt" || $extension == "php" ) 
    {
        echo "<input type=\"hidden\" name=\"file\" value=\"" . sanitizeStr($file) . "\">";
        echo "<textarea name=\"editContent\" id=\"editContent\" style=\"height: " . $editorHeight . "px;\">" . sanitizeStrTrim($content) . "</textarea>";
    
        // Save button
        echo "<input type=\"button\" value=\"" . $lang_btn_save . "\" class=\"popUpBtn\" onClick=\"submitToIframe('&ftpAction=editProcess');\"> ";
    
        // Close button
         echo "<input type=\"button\" value=\"" . $lang_btn_close . "\" class=\"popUpBtn\" onClick=\"processForm('&ftpAction=openFolder')\"> ";
    }

/****************************************/
    if( $extension == "docx"  )
    {
        $viewerUrl = "https://docs.google.com/gview?url=https://analog-design.net/2024_PHP/2024_PHP_25_11_2024/FTP/Monsta-FTP-master/test.docx&embedded=true";
?>
        <iframe src= "<?php echo $viewerUrl; ?>"  style="width:600px; height:500px;" frameborder="0"></iframe>
<?php
    }
/****************************************/

if( $extension ==  "xlsx"  )
{
    $viewerUrl = "https://docs.google.com/gview?url=https://analog-design.net/2024_PHP/2024_PHP_25_11_2024/FTP/Monsta-FTP-master/test.xlsx&embedded=true";
?>
    <iframe src= "<?php echo $viewerUrl; ?>"  style="width:600px; height:500px;" frameborder="0"></iframe>
<?php
}


/****************************************/


if(  $extension == "pptx" )
{
    $viewerUrl = "https://docs.google.com/gview?url=https://analog-design.net/2024_PHP/2024_PHP_25_11_2024/FTP/Monsta-FTP-master/test.pptx&embedded=true";
?>
    <iframe src= "<?php echo $viewerUrl; ?>"  style="width:600px; height:500px;" frameborder="0"></iframe>
<?php
}

/****************************************/

if(  $extension == "pdf" )
{
    $viewerUrl = "https://docs.google.com/gview?url=https://analog-design.net/2024_PHP/2024_PHP_25_11_2024/FTP/Monsta-FTP-master/test.pdf&embedded=true";
?>
    <iframe src= "<?php echo $viewerUrl; ?>"  style="width:600px; height:500px;" frameborder="0"></iframe>
<?php
}

/****************************************/



    if( $extension == "000docx" || $extension == "000xlsx" || $extension == "000pptx" )
    {

        echo "<input type=\"button\" value=\"" . $lang_btn_close . "\" class=\"popUpBtn\" onClick=\"processForm('&ftpAction=openFolder')\"> ";
        echo "<br><br>";

        $viewerUrl = 'https://view.officeapps.live.com/op/view.aspx?src=' . urlencode($fichier);
?>

        <iframe src="<?php echo $viewerUrl; ?>" width="1000" height="400" frameborder="0" allowfullscreen></iframe>
        
<?php

    }

    if($extension == "pdfzzzzz") // OK
    {
        $pdfUrl = 'https://analog-design.net/2024_PHP/2024_PHP_28_10_2024/explorer/aaa.pdf';
        $pdfUrl  = $fichier;
        // URL de Google Drive Viewer
        $viewerUrl = 'https://drive.google.com/viewerng/viewer?embedded=true&url=' . urlencode($pdfUrl);
?>

        <iframe src="<?php echo $viewerUrl; ?>" width="600" height="400" frameborder="0" allowfullscreen></iframe>
<!--
        <iframe src="https://docs.google.com/gview?url=https://example.com/sample.pdf&embedded=true" style="width:600px; height:500px;" 
            frameborder="0"></iframe>
        -->
<?php
    }


    

    if( $extension == "0000pdf" ) // OK
    {
        //$documentUrl = 'https://analog-design.net/2024_PHP/2024_PHP_28_10_2024/explorer/aaa.pdf';
        //echo "<embed src='$documentUrl' type='application/pdf' width='80%' height='600px' />";

        //$file = 'https://analog-design.net/2024_PHP/2024_PHP_28_10_2024/explorer/aaa.pdf';

        echo "<input type=\"button\" value=\"" . $lang_btn_close . "\" class=\"popUpBtn\" onClick=\"processForm('&ftpAction=openFolder')\"> ";
   
        echo "<br><br>";

        $file = $fichier;

        echo "<embed src='$file' type='application/pdf' width='80%' height='600px' />";

       // $documentUrl = 'https://analog-design.net/2024_PHP/2024_PHP_28_10_2024/explorer/test.docx';

       // $documentUrl = 'https://analog-design.net/2024_PHP/2024_PHP_28_10_2024/explorer/test.pptx';
        // URL de Office Online Viewer
        //$viewerUrl = 'https://view.officeapps.live.com/op/view.aspx?src=' . urlencode($documentUrl);
      
    }

    if($extension == "pdf_no_valide")
    {
        $file = 'https://analog-design.net/2024_PHP/2024_PHP_28_10_2024/explorer/aaa.pdf';
        $filename = 'https://analog-design.net/2024_PHP/2024_PHP_28_10_2024/explorer/aaa.pdf';
    
        // Header content type
        header('Content-type: application/pdf');
        header('Content-Disposition: inline;
        filename="' . $filename . '"');
        header('Content-Transfer-Encoding: binary');
        header('Accept-Ranges: bytes');
        
        // Read the file
        @readfile($file);

    }

    displayPopupClose(0, "", 0);
}

function editProcess()
{
    
    // Saving the file to the iframe preserves the cursor position in the edit div.
    
    global $conn_id;
    global $lang_server_error_up;
    
    $isError = 0;
    
    // Get file contents
    $file      = quotesUnescape($_POST["file"]);
    $file_name = getFileFromPath($file);
    $fp1       = createTempFileName($file_name);
    $fp2       = $file;
    
    $editContent = $_POST["editContent"];
    
    // Write content to a file
    $tmpFile = @fopen($fp1, "w+");
    @fputs($tmpFile, $editContent);
    @fclose($tmpFile);
    
    ensureFtpConnActive();
    
    if (!@ftp_put($conn_id, $fp2, $fp1, FTP_BINARY)) {
        if (checkFirstCharTilde($fp2) == 1) {
            if (!@ftp_put($conn_id, replaceTilde($fp2), $fp1, FTP_BINARY)) {
                recordFileError("file", $file_name, $lang_server_error_up);
            }
        } else {
            recordFileError("file", $file_name, $lang_server_error_up);
        }
    }
    
    // Delete tmp file
    unlink($fp1);
}

function downloadFile()
{
    

    global $conn_id;
    global $lang_server_error_down;
    
    $isError = 0;
    
    $file      = quotesUnescape($_GET["dl"]);
    $file_name = getFileFromPath($file);
    $fp1       = createTempFileName($file_name);
    $fp2       = $file;
    

    $myfile = fopen("DOWNLOAD.txt", "w") or die("Unable to open file!");
   
    $txt = "File " .$file ."\n";
    fwrite($myfile, $txt);

    $txt = "File name " .$file_name ."\n";
    fwrite($myfile, $txt);

    $txt = "fp1 " .$fp1 ."\n";
    fwrite($myfile, $txt);

    $txt = "fp2 " .$fp2 ."\n";
    fwrite($myfile, $txt);

   


    ensureFtpConnActive();
    
    // Download the file
    if (!@ftp_get($conn_id, $fp1, $fp2, FTP_BINARY)) 
    {
        if (checkFirstCharTilde($fp2) == 1) 
        {
            if (!@ftp_get($conn_id, $fp1, replaceTilde($fp2), FTP_BINARY)) 
            {
                recordFileError("file", quotesEscape($file, "s"), $lang_server_error_down);
                $isError = 1;
                $txt = "Mode 1 " ."\n";
                fwrite($myfile, $txt);
            }
        } 
        else 
        {
            recordFileError("file", quotesEscape($file, "s"), $lang_server_error_down);
            $isError = 1;
            $txt = "Mode 2 " ."\n";
            fwrite($myfile, $txt);
        }
    }
    
    if ($isError == 0) 
    {
        
        header("Content-Type: application/octet-stream");
        header("Content-Disposition: attachment; filename=\"" . quotesEscape($file_name, "d") . "\""); // quotes required for spacing in filename
        header("Content-Length: " . filesize($fp1));
        
        $txt = "Mode 3 " ."\n";
        fwrite($myfile, $txt);

        flush();
        
        $fp = @fopen($fp1, "r");
        while (!feof($fp)) {
            echo @fread($fp, 65536);
            @flush();
        }
        @fclose($fp);
    }

    fclose($myfile);
    
    // Delete tmp file
    unlink($fp1);
}

function quotesUnescape($str)
{
    
    $str = str_replace("\'", "'", $str);
    $str = str_replace('\"', '"', $str);
    
    return $str;
}

function quotesEscape($str, $type)
{
    
    if ($type == "s" || $type == "")
        $str = str_replace("'", "\'", $str);
    if ($type == "d" || $type == "")
        $str = str_replace('"', '\"', $str);
    
    return $str;
}

function quotesReplace($str, $type)
{
    
    $str = quotesUnescape($str);
    
    if ($type == "s")
        $str = str_replace("'", "&acute;", $str);
    if ($type == "d")
        $str = str_replace('"', '&quot;', $str);
    
    return $str;
}

/*
function valide_deleteFiles()
{

    $width = 565;
    $height = 700;
    $title = "Zoulou";
    
    displayPopupOpen(1, $width, $height, 0, $title);

    $vars = "&ftpAction=action_delete&processForm=1";

    echo "Tartuffe";

    displayPopupClose(0, $vars, 1);
}
*/
/*
function deleteFiles()
{
    //echo "<script>alert(' Delete ')</script>";

    // header("Location: http://www.example.com/another-page.php");
    //exit();

    $myfile = fopen("delete.txt", "w") or die("Unable to open file!");
    $txt = "Valide OK Action delete" ."\n";
    fwrite($myfile, $txt);
    fclose($myfile);
   
    AAAdeleteFiles();


}
*/

/****************************************************** 555 */

function blabla()
{
    
    global $conn_id;
    global $lang_chmod_max_777;
    global $lang_file_cant_chmod;
    global $lang_chmod_owner;
    global $lang_chmod_group;
    global $lang_chmod_public;
    global $lang_chmod_manual;
    global $lang_title_chmod;
    global $lang_chmod_no_support;
    
    // Check for a posted form
    if ($_POST["processForm"] == 1) 
    {
        $fileArray = $_SESSION['delete_files'];
        $folderArray = $_SESSION['delete_folders'];
       
         // folders
        foreach ($folderArray AS $folder) 
        {
       
            $myfile = fopen("delete_folder01.txt", "w") or die("Unable to open file!");
            $txt = "Delete 01 " .$folder ."\n";
            fwrite($myfile, $txt);
           
            $folder = getFileFromPath($folder);
           
            $txt = "Delete 02 " .$folder ."\n";
            fwrite($myfile, $txt);
                       
            $txt = "Delete 03 " .$_SESSION["dir_current"] ."\n";
            fwrite($myfile, $txt);
          
            fclose($myfile);

            deleteFolder($folder, $_SESSION["dir_current"]);
        }

        // files
        foreach ($fileArray AS $file) 
        {
                $isError      = 0;
                $file_decoded = urldecode($file);

                if ($file != "") 
                {

                    $file_decoded = urldecode( $file );

                    $myfile = fopen("delete01.txt", "w") or die("Unable to open file!");
                    $txt = "Delete 01 " .$file_decoded ."\n";
                    fwrite($myfile, $txt);
                    fclose($myfile);
           
                    if (!@ftp_delete($conn_id, $file_decoded)) 
                    {
                        $myfile = fopen("traitement_delete05.txt", "w") or die("Unable to open file!");
                        $txt = "Action delete 5" ."\n";
                        fwrite($myfile, $txt);
                        fclose($myfile);

                        if (checkFirstCharTilde($file_decoded) == 1) 
                        {
                            $myfile = fopen("traitement_delete06.txt", "w") or die("Unable to open file!");
                            $txt = "Action delete 6" ."\n";
                            fwrite($myfile, $txt);
                            fclose($myfile);    
                            // 

                            if (!@ftp_delete($conn_id, replaceTilde($file_decoded))) 
                            {
                                $isError = 1;
                          
                            }
                        } 
                        else 
                        {
                            $isError = 1;
                        }
                    }

                    // If deleting decoded file fails, try original file name
                    if ($isError == 1) 
                    {
                        $myfile = fopen("traitement_delete07.txt", "w") or die("Unable to open file!");
                        $txt = "Action delete 7" ."\n";
                        fwrite($myfile, $txt);
                        fclose($myfile);

                        if (!@ftp_delete($conn_id, "" . $file . "")) 
                        {
                            if (checkFirstCharTilde($file) == 1) 
                            {
                                if (!@ftp_delete($conn_id, "" . replaceTilde($file) . "")) 
                                {
                                    recordFileError("file", getFileFromPath($file), $lang_cant_delete);
                                
                                }
                            } 
                            else 
                            {
                                recordFileError("file", getFileFromPath($file), $lang_cant_delete);
                            }
                        }
                    }
                    
                }    
        } 
    }
    
    else 
    {
            
            $folderArray = recreateFileFolderArrays("folder");
            $fileArray   = recreateFileFolderArrays("file");
                
            $_SESSION['delete_folders'] = $folderArray;
            $_SESSION['delete_files'] = $fileArray; 

            $height = 100;
            $width  = 420;
            $title  = "Confirmer suppression";
            
            displayPopupOpen(1, $width, $height, 1, $title);

            if(count($folderArray) != 0 && count($fileArray) == 0 )
            {
                echo "Voulez-vous supprimer le ou les répertoire(s) et tout ce qu'il contient ?. ";
            }    
            if(count($folderArray) == 0 && count($fileArray) != 0 )
            {
                echo "Voulez-vous supprimer le ou les fichier(s) ?. ";
            }   
            if(count($folderArray) != 0 && count($fileArray) != 0 )
            {
                echo "Voulez-vous supprimer tous ces éléments?. ";
            }


            
            
            $vars = "&ftpAction=delete&processForm=1";
                      
            displayPopupClose(1, $vars, 1);
   
    }
    
}

/********************************************************** */
/*function aaa()
{
    if ($_POST["processAction"] == 1) 
    {


        $myfile = fopen("traitement_delete", "w") or die("Unable to open file!");
        $txt = " Action DELETE" ."\n";
        fwrite($myfile, $txt);
        fclose($myfile);
    }
    else
    {
        $width = 565;
        $height = 700;
        $title = "Zoulou";
        
        $myfile = fopen("dialog_delete", "w") or die("Unable to open file!");
        $txt = "Dialog Action TRACE" ."\n";
        fwrite($myfile, $txt);
        fclose($myfile);

        displayPopupOpen(1, $width, $height, 0, $title);
    
        //$onKeyPress = "onkeypress=\"if (event.keyCode == 13){ processForm('" . $vars . "'); activateActionButtons(0,0); return false; }\"";
    
        

        $vars = "&ftpAction=delete&processForm=1";
    
        echo "Tartuffe";
    
        displayPopupClose(0, $vars, 1);
    }   
}
*/
function AAAdeleteFiles()
{
    
    global $conn_id;
    global $lang_file_doesnt_exist;
    global $lang_cant_delete;
    
    $myfile = fopen("traitement_delete.txt", "w") or die("Unable to open file!");
    $txt = "Action TRACE" ."\n";
    fwrite($myfile, $txt);
   
    $folderArray = recreateFileFolderArrays("folder");
    $fileArray   = recreateFileFolderArrays("file");

    $str = implode("-", $folderArray);
    $txt = $str ."\n";
    fwrite($myfile, $txt);

    $str = implode("-", $fileArray);
    $txt = $str ."\n";
    fwrite($myfile, $txt);

    fclose($myfile);

    // ~/KU.jpg
    // ~/www/2024_PHP/00245be6_medium.jpeg

        
    // folders
    foreach ($folderArray AS $folder) 
    {
       
        $folder = getFileFromPath($folder);
        
        deleteFolder($folder, $_SESSION["dir_current"]);
    }
    
    // files
    foreach ($fileArray AS $file) 
    {
        $isError      = 0;
        $file_decoded = urldecode($file);
        
        if ($file != "") 
        {
 
            $myfile = fopen("traitement_delete02.txt", "w") or die("Unable to open file!");
            $txt = "Action detected 2" ."\n";
            fwrite($myfile, $txt);
            fclose($myfile);

            
            // Check if file exists
            if (checkFileExists("f", $file, $_SESSION["dir_current"]) == 1) 
            {
                recordFileError("file", $file, $lang_file_doesnt_exist);
                $myfile = fopen("traitement_delete03.txt", "w") or die("Unable to open file!");
                $txt = "Action detected 3" ."\n";
                fwrite($myfile, $txt);
                fclose($myfile);
            } 
            else 
            {
                $myfile = fopen("traitement_delete04.txt", "w") or die("Unable to open file!");
                $txt = "Action delete 4" ."\n";
                fwrite($myfile, $txt);
                $txt = "     >>>>>>  gfqgfhhg" ."\n";
                fwrite($myfile, $txt);

                $txt = "     AAAAA " . $file_decoded ."\n";
                fwrite($myfile, $txt);

                fclose($myfile);

                if (!@ftp_delete($conn_id, $file_decoded)) 
                {
                    $myfile = fopen("traitement_delete05.txt", "w") or die("Unable to open file!");
                    $txt = "Action delete 5" ."\n";
                    fwrite($myfile, $txt);
                    fclose($myfile);

                    if (checkFirstCharTilde($file_decoded) == 1) 
                    {
                        $myfile = fopen("traitement_delete06.txt", "w") or die("Unable to open file!");
                        $txt = "Action delete 6" ."\n";
                        fwrite($myfile, $txt);
                        fclose($myfile);    

                        if (!@ftp_delete($conn_id, replaceTilde($file_decoded))) 
                        {
                            $isError = 1;
                          
                        }
                    } 
                    else 
                    {
                        $isError = 1;
                       
                    }
                }
                
                // If deleting decoded file fails, try original file name
                if ($isError == 1) 
                {
                    $myfile = fopen("traitement_delete07.txt", "w") or die("Unable to open file!");
                    $txt = "Action delete 7" ."\n";
                    fwrite($myfile, $txt);
                    fclose($myfile);

                    if (!@ftp_delete($conn_id, "" . $file . "")) 
                    {
                        if (checkFirstCharTilde($file) == 1) 
                        {
                            if (!@ftp_delete($conn_id, "" . replaceTilde($file) . "")) 
                            {
                                recordFileError("file", getFileFromPath($file), $lang_cant_delete);
                                
                            }
                        } 
                        else 
                        {
                            recordFileError("file", getFileFromPath($file), $lang_cant_delete);
                           
                        }
                    }
                }
                
            }
        }
        
    }


   
}

function deleteFolder($folder, $path)
{
    
    global $conn_id;
    global $lang_cant_delete;
    global $lang_folder_doesnt_exist;
    global $lang_folder_cant_delete;
    
    $isError = 0;
    
    // List contents of folder
    if ($path != "/" && $path != "~") {
        
        $folder_path = $path . "/" . $folder;
        
    } else {
        
        if ($_SESSION["win_lin"] == "lin" || $_SESSION["win_lin"] == "mac")
            if ($_SESSION["dir_current"] == "/")
                $folder_path = "/" . $folder;
        if ($_SESSION["dir_current"] == "~")
            $folder_path = "~/" . $folder;
        
        if ($_SESSION["win_lin"] == "win")
            $folder_path = "/" . $folder;
    }
    
    $ftp_rawlist = getFtpRawList($folder_path);
    
    // Go through array of files/folders
    if (sizeof($ftp_rawlist) > 0) {
        
        $count = 0;
        
        foreach ($ftp_rawlist AS $ff) {
            
            $count++;
            
            // Split up array into values (Lin)
            if ($_SESSION["win_lin"] == "lin") {
                
                // $ff    = preg_split("/[\s]+/", $ff, 9);
                preg_match('/'. str_repeat('([^\s]+)\s+',7) . '([^\s]+) (.+)/', $ff, $matches);
                $ff = array_slice($matches, 1);
                $perms = $ff[0];
                $file  = $ff[8];
                
                if (getFileType($perms) == "d")
                    $isFolder = 1;
                else
                    $isFolder = 0;
            }
            
            // Split up array into values (Mac)
            elseif ($_SESSION["win_lin"] == "mac") {
                
                if ($count == 1)
                    continue;
                
                //$ff    = preg_split("/[\s]+/", $ff, 9);
                preg_match('/'. str_repeat('([^\s]+)\s+',7) . '([^\s]+) (.+)/', $ff, $matches);
                $ff = array_slice($matches, 1);
                $perms = $ff[0];
                $file  = $ff[8];
                
                if (getFileType($perms) == "d")
                    $isFolder = 1;
                else
                    $isFolder = 0;
            }
            
            // Split up array into values (Win)
            elseif ($_SESSION["win_lin"] == "win") {
                
                $ff   = preg_split("/[\s]+/", $ff, 4);
                $size = $ff[2];
                $file = $ff[3];
                
                if ($size == "<DIR>")
                    $isFolder = 1;
                else
                    $isFolder = 0;
            }
            
            if ($file != "." && $file != "..") {
                
                // Check for sub folders and then perform this function
                if ($isFolder == 1) {
                    deleteFolder($file, $folder_path);
                } else {
                    // otherwise delete file
                    $file_path = $folder_path . "/" . $file;
                    if (!@ftp_delete($conn_id, "" . $file_path . "")) {
                        if (checkFirstCharTilde($file_path) == 1) {
                            if (!@ftp_delete($conn_id, "" . replaceTilde($file_path) . "")) {
                                recordFileError("file", replaceTilde($file_path), $lang_cant_delete);
                            }
                        } else {
                            recordFileError("file", $file_path, $lang_cant_delete);
                        }
                    }
                }
            }
        }
    }
    
    // Check if file exists
    if (checkFileExists("d", $folder, $folder_path) == 1) {
        
        $_SESSION["errors"][] = str_replace("[file]", "<strong>" . tidyFolderPath($folder_path, $folder) . "</strong>", $lang_folder_doesnt_exist);
        
    } else {
        
        // Chage dir up before deleting
        ftp_cdup($conn_id);
        
        // Delete the empty folder
        if (!@ftp_rmdir($conn_id, "" . $folder_path . "")) {
            if (checkFirstCharTilde($folder_path) == 1) {
                if (!@ftp_rmdir($conn_id, "" . replaceTilde($folder_path) . "")) {
                    recordFileError("folder", replaceTilde($folder_path), $lang_folder_cant_delete);
                    $isError = 1;
                }
            } else {
                recordFileError("folder", $folder_path, $lang_folder_cant_delete);
                $isError = 1;
            }
        }
        
        // Remove directory from history
        if ($isError == 0)
            deleteFtpHistory($folder_path);
    }
}

function newFile()
{
    
    global $conn_id;
    global $lang_title_new_file;
    global $lang_new_file_name;
    global $lang_template;
    global $lang_no_template;
    global $lang_file_exists;
    global $lang_file_cant_make;
    global $templates_dir;
    
    $isError = 0;
    
    // Set vars
    $vars = "&ftpAction=newFile";
    
    $file_name = quotesUnescape($_POST["newFile"]);
    
    if ($file_name == "") {
        
        $title  = $lang_title_new_file;
        $width  = 400;
        $height = 95;
        
        displayPopupOpen(0, $width, $height, 0, $title);
        
        echo "<input type=\"text\" name=\"newFile\" id=\"newFile\" placeholder=\"" . $lang_new_file_name . "\" onkeypress=\"if (event.keyCode == 13){ processForm('" . $vars . "'); return false;}\">";
        
        if (is_dir($templates_dir)) {
            
            if ($dh = opendir($templates_dir)) {
                
                $i = 0;
                while (($file = readdir($dh)) !== false) {
                    
                    if ($file != "" && $file != "." && $file != ".." && $file != "index.html") {
                        
                        $file_name = $file;
                        
                        $template_found = 1;
                        
                        $langs .= "<option value=\"" . $file_name . "\">" . $file_name . "</option>";
                    }
                }
                closedir($dh);
            }
        }
        
        echo "<p>" . $lang_template . ": ";
        echo "<select name=\"template\">";
        echo "<option value=\"\">" . $lang_no_template . "</option>";
        echo $langs;
        echo "</select>";
        
        displayPopupClose(0, $vars, 1);
        
    } else {
        
        $fp1 = createTempFileName($file_name);
        
        if ($_SESSION["dir_current"] == "/")
            $fp2 = "/" . $file_name;
        else
            $fp2 = $_SESSION["dir_current"] . "/" . $file_name;
        
        // Check if file already exists
        if (checkFileExists("f", $file_name, $_SESSION["dir_current"]) == 1) {
            recordFileError("file", $file_name, $lang_file_exists);
        } else {

            // Get template
            if ($_POST["template"] != $lang_no_template) {
            
                if (checkFileInclude($_POST["template"],$templates_dir) == 1) {
                
                    $file_name = $templates_dir . "/" . $_POST["template"];
                    $fd        = @fopen($file_name, "r");
                    $content   = @fread($fd, filesize($file_name));
                    @fclose($fd);
                }
            }
            
            // Write file to server
            $tmpFile = @fopen($fp1, "w+");
            @fputs($tmpFile, $content);
            @fclose($tmpFile);
            
            // Upload the file
            if (!@ftp_put($conn_id, $fp2, $fp1, FTP_BINARY)) {
                if (checkFirstCharTilde($fp2) == 1) {
                    if (!@ftp_put($conn_id, replaceTilde($fp2), $fp1, FTP_BINARY)) {
                        recordFileError("file", $file_name, $lang_file_cant_make);
                        $isError = 1;
                    }
                } else {
                    recordFileError("file", $file_name, $lang_file_cant_make);
                    $isError = 1;
                }
            }
            
            if ($isError == 0) {
                
                // Open editor
                $file = $fp2;
                displayEditFileForm($file, $content);
            }
        }
        
        // Delete tmp file
        unlink($fp1);
    }
}

function checkFileExists($type, $file_name, $folder_path)
{
    
    $ftp_rawlist = getFtpRawList($folder_path);
    
    if (is_array($ftp_rawlist)) {
        
        $fileNameAr = array();
        $count      = 0;
        
        // Go through array of files/folders
        foreach ($ftp_rawlist AS $ff) {
            
            $count++;
            
            // Lin
            if ($_SESSION["win_lin"] == "lin") {
                
                // Split up array into values
                //$ff = preg_split("/[\s]+/", $ff, 9);
                preg_match('/'. str_repeat('([^\s]+)\s+',7) . '([^\s]+) (.+)/', $ff, $matches);
                $ff = array_slice($matches, 1);
                
                $perms = $ff[0];
                $file  = $ff[8];
                
                if ($file != "." && $file != "..") {
                    
                    if ($type == "f" && getFileType($perms) == "f")
                        $fileNameAr[] = $file;
                    
                    if ($type == "d" && getFileType($perms) == "d")
                        $fileNameAr[] = $file;
                }
            }
            
            // Mac
            elseif ($_SESSION["win_lin"] == "mac") {
                
                if ($count == 1)
                    continue;
                
                // Split up array into values
                //$ff = preg_split("/[\s]+/", $ff, 9);
                preg_match('/'. str_repeat('([^\s]+)\s+',7) . '([^\s]+) (.+)/', $ff, $matches);
                $ff = array_slice($matches, 1);

                $perms = $ff[0];
                $file  = $ff[8];
                
                if ($file != "." && $file != "..") {
                    
                    if ($type == "f" && getFileType($perms) == "f")
                        $fileNameAr[] = $file;
                    
                    if ($type == "d" && getFileType($perms) == "d")
                        $fileNameAr[] = $file;
                }
            }
            
            // Win
            elseif ($_SESSION["win_lin"] == "win") {
                
                // Split up array into values
                $ff = preg_split("/[\s]+/", $ff, 4);
                
                $size = $ff[2];
                $file = $ff[3];
                
                if ($size == "<DIR>")
                    $size = "d";
                
                if ($type == "d" && $size == "d")
                    $fileNameAr[] = $file;
                
                if ($type == "f" && $size != "d")
                    $fileNameAr[] = $file;
            }
        }
        
        // Check if file is in array
        if (in_array($file_name, $fileNameAr))
            return 1;
        
    } else {
        return 0;
    }
}

function newFolder()
{
    
    global $conn_id;
    global $lang_title_new_folder;
    global $lang_new_folder_name;
    global $lang_folder_exists;
    global $lang_folder_cant_make;
    
    // Set vars
    $vars = "&ftpAction=newFolder";
    
    $folder = quotesUnescape($_POST["newFolder"]);
    
    if ($folder == "") {
        
        $title  = $lang_title_new_folder;
        $width  = 400;
        $height = 40;
        
        displayPopupOpen(0, $width, $height, 0, $title);
        
        echo "<input type=\"text\" name=\"newFolder\" id=\"newFolder\" placeholder=\"" . $lang_new_folder_name . "\" onkeypress=\"if (event.keyCode == 13){ processForm('" . $vars . "'); return false;}\">";
        
        displayPopupClose(0, $vars, 1);
        
    } else {
        
        // Check if folder exists
        if (checkFileExists("d", $folder, $_SESSION["dir_current"]) == 1 || $folder == "..") {
            recordFileError("folder", $folder, $lang_folder_exists);
        } else {
            
            if (!@ftp_mkdir($conn_id, $folder))
                recordFileError("folder", $folder, $lang_folder_cant_make);
        }
    }
}

function uploadFile()
{
    
    global $conn_id;
    global $lang_server_error_up;
    global $lang_browser_error_up;
    
    $file_name = urldecode($_SERVER['HTTP_X_FILENAME']);
    $path      = $_GET["filePath"];
    
    $myfile = fopen("TRACE.txt", "w") or die("Unable to open file!");
    
    $txt = "File name " .$file_name ."\n";
    fwrite($myfile, $txt);

    $txt = "Path " .$path ."\n";
    fwrite($myfile, $txt);

    if ($file_name) 
    {

        $fp1 = createTempFileName($file_name);

        $txt = "Fp1 " .$fp1  ."\n";
        fwrite($myfile, $txt);
        
        // Check if a folder is being uploaded
        if ($path != "") {
            
            // Check to see folder path exists (and create)
            createFolderHeirarchy($path);
            $fp2 = $_SESSION["dir_current"] . "/" . $path . $file_name;

            $txt = "Fp2 - A " .$fp1  ."\n";
            fwrite($myfile, $txt);
            
        } 
        else 
        {
            
            if ($_SESSION["dir_current"] == "/")
            {
                $fp2 = "/" . $file_name;
                $txt = "Fp2 - B " .$fp2  ."\n";
                fwrite($myfile, $txt);
            }    
            else
            {
                $fp2 = $_SESSION["dir_current"] . "/" . $file_name;
                $txt = "Fp2 - C " .$fp2  ."\n";
                fwrite($myfile, $txt);

            }    
        }
        
        /*
        ensureFtpConnActive();
        
        // Check if file reached server
        if (file_put_contents($fp1, file_get_contents('php://input'))) {
            
            if (!@ftp_put($conn_id, $fp2, $fp1, FTP_BINARY)) {
                if (checkFirstCharTilde($fp2) == 1) {
                    if (!@ftp_put($conn_id, replaceTilde($fp2), $fp1, FTP_BINARY)) {
                        recordFileError("file", $file_name, $lang_server_error_up);
                    }
                } else {
                    recordFileError("file", $file_name, $lang_server_error_up);
                }
            }
        } else {
            recordFileError("file", $file_name, $lang_browser_error_up);
        }
        
        // Delete tmp file
        unlink($fp1);
        */
        
        /* */
        $inputHandler = fopen('php://input', "r");
        $fileHandler = fopen($fp1, "w+");

        $txt = "Handler 1 " .$inputHandler  ."\n";
        fwrite($myfile, $txt);
        $txt = "Handler 2 " .$fileHandler  ."\n";
        fwrite($myfile, $txt);


        while (FALSE !== ($buffer = fgets($inputHandler, 65536))) 
        {
            fwrite($fileHandler, $buffer);
        }
        
        fclose($inputHandler);
        fclose($fileHandler);

        // Check if file reached server
        if (file_exists($fp1)) 
        {

            ensureFtpConnActive();

            if (!@ftp_put($conn_id, $fp2, $fp1, FTP_BINARY)) {
                if (checkFirstCharTilde($fp2) == 1) {
                    if (!@ftp_put($conn_id, replaceTilde($fp2), $fp1, FTP_BINARY)) {
                        recordFileError("file", $file_name, $lang_server_error_up);
                    }
                } else {
                    recordFileError("file", $file_name, $lang_server_error_up);
                }
            }
        } 
        else 
        {
            recordFileError("file", $file_name, $lang_browser_error_up);
        }
        
        // Delete tmp file
        unlink($fp1);
        /* */

        fclose($myfile);
    }
}

function createFolderHeirarchy($path)
{
    
    global $conn_id;
    global $lang_folder_cant_make;
    
    $folderAr = explode("/", $path);
    
    $n = sizeof($folderAr);
    for ($i = 0; $i < $n; $i++) {
        
        if ($folder == "")
            $folder = $folderAr[$i];
        else
            $folder = $folder . "/" . $folderAr[$i];
        
        if (!@ftp_mkdir($conn_id, $folder)) {
            if (checkFirstCharTilde($folder) == 1)
                @ftp_mkdir($conn_id, replaceTilde($folder));
        }
    }
}

function iframeUpload()
{
    
    global $conn_id;
    global $lang_server_error_up;
    global $lang_browser_error_up;
    
    $fp1 = $_FILES["uploadFile"]["tmp_name"];
    $fp2 = $_SESSION["dir_current"] . "/" . $_FILES["uploadFile"]["name"];
    
    if ($fp1 != "") {
    
        ensureFtpConnActive();
        
        if (!@ftp_put($conn_id, $fp2, $fp1, FTP_BINARY)) {
            if (checkFirstCharTilde($fp2) == 1) {
                if (!@ftp_put($conn_id, replaceTilde($fp2), $fp1, FTP_BINARY)) {
                    recordFileError("file", $file_name, $lang_server_error_up);
                }
            } else {
                recordFileError("file", $file_name, $lang_server_error_up);
            }
        }
        
        // Delete tmp file
        unlink($fp1);
        
    } else {
        recordFileError("file", $file_name, $lang_browser_error_up);
    }
}

function deleteFtpHistory($dirDelete)
{
    
    $dirDelete = str_replace("/", "\/", $dirDelete);
    
    // Check each item in the history
    if (is_array($_SESSION["dir_history"])) {
        foreach ($_SESSION["dir_history"] AS $dir) {
            
            if (!@preg_match("/^" . $dirDelete . "/", $dir))
                $dir_history[] = $dir;
        }
        
        // Set new array
        $_SESSION["dir_history"] = $dir_history;
        
        // Sort array
        if (is_array($_SESSION["dir_history"]))
            asort($_SESSION["dir_history"]);
    }
}

function singleQuoteEscape($str)
{
    return str_replace("'", "\'", $str);
}

function getFileType($perms)
{
    
    if (substr($perms, 0, 1) == "d")
        return "d"; // directory
    if (substr($perms, 0, 1) == "l")
        return "l"; // link
    if (substr($perms, 0, 1) == "-")
        return "f"; // file
}

function displayAjaxDivOpen()
{
?>
<div id="ajaxContentWindow" onContextMenu="displayContextMenu(event,'','',<?php
    echo assignWinLinNum();
?>)" onClick="unselectFiles()">
<?php
}

function displayAjaxDivClose()
{
?>
</div>
<?php
}

function displayErrors()
{
    
    global $lang_title_errors;
    
    $sizeAr = sizeof($_SESSION["errors"]);
    
    if ($sizeAr > 0) {
        
        $width  = (getMaxStrLen($_SESSION["errors"]) * 10) + 30;
        $height = sizeof($_SESSION["errors"]) * 25;
        
        $title = $lang_title_errors;
        
        displayPopupOpen(1, $width, $height, 1, $title);
        
        $errors = array_reverse($_SESSION["errors"]);
        
        foreach ($errors AS $error) {
        
            $error = str_replace("[a]","<a href='https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=K7PX3FMNE3XQ6' target='paypal'>",$error);
            $error = str_replace("[/a]","</a>",$error);
            
            echo $error . "<br>";
        }
        
        $vars = "&ftpAction=openFolder&resetErrorArray=1";
        
        displayPopupClose(1, $vars, 0);
    }
}

function displayPopupOpen($resize, $width, $height, $isError, $title)
{
    
    // Set default sizes of exceeded
    if ($resize == 1) {
        
        if ($width < 400)
            $width = 400;
        
        if ($height > 400)
            $height = 400;
    }
    
    $windowWidth  = $_POST["windowWidth"];
    $windowHeight = $_POST["windowHeight"];
    
    // Center window
    if ($windowWidth > 0)
        $left = round(($windowWidth - $width) / 2 - 15); // -15 for H padding
    else
        $left = 250;
    
    if ($windowHeight > 0)
        $top = round(($_POST["windowHeight"] - $height) / 2 - 50);
    else
        $top = 250;
    
    echo "<div id=\"blackOutDiv\">";
    echo "<div id=\"popupFrame\" style=\"left: " . $left . "px; top: " . $top . "px; width: " . $width . "px;\">";
    
    if ($isError == 1)
        $divId = "popupHeaderError";
    else
        $divId = "popupHeaderAction";
    
    echo "<div id=\"" . $divId . "\">";
    echo $title;
    echo "</div>";
    
    if ($isError == 1)
        $divId = "popupBodyError";
    else
        $divId = "popupBodyAction";
    
    echo "<div id=\"" . $divId . "\" style=\"height: " . $height . "px;\">";
}

function displayPopupClose($isError, $vars, $btnCancel)
{
    
    global $lang_btn_ok;
    global $lang_btn_cancel;
    
    echo "</div>";
    
    if ($isError == 1)
        $divId = "popupFooterError";
    else
        $divId = "popupFooterAction";
    
    echo "<div id=\"" . $divId . "\">";
    
    // OK button
    if ($vars != "")
        echo "<input type=\"button\" class=\"popUpBtn\" value=\"" . $lang_btn_ok . "\" onClick=\"processForm('" . $vars . "'); activateActionButtons(0,0);\"> ";
    
    // Cancel button
    if ($btnCancel == 1)
        echo "<input type=\"button\" class=\"popUpBtn\" value=\"" . $lang_btn_cancel . "\" onClick=\"ajaxAbort(); processForm('&ftpAction=openFolder');\"> ";
    
    echo "</div>";
    
    echo "</div>";
    echo "</div>";
}

function getMaxStrLen($array)
{
    
    $maxLen = 0;
    
    foreach ($array AS $str) {
        
        $thisLen = strlen($str);
        
        if ($thisLen > $maxLen)
            $maxLen = $thisLen;
    }
    
    return $maxLen;
}

function getFileFromPath($str)
{
    
    $str = preg_replace("/^(.)+\//", "", $str);
    $str = preg_replace("/^~/", "", $str);
    
    return $str;
}

function parentOpenFolder()
{
?>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<script type="text/javascript">
    parent.processForm('&ftpAction=openFolder');
</script>
</body>
</html>
<?php
}

function loadEditableExts()
{
    
    global $editableExts;
    
    if ($editableExts != "") {
?>
<script type="text/javascript">
<?php
        echo "var editableExts = new Array();" . "\n";
        $extAr = explode(",", $editableExts);
        $n     = sizeof($extAr);
        for ($i = 0; $i < $n; $i++) {
            echo "editableExts[" . $i . "] = '" . $extAr[$i] . "';\n";
        }
    }
?>
</script>
<?php
}

function replaceTilde($str)
{
    
    $str = str_replace("~", "/", $str);
    $str = str_replace("//", "/", $str);
    
    return $str;
}

function assignWinLinNum()
{
    
    if ($_SESSION["win_lin"] == "lin" || $_SESSION["win_lin"] == "mac")
        return 1;
    elseif ($_SESSION["win_lin"] == "win")
        return 0;
}

function getParentDir($folder)
{
    
    // Check for Windows backslash
    if ($folder == "\\")
        $folder = "/";
    
    if ($folder == "/") {
        
        return "/";
        
    } else {
        
        $path_parts = pathinfo($folder);
        return $path_parts['dirname'];
    }
}

function displayLangSelect($lang)
{
    
    global $lang_language;
    global $languages_dir;
    
    $dir        = "languages";
    $lang_found = 0;
    
    if (is_dir($languages_dir)) {
        
        if ($dh = opendir($languages_dir)) {
            
            $i = 0;
            while (($file = readdir($dh)) !== false) {
                
                if (substr($file,-1) != "." && pathinfo($file, PATHINFO_EXTENSION) == "php") {
                    
                    $i++;
                    
                    $file_name = $file;
                    
                    // Open file to get language name
                    include($languages_dir . "/" . $file_name);
                    
                    $lang_found = 1;
                    
                    // Strip extension
                    //$file_name = preg_replace("/\..*$/", "", $file_name);
                    
                    $langs = "<option value=\"" . $file_name . "\"";
                    
                    if ($file_name == $lang)
                        $langs .= " selected";
                    
                    $langs .= ">";
                    
                    $langs .= $file_lang_name;
                    
                    $langs .= "</option>";
                    
                    $langsAr[] = $langs;
                    
                    // Restore session language file
                    include($languages_dir . "/" . $lang);
                }
            }
            closedir($dh);
            
            if ($lang_found == 0) {
                
                echo "Language: <strong>languages</strong> folder empty!";
                
            } else {
                
                if ($i > 1) {
                    
                    sort($langsAr);
                    
                    echo $lang_language . ": ";
                    echo "<select name=\"lang\" tabindex=\"-1\">";
                    
                    foreach ($langsAr AS $lang) {
                        echo $lang;
                    }
                    
                    echo "</select>";
                    
                } else {
                    echo "<input type=\"hidden\" name=\"lang\" value=\"" . $file_name . "\">";
                }
            }
            
        } else {
            
            echo "Language: <strong>languages</strong> folder locked!";
        }
        
    } else {
        echo "Language: <strong>languages</strong> folder missing!";
    }
}

function tidyFolderPath($str1, $str2)
{
    
    $str1 = replaceTilde($str1);
    
    if ($str1 == "/")
        return "/" . $str2;
    else
        return $str1 . "/" . $str2;
}

function loadJsLangVars()
{
    global $languages_dir;
    
    // Include language file again to save listing globals
    //$langFileArray = getFileArray("languages");
    
    include($languages_dir . "/en_us.php");
    
    //if (in_array($_SESSION["lang"], $langFileArray))
    include($languages_dir . "/" . $_SESSION["lang"]);

?>
<script type="text/javascript">
var lang_no_xmlhttp = '<?php
    echo quotesEscape($lang_no_xmlhttp, "s");
?>';
var lang_support_drop = '<?php
    echo quotesEscape($lang_support_drop, "s");
?>';
var lang_no_support_drop = '<?php
    echo quotesEscape($lang_no_support_drop, "s");
?>';
var lang_transfer_pending = '<?php
    echo quotesEscape($lang_transfer_pending, "s");
?>';
var lang_transferring_to_ftp = '<?php
    echo quotesEscape($lang_transferring_to_ftp, "s");
?>';
var lang_no_file_selected = '<?php
    echo quotesEscape($lang_no_file_selected, "s");
?>';
var lang_none_selected = '<?php
    echo quotesEscape($lang_none_selected, "s");
?>';
var lang_context_open = '<?php
    echo quotesEscape($lang_context_open, "s");
?>';
var lang_context_download = '<?php
    echo quotesEscape($lang_context_download, "s");
?>';
var lang_context_edit = '<?php
    echo quotesEscape($lang_context_edit, "s");
?>';
var lang_context_cut = '<?php
    echo quotesEscape($lang_context_cut, "s");
?>';
var lang_context_copy = '<?php
    echo quotesEscape($lang_context_copy, "s");
?>';
var lang_context_paste = '<?php
    echo quotesEscape($lang_context_paste, "s");
?>';
var lang_context_rename = '<?php
    echo quotesEscape($lang_context_rename, "s");
?>';
var lang_context_delete = '<?php
    echo quotesEscape($lang_context_delete, "s");
?>';
var lang_context_chmod = '<?php
    echo quotesEscape($lang_context_chmod, "s");
?>';
var lang_size_b = '<?php
    echo quotesEscape($lang_size_b, "s");
?>';
var lang_size_kb = '<?php
    echo quotesEscape($lang_size_kb, "s");
?>';
var lang_size_mb = '<?php
    echo quotesEscape($lang_size_mb, "s");
?>';
var lang_size_gb = '<?php
    echo quotesEscape($lang_size_gb, "s");
?>';
var lang_btn_upload_file = '<?php
    echo quotesEscape($lang_btn_upload_file, "s");
?>';
var lang_btn_upload_files = '<?php
    echo quotesEscape($lang_btn_upload_files, "s");
?>';
var lang_btn_upload_repeat = '<?php
    echo quotesEscape($lang_btn_upload_repeat, "s");
?>';
var lang_btn_upload_folder = '<?php
    echo quotesEscape($lang_btn_upload_folder, "s");
?>';
var lang_file_size_error = '<?php
    echo quotesEscape($lang_file_size_error, "s");
?>';

var upload_limit = '<?php
    echo $_SESSION["upload_limit"];
?>';
</script>
<?php
}

function setLangFile()
{
    
    global $languages_dir;
    
    // The order of these determines the proper display
    if ($_COOKIE["lang"] != "")
        $lang = $_COOKIE["lang"];
    if ($_SESSION["lang"] != "")
        $lang = $_SESSION["lang"];
    if (isset($_POST["lang"]))
        $lang = $_POST["lang"];
    
    if ($lang == "") {
        
        if (is_dir($languages_dir)) {
            if ($dh = opendir($languages_dir)) {
                while (($file = readdir($dh)) !== false) {
                    if ($file != "." && $file != ".." && pathinfo($file, PATHINFO_EXTENSION) == "php") {
                        
                        include($languages_dir . "/" . $file);
                        
                        if ($file_lang_default == 1)
                            $lang = $file;
                    }
                }
                closedir($dh);
            }
        }
    } else {
    
        if (checkFileInclude($lang,$languages_dir) != 1)
            $lang = "en_us.php";
    }
    
    $_SESSION["lang"] = $lang;
}

function sessionExpired($message)
{
    
    global $lang_title_ended;
    global $lang_btn_login;
    
    $title = $lang_title_ended;
    
    displayPopupOpen(1, 200, 90, 1, $title);
    
    echo $message;
    
    echo "<p><input type=\"button\" id=\"btnLogin\" value=\"" . $lang_btn_login . "\" onClick=\"document.location.href='?openFolder=" . rawurlencode($_POST["openFolder"]) . "'\">";
    
    displayPopupClose(1, "", 0);
}

function setUploadLimit()
{
    
    global $lang_size_kb;
    global $lang_size_mb;
    global $lang_size_gb;
    global $lang_size_tb;
    
    if ($_SESSION["upload_limit"] == "") {
        
        // Get the server's memory limit
        //if (preg_match('/msie [1-8]/i',$_SERVER['HTTP_USER_AGENT']))
        //    $upload_limit = ini_get('upload_max_filesize');
        //else
        $upload_limit = ini_get('memory_limit');
        
        $ll = substr($upload_limit, strlen($upload_limit) - 1, 1);
        
        if ($ll == "B") {
            $upload_limit = str_replace("B", "", $upload_limit);
            $upload_limit = $upload_limit * 1;
        }
        if ($ll == "K") {
            $upload_limit = str_replace("K", "", $upload_limit);
            $upload_limit = $upload_limit * 1024;
        }
        if ($ll == "M") {
            $upload_limit = str_replace("M", "", $upload_limit);
            $upload_limit = $upload_limit * 1024 * 1024;
        }
        if ($ll == "G") {
            $upload_limit = str_replace("G", "", $upload_limit);
            $upload_limit = $upload_limit * 1024 * 1024 * 1024;
        }
        if ($ll == "T") {
            $upload_limit = str_replace("T", "", $upload_limit);
            $upload_limit = $upload_limit * 1024 * 1024 * 1024 * 1024;
        }
        
        $_SESSION["upload_limit"] = $upload_limit;
    }
}

function adjustButtonWidth($str)
{
    
    if (strlen(utf8_decode($str)) > 12)
        return "inputButtonNf";
    else
        return "inputButton";
}

function checkReferer()
{
    
    global $lang_session_expired;
    
    $domain = $_SESSION["domain"];
    $domain = str_replace(".", "\.", $domain);
    
    if (preg_match("/" . $domain . "/", $_SERVER["HTTP_REFERER"])) {
        return 1;
    } else {
        sessionExpired($lang_session_expired);
        logOut();
        return 0;
    }
}

function checkFirstCharTilde($str)
{
    
    if (substr($str, 0, 1) == "~")
        return 1;
    else
        return 0;
}

function recordFileError($str, $file_name, $error)
{
    
    $_SESSION["errors"][] = str_replace("[" . $str . "]", "<strong>" . sanitizeStr($file_name) . "</strong>", $error);
}

/*
function getFileArray($dir)
{
    
    $langFileArray = array();
    
    if (is_dir($dir)) {
        
        if ($dh = opendir($dir)) {
            
            $i = 0;
            while (($file = readdir($dh)) !== false) {
                
                if ($file != "" && $file != "." && $file != ".." && $file != "index.html") {
                    $file            = str_replace(".php", "", $file);
                    $langFileArray[] = $file;
                }
            }
            closedir($dh);
        }
    }
    
    return $langFileArray;
}
*/

function sanitizeStr($str)
{
    
    $str = str_replace("&", "&amp;", $str);
    $str = str_replace('"', '&quot;', $str);
    $str = str_replace("<", "&lt;", $str);
    $str = str_replace(">", "&gt;", $str);
    
    return $str;
}

function sanitizeStrTrim($str)
{
    
    return sanitizeStr(trim($str));
}

function ensureFtpConnActive()
{
    global $conn_id;
    
    if (@ftp_pwd($conn_id) === false) {
        @ftp_close($conn_id);
        connectFTP(0);
    }
}


function fetchFile()
{
    
    global $conn_id;
    global $lang_server_error_up;
    global $lang_title_fetch_file;
    global $lang_fetch_no_file;
    global $lang_fetch_not_found;
    global $lang_btn_fetch;
 
    $height = 40;
    $width  = 565;
    $title  = $lang_title_fetch_file;
  
    if (!function_exists("file_get_contents")) {
    
        recordFileError("", "", "PHP function <i>file_get_contents</i> not supported on this server.");
    
    } else {

        // Check for processing of form
        if ($_POST["processAction"] == 1) {
    
            $fetch_url = trim($_POST["fetch_url"]);
    
            // Check remote file exists
            $headers = get_headers($fetch_url);
    
            if (!preg_match("/\./", basename($fetch_url))) {
            
                recordFileError("", "", $lang_fetch_no_file);
                
            } else {
    
                if (!preg_match("/200 OK/", $headers[0])) {
        
                    recordFileError("", "", $lang_fetch_not_found);
    
                } else {
                
                    // Set file paths
                    $file_name = basename($fetch_url);
                    
                    $fp1 = createTempFileName($file_name);
                    
                    if ($_SESSION["dir_current"] == "/")
                        $fp2 = "/" . $file_name;
                    else
                        $fp2 = $_SESSION["dir_current"] . "/" . $file_name;
                    
                    // Fetch the file
                    $inputHandler = fopen($fetch_url, "r");
                    $fileHandler = fopen($fp1, "w+");

                    while (FALSE !== ($buffer = fgets($inputHandler, 65536))) {
                        fwrite($fileHandler, $buffer);
                    }
        
                    fclose($inputHandler);
                    fclose($fileHandler);
        
                    ensureFtpConnActive();

                    if (!@ftp_put($conn_id, $fp2, $fp1, FTP_BINARY)) {
                           if (checkFirstCharTilde($fp2) == 1) {
                            if (!@ftp_put($conn_id, replaceTilde($fp2), $fp1, FTP_BINARY)) {
                                recordFileError("file", $file_name, $lang_server_error_up);
                            }
                        } else {
                            recordFileError("file", $file_name, $lang_server_error_up);
                        }
                    }
                    
                    // Delete tmp file
                    unlink($fp1);
                }
            }
        
        } else {

            $vars       = "&ftpAction=fetchFile&processAction=1";
            $onKeyPress = "onkeypress=\"if (event.keyCode == 13){ processForm('" . $vars . "'); return false; }\"";
        
            displayPopupOpen(1, $width, $height, 0, $title);

            echo "<div class=\"floatLeft10\">";
            echo "<input type=\"text\" name=\"fetch_url\" class=\"inputFetch\" value=\"" . quotesReplace($folder, "d") . "\" " . $onKeyPress . " placeholder=\"http://...\"> ";
            echo "</div>";
            echo "<div id=\"ajaxWaiting\" class=\"floatLeft10\">";
            echo "<input type=\"button\" class=\"popUpBtnNoMargin\" value=\"" . $lang_btn_fetch . "\" onClick=\"processForm('" . $vars . "');\" class=\"";
            echo adjustButtonWidth($lang_btn_fetch);
            echo "\"> ";
            echo "</div>";

            displayPopupClose(0, "", 1);
        }
    }
}

function createTempFileName($file_name)
{
    global $serverTmp;
    
    //return $serverTmp . "/" . $file_name . "." . uniqid("mftp.", true);
    
    // Attempt to get a $serverTmp var if not set by user
    if ($serverTmp == "")
        $serverTmp = ini_get('upload_tmp_dir') ? ini_get('upload_tmp_dir') : sys_get_temp_dir();
    
    return tempnam($serverTmp, $file_name);
}

function checkFileInclude($file_check,$dir)
{
    $file_found = 0;

    if (is_dir($dir)) {
        
        if ($dh = opendir($dir)) {
            
            while (($file = readdir($dh)) !== false && $file_found == 0) {
                
                if ($file != "." && $file != "..") {
                
                    if ($file == $file_check)
                        $file_found = 1;
                }
            }
            closedir($dh);
        }
    }
    
    return $file_found;        
}

function getRandId($len)
{
    mt_srand((double)microtime()*1000000);
   
    while(strlen($id)<$len){
        switch(mt_rand(1,3)){
            case 1: $id.=chr(mt_rand(48,57)); break;  // 0-9
            case 2: $id.=chr(mt_rand(65,90)); break;  // A-Z
            case 3: $id.=chr(mt_rand(97,122)); break; // a-z
        }
    }
   
    return $id;
}

function DB_mysql($user)
{

    /*
    CREATE TABLE user_workarea (
        `id` int NOT NULL AUTO_INCREMENT,
        `user` varchar(100) NOT NULL,
        `nombre_revision` id INT(6) NOT NULL,
        `courante` id INT(6) NOT NULL,
        `identifiant` varchar(100) NOT NULL,
        PRIMARY KEY (id)
      ) 
    */
    $dbHost = "analogdepat.mysql.db";   
    $dbUsername = "analogdepat"; 	   
    $dbPassword = "Un92pac007";	    
    $dbName = "analogdepat";

    $mysqli = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName);
    if($mysqli->connect_errno ) 
    {
        printf("Connect failed: %s", $mysqli->connect_error);
        exit();
    }

    $query = "SELECT * FROM table_user_workarea WHERE user = '$user'";

    $result = $mysqli->query($query);

    if ($result->num_rows > 0) 
    {
        $row = mysqli_fetch_row($result);
        $path_user_workarea = $row[4]; 
        //echo "Le champ 'nom' avec la valeur 'patrice' existe dans la table.";
    } 
     
    if($mysqli->error)
    {
        printf("Failed..!" , $mysqli->error);
    }
   
    $mysqli->close();

    return $path_user_workarea;

}

?>