<?php
// Inclusion fichier config Wordpress
require_once ('../../../../../wp-config.php');

$WebEx = new webexplorer();

// Si il y a au moins un paramètre dans l'url
if(isset($_GET)){
    // Si il y a une action dans l'url
    if(isset($_GET['action']) && !empty($_GET['action'])){
        $_SESSION['upload'] = array();
        $action = $_GET['action'];
        $arrayFile = array();
        switch($action){
            // Si l'action a effectuer est de charger un fichier
            case 'uploadFile':
                // Si il y a un fichier ou dossier en paramètre
                if((isset($_GET['fichier']) && !empty($_GET['fichier'])) || isset($_GET['refreshCSS'])) {

                    // Si le fichier ou dossier existe
                    if(file_exists($_GET['fichier']) || $_GET['refreshCSS'] == true) {

                        if(isset($_GET['fichier'])) {
                            if (!is_dir($_GET['fichier'])) {
                                $arrayFile[] = $_GET['fichier'];
                            } else {
                                $arrayFile[] = scan($_GET['fichier']);
                            }
                        }

                        // Récupération de tous les sites
                        //$WebEx = new WebexplorerAtelier111_Plugin();
                        //$allSites = $WebEx->getAllSitesActifs();

                        $sites = $WebEx->getSite($_GET['site']);

                        foreach ($sites as $site){

                            $ftp = ftp_connect($site->ftp, $site->ftp_port);
                            // Si la connexion a pu être établie avec le serveur FTP
                            if (ftp_login($ftp, $site->ftp_login, $site->ftp_pwd)) {

                                // Si le mode passif est accepté
                                if (ftp_pasv($ftp, true)) {
                                    $_SESSION['upload']['message'][] = 'Connexion établie pour '.$site->nom;
                                    $_SESSION['upload']['message'][] = 'Début d\'envoi de fichier pour  '.$site->nom;
                                    // Envoi des fichiers
                                    if(!empty($arrayFile)) {
                                        $returnSend = sendFile($ftp, $arrayFile, $site);
                                    }

                                    // Rafraichissement du cache
                                    if(isset($_GET['refreshCSS'])) {
                                        $url = $site->url;
                                        if (substr($url, -1) != '/') {
                                            $url .= '/';
                                        }
                                        $reponse = wp_remote_get($url . 'wp-json/wp/v2/webexplorer?valid=adminA111');
                                        $reponse = json_decode($reponse['body']);
                                        if ($reponse->answer == false) {
                                            $_SESSION['upload']['success'] = false;
                                            $_SESSION['upload']['message'][] = $reponse->reason;
                                        } else {
                                            $_SESSION['upload']['success'] = true;
                                            $_SESSION['upload']['message'][] = $reponse->reason;
                                        }
                                    }
                                    //$return = array_merge($return, $returnSend);

                                    if (ftp_close($ftp)) {
                                        //$_SESSION['upload']['success'] = true;
                                        $_SESSION['upload']['message'][] = 'Fermeture de la connexion FTP';
                                    }
                                } else {
                                    $_SESSION['upload']['success'] = false;
                                    $_SESSION['upload']['message'][] = 'Impossible de passer en mode passif';
                                }
                            } else {
                                $_SESSION['upload']['success'] = false;
                                $_SESSION['upload']['message'][] = 'Connexion au FTP impossible';
                            }
                        }
                    }else{
                        $_SESSION['upload']['success'] = false;
                        $_SESSION['upload']['message'][] = 'Aucun répertoire ou fichier sur le serveur de référence';
                    }
                }else{
                    $_SESSION['upload']['success'] = false;
                    $_SESSION['upload']['message'][] = 'Aucun fichier en paramètre';
                }

                echo json_encode($_SESSION['upload']);

                break;
            default :
                return false;
                break;
        }
    }
}else{
    return false;
}



function scan($dir){
    $files = array();
    // Is there actually such a folder/file?
    if(file_exists($dir)){
        foreach(scandir($dir) as $f) {
            if(!$f || $f[0] == '.') {
                continue; // Ignore hidden files
            }

            if(is_dir($dir . '/' . $f)) {
                // The path is a folder
                $files[] = scan($dir . '/' . $f); // Recursively get the contents of the folder;
            }
            else {
                // It is a file
                $files[] = $dir . '/' . $f;
            }
        }
    }else{
        $files = false;
    }

    return $files;
}

function getPathFileName($pathFile){
    $tabPath = explode('/',$pathFile);
    $offset = array_search('wp-content', $tabPath);
    $path = implode('/',array_slice($tabPath, $offset));
    return $path;
}

function getFileName($pathFile){
    $tabPath = explode('/',$pathFile);

    return end($tabPath);
}


/**
 * Fonction d'envoi de fichier via protocole FTP
 * @param $ftp la connexion FTP
 * @param $files le tableau de fichier
 * @param $site les informations du site sous forme d'objet
 * @return Un tableau de réponse
 */
function sendFile($ftp, $files, $site){
    $return = array();

    $WebEx = new webexplorer();

    $listeFichiersInterdits = $WebEx->getFichiersInterdits();

    foreach($files as $file){
        if(!is_array($file)){
            if((is_array($listeFichiersInterdits) && !in_array(getFileName($file), $listeFichiersInterdits)) || $listeFichiersInterdits == false) {
                $fileName = getPathFileName($file);
                $pathFile = $site->root . $fileName;
                $tabPathFile = explode('/', $pathFile);
                array_pop($tabPathFile);
                $firstFolder = true;
                $pathToFollow = '.';
                // On parcourt les dossiers à travers le FTP de destinaion
                foreach ($tabPathFile as $ftpFile) {

                    $rootFile = ftp_nlist($ftp, $pathToFollow);
                    // Si le dossier n'existe pas sur le

                    if (!in_array($ftpFile, $rootFile)) {

                        ftp_mkdir($ftp, $pathToFollow . '/' . $ftpFile);
                    }

                    $pathToFollow .= '/' . $ftpFile;;
                }
                if (ftp_put($ftp, $site->root . $fileName, $file, FTP_BINARY)) {
                    $_SESSION['upload']['success'] = true;
                    $_SESSION['upload']['message'][] = 'Envoi du fichier ' . $fileName . ' terminé';

                } else {
                    $_SESSION['upload']['success'] = false;
                    $_SESSION['upload']['message'][] = 'Erreur de chargement du fichier ' . $fileName;
                }
            }else{
                $_SESSION['upload']['success'] = true;
                $_SESSION['upload']['message'][] = 'Tentative d\'envoi de fichier interdit. Fichier ' . getFileName($file). ' non envoyé';
            }
        }else{
            sendFile($ftp, $file, $site);
        }
    }

    return $_SESSION['upload'];

}
