<?php function dir_is_empty($dirname) { // Check if directory is empty but ignore install script if (!is_dir($dirname)) return false; foreach (scandir($dirname) as $file) { if (!in_array($file, array('.','..','oci-framagrav.php'))) return false; } return true; } // If install directory is not empty stop processing $dest = dirname(__FILE__).'/'; if (dir_is_empty($dest) === false) { echo nl2br("Le dossier httpdocs/ doit être vide pour y migrer votre Framasite.\r\n"); exit(); } // We have a ZIP file ! if($_FILES["zip_file"]["name"]) { $filename = $_FILES["zip_file"]["name"]; $source = $_FILES["zip_file"]["tmp_name"]; $type = $_FILES["zip_file"]["type"]; $name = explode(".", $filename); $accepted_types = array('application/zip', 'application/x-zip-compressed', 'multipart/x-zip', 'application/x-compressed'); foreach($accepted_types as $mime_type) { if($mime_type == $type) { $okay = true; break; } } $continue = strtolower($name[1]) == 'zip' ? true : false; if(!$continue) { $message = "Votre fichier n'est pas une archive ZIP."; } /* PHP current path */ $filenoext = basename ($filename, '.zip'); // absolute path (lowercase) $filenoext = basename ($filenoext, '.ZIP'); // absolute path (uppercase) $targetdir = $path . $filenoext; // target directory $targetzip = $path . $filename; // target zip file /* here it is really happening */ if(move_uploaded_file($source, $targetzip)) { $zip = new ZipArchive(); $x = $zip->open($targetzip); // open the zip file to extract if ($x === true) { $zip->extractTo('.'); // place in the directory with same name $zip->close(); unlink($targetzip); } } else { echo nl2br("Une erreur vient de se produire lors du téléversement de votre fichier.\r\n"); exit(); } // Download latest CMS zip with cURL $ch = curl_init(); $source = "https://ouvaton.coop/oci/framagrav-themes.zip"; curl_setopt($ch, CURLOPT_URL, $source); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $data = curl_exec($ch); // If any cURL error stop processing if(curl_errno($ch)) { echo nl2br("Une erreur vient de se produire. Rechargez la page pour essayer à nouveau, ou contactez l'assistance si le problème persiste.\r\n"); echo 'Erreur cURL : '.curl_error($ch); curl_close($ch); exit; } // Check HTTP code switch ($http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE)) { case 200: // Create CMS zip $destination = "themes.zip"; $file = fopen($destination, "w+"); fputs($file, $data); fclose($file); curl_close($ch); // Unzip archive file $file = 'themes.zip'; $zip = new ZipArchive; if ($zip->open($file) === TRUE) { $zip->extractTo('.'); $zip->close(); } else {echo nl2br("Une erreur lors de la décompression de l'archive vient de se produire, contactez l'assistance !\r\n");} // Zip archive is not needed anymore unlink('themes.zip'); // Redirecting user to CMS install page $host = $_SERVER['HTTP_HOST']; $uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); header("Location: http://$host$uri/"); // Remove script unlink(__FILE__); exit; default: // If any HTTP error stop processing echo nl2br("Une erreur vient de se produire. Rechargez la page pour essayer à nouveau, ou contactez l'assistance si le problème persiste.\r\n"); echo nl2br("Code HTTP : ".$http_code."\r\n"); curl_close($ch); exit; } } ?> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Migration de votre Framasite chez Ouvaton</title> </head> <body> <?php if($message) echo "<p>$message</p>"; ?> <form enctype="multipart/form-data" method="post" action=""> <label>Sélectionnez l'archive ZIP de votre site : <input type="file" name="zip_file" /></label> <br /> <input type="submit" name="submit" value="Envoyer" /> </form> </body> </html>