ajouts et modifications
possibilité de télécharger une version zippée d'une page
This commit is contained in:
parent
c3cbc0dbab
commit
ef47f39227
4 changed files with 123 additions and 24 deletions
Binary file not shown.
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.8 KiB |
|
@ -37,12 +37,13 @@ aside li{margin:5px;list-style:none;vertical-align:middle;border-radius:3px;}
|
|||
aside .public li{background:rgba(100,255,100,0.2);}
|
||||
aside .private li{background:rgba(255,100,100,0.2);}
|
||||
aside .public {background:rgba(100,255,100,0.2);}
|
||||
aside .private {background:rgba(255,100,100,0.2);}
|
||||
aside .private {background:rgba(255,100,100,0.2);}
|
||||
aside li em {font-size:10px ; color:#484;}
|
||||
aside li img {vertical-align:bottom;margin:1px;width:16px;height:16px;}
|
||||
aside li a.suppr, aside li a.origine{opacity:0.5;width:16px;height:16px;display:inline-block;background:url(actions.png) no-repeat 0 -159px ;}
|
||||
aside li a.suppr, aside li a.origine, aside li a.zip{opacity:0.5;width:16px;height:16px;display:inline-block;background:url(actions.png) no-repeat 0 -159px ;}
|
||||
aside li a.origine{background-position: 0 -396px ;}
|
||||
aside li a.suppr:hover,aside li a.origine:hover{opacity:1;}
|
||||
aside li a.zip{background-position: 0 2px ;}
|
||||
aside li a.suppr:hover,aside li a.origine:hover,aside li a.zip:hover{opacity:1;}
|
||||
aside li a.toprivate,aside li a.topublic{float:right;margin-right:5px;opacity:0.5;}
|
||||
aside li a.toprivate:hover,aside li a.topublic:hover{opacity:1;}
|
||||
|
||||
|
|
56
index.php
56
index.php
|
@ -36,6 +36,7 @@ $bookmarklet='<a title="Drag this link to your shortcut bar" href=\'javascript:j
|
|||
$column_width='width:47%';
|
||||
if ($public){$bookmarklet='';$column_width='width:97%';}
|
||||
if (!creer_dossier($GLOBALS['data_folder'], TRUE)) { die('Cant create '.$GLOBALS['data_folder'].' folder.'); }
|
||||
if (!creer_dossier($GLOBALS['data_folder'].'/zipversions', TRUE)) { die('Cant create '.$GLOBALS['data_folder'].'/zipversions'.' folder.'); }
|
||||
if (!creer_dossier($GLOBALS['private_data_folder'], TRUE)) { die('Cant create '.$GLOBALS['private_data_folder'].' folder.'); }
|
||||
if (!creer_dossier($GLOBALS['public_data_folder'], TRUE)) { die('Cant create '.$GLOBALS['public_data_folder'].' folder.'); }
|
||||
|
||||
|
@ -55,6 +56,7 @@ if (!creer_dossier($GLOBALS['public_data_folder'], TRUE)) { die('Cant create '.$
|
|||
// init
|
||||
// url not yet retrieved
|
||||
$GLOBALS['done']['d'] = FALSE;
|
||||
|
||||
if (!$public){
|
||||
// Get URL to save.
|
||||
if (!empty($_GET['q'])) {
|
||||
|
@ -139,7 +141,6 @@ if (!$public){
|
|||
$file = $liste_css[$i];
|
||||
if ($data = get_external_file($file['url_fichier'], 3) and ($data !== FALSE) ) {
|
||||
if (preg_match('#(css|php|txt|html|xml|js)#', $file['url_fichier']) ) {
|
||||
|
||||
$matches_url = array();
|
||||
preg_match_all('#url\s*\(("|\')?([^\'")]*)(\'|")?\)#i', $data, $matches_url, PREG_SET_ORDER);
|
||||
$matches_url2 = array();
|
||||
|
@ -209,17 +210,12 @@ if (!$public){
|
|||
$n++;
|
||||
$count = count($liste_css);
|
||||
}
|
||||
|
||||
|
||||
// enregistre un fichier d’informations concernant la page (date, url, titre)
|
||||
$info = '';
|
||||
$info .= 'URL="'.$GLOBALS['url'].'"'."\n";
|
||||
$info .= 'TITLE="'.$title.'"'."\n";
|
||||
$info .= 'DATE="'.time().'"'."\n";
|
||||
|
||||
file_put_contents($GLOBALS['target_folder'].'/'.'index.ini', $info);
|
||||
|
||||
//
|
||||
$GLOBALS['done']['d'] = 'ajout';
|
||||
$GLOBALS['done']['lien'] = $GLOBALS['target_folder'].'/';
|
||||
}
|
||||
|
@ -230,17 +226,6 @@ if (!$public){
|
|||
// in case of delete an entry
|
||||
if (isset($_GET['suppr']) and $torem = $_GET['suppr'] and $torem != '') {
|
||||
$torem = htmlspecialchars($_GET['suppr']);
|
||||
/*
|
||||
$liste = scandir($GLOBALS['data_folder']); // listage des dossiers de data.
|
||||
$nb_fichier = count($liste);
|
||||
for ($i = 0 ; $i < $nb_fichier ; $i++) {
|
||||
if ($liste[$i] == $torem and !($liste[$i] == '..' or $liste[$i] == '.')) {*/
|
||||
|
||||
// the folder exists and can be removed:
|
||||
|
||||
|
||||
// included files first (noway doing it like "rmdir -R" :/)
|
||||
|
||||
if (is_dir($_GET['suppr'])){
|
||||
$sousliste = scandir($_GET['suppr']); // listage des dossiers de data.
|
||||
$nb_sousfichier = count($sousliste);
|
||||
|
@ -275,7 +260,36 @@ if (!$public){
|
|||
header("location: index.php");
|
||||
}
|
||||
}
|
||||
} // end of private admin acces
|
||||
|
||||
if (isset($_GET['zipprivate'])) {
|
||||
|
||||
$zip_filename=$GLOBALS['data_folder'].'/zipversions/'.$_GET['zipprivate'].'.zip';
|
||||
|
||||
if (is_file($zip_filename)){header("location: $zip_filename");exit();}
|
||||
if (is_dir($GLOBALS['private_data_folder'].'/'.$_GET['zipprivate'])){
|
||||
include 'zip.php';
|
||||
zip($_GET['zipprivate'].'.zip',$GLOBALS['private_data_folder'].'/'.$_GET['zipprivate'],$GLOBALS['data_folder'].'/zipversions/');
|
||||
header("location: $zip_filename");
|
||||
}
|
||||
}
|
||||
}
|
||||
// public get
|
||||
//download public zip version
|
||||
if (isset($_GET['zippublic'])) {
|
||||
|
||||
$zip_filename=$GLOBALS['data_folder'].'/zipversions/'.$_GET['zippublic'].'.zip';
|
||||
if (is_file($zip_filename)){header("location: $zip_filename");exit();}
|
||||
if (is_dir($GLOBALS['public_data_folder'].'/'.$_GET['zippublic'])){
|
||||
include 'zip.php';
|
||||
|
||||
rename ($GLOBALS['public_data_folder'].'/'.$_GET['zippublic'],$_GET['zippublic']); // on le déplace pour éviter de voir la structure de dossiers apparaître dans le zip
|
||||
zip($_GET['zippublic'].'.zip',$_GET['zippublic'],$GLOBALS['data_folder'].'/zipversions/');
|
||||
rename ($_GET['zippublic'],$GLOBALS['public_data_folder'].'/'.$_GET['zippublic']); // on le remet à sa place
|
||||
header("location: $zip_filename");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function url_parts() {
|
||||
$url_p['s'] = parse_url($GLOBALS['url'], PHP_URL_SCHEME); $url_p['s'] = (is_null($url_p['s'])) ? '' : $url_p['s'];
|
||||
|
@ -398,7 +412,6 @@ function absolutes_links(&$data) {
|
|||
foreach($matches as $i => $link) {
|
||||
$link[1] = trim($link[1]);
|
||||
if (!preg_match('#^(([a-z]+://)|(\#))#', $link[1]) ) {
|
||||
|
||||
// absolute path w/o HTTP : add http.
|
||||
if (preg_match('#^//#', $link[1])) {
|
||||
$matches[$i][1] = $url_p['s'].':'.$link[1];
|
||||
|
@ -559,7 +572,8 @@ if ($GLOBALS['done']['d'] !== FALSE) {
|
|||
} else {
|
||||
$titre = 'titre'; $url = '#'; $date = 'date inconnue';
|
||||
}
|
||||
echo "\t".'<li><a class="suppr" onclick="return window.confirm(\'Sure to remove?\')" href="?suppr='.$GLOBALS['public_data_folder'].'/'.$liste_pages[$i].'" title="suppr"> </a><a class="origine" href="'.$url.'" title="origin"> </a> - <a href="'.$GLOBALS['public_data_folder'].'/'.$liste_pages[$i].'"><img src="'.$favicon.'"/>'.$titre.'</a> <em> ['.$date.']</em><a href="?toprivate='.$liste_pages[$i].'" class="toprivate" title="Change to private">▶</a></li>'."\n";
|
||||
echo "\t".'<li><a class="suppr" onclick="return window.confirm(\'Sure to remove?\')" href="?suppr='.$GLOBALS['public_data_folder'].'/'.$liste_pages[$i].'" title="suppr"> </a><a class="zip" href="?zippublic='.$liste_pages[$i].'" title="Download zip version"> </a><a class="origine" href="'.$url.'" title="origin"> </a> - <a href="'.$GLOBALS['public_data_folder'].'/'.$liste_pages[$i].'"><img src="'.$favicon.'"/>'.$titre.'</a> <em> ['.$date.']</em>';
|
||||
if (!$public){echo '<a href="?toprivate='.$liste_pages[$i].'" class="toprivate" title="Change to private">▶</a></li>'."\n";}else{echo "</li>\n";}
|
||||
}
|
||||
}
|
||||
echo '</ul>'."\n";
|
||||
|
@ -590,7 +604,7 @@ if ($GLOBALS['done']['d'] !== FALSE) {
|
|||
} else {
|
||||
$titre = 'titre'; $url = '#'; $date = 'date inconnue';
|
||||
}
|
||||
echo "\t".'<li><a class="suppr" onclick="return window.confirm(\'Sure to remove?\')" href="?suppr='.$GLOBALS['private_data_folder'].'/'.$liste_pages[$i].'" title="suppr"> </a><a class="origine" href="'.$url.'" title="origin"> </a> - <a href="'.$GLOBALS['private_data_folder'].'/'.$liste_pages[$i].'"><img src="'.$favicon.'"/>'.$titre.'</a> <em> ['.$date.']</em><a href="?topublic='.$liste_pages[$i].'" class="topublic" title="Change to public">◀</a></li>'."\n";
|
||||
echo "\t".'<li><a class="suppr" onclick="return window.confirm(\'Sure to remove?\')" href="?suppr='.$GLOBALS['private_data_folder'].'/'.$liste_pages[$i].'" title="suppr"> </a><a class="zip" href="?zipprivate='.$liste_pages[$i].'" title="Download zip version"> </a><a class="origine" href="'.$url.'" title="origin"> </a> - <a href="'.$GLOBALS['private_data_folder'].'/'.$liste_pages[$i].'"><img src="'.$favicon.'"/>'.$titre.'</a> <em> ['.$date.']</em><a href="?topublic='.$liste_pages[$i].'" class="topublic" title="Change to public">◀</a></li>'."\n";
|
||||
}
|
||||
}
|
||||
echo '</ul>'."\n";
|
||||
|
|
84
zip.php
Normal file
84
zip.php
Normal file
|
@ -0,0 +1,84 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
Description :
|
||||
Fonction récursive zippant le contenu du répertoire passé en paramètre, incluant tous les sous dossiers et tous les fichiers
|
||||
|
||||
Note :
|
||||
Le script doit avoir les autorisations adéquates pour le dossier de destination !
|
||||
|
||||
Prototype :
|
||||
bool zip( string $nom_archive , string $adr_dossier [, string $dossier_destination] )
|
||||
/!\ Les paramètres $zip et $dossier_base ne doivent pas être modifiés /!\
|
||||
|
||||
Paramètres :
|
||||
string $nom_archive : le nom de l'archive qui sera créée se terminant par '.zip' (ex. 'archive.zip', 'test.zip', etc.)
|
||||
string $adr_dossier : le dossier à archiver (ex. 'images', '../dossier1/dossier2', etc.)
|
||||
string $dossier_destination : le dossier dans lequel placer l'archive une fois celle-ci créée (ex. 'images/zip', '../archives', etc.)
|
||||
|
||||
Retourne :
|
||||
True si ça a marché, false le cas échéant
|
||||
*/
|
||||
function zip($nom_archive, $adr_dossier, $dossier_destination = '', $zip=null, $dossier_base = '') {
|
||||
if($zip===null) {
|
||||
// Si l'archive n'existe toujours pas (1er passage dans la fonction, on la crée)
|
||||
$zip = new ZipArchive();
|
||||
if($zip->open($nom_archive, ZipArchive::CREATE) !== TRUE) {
|
||||
// La création de l'archive a échouée
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if(substr($adr_dossier, -1)!='/') {
|
||||
// Si l'adresse du dossier ne se termine pas par '/', on le rajoute
|
||||
$adr_dossier .= '/';
|
||||
}
|
||||
|
||||
if($dossier_base=="") {
|
||||
// Si $dossier_base est vide ça veut dire que l'on rentre
|
||||
// dans la fonction pour la première fois. Donc on retient
|
||||
// le tout premier dossier (le dossier racine) dans $dossier_base
|
||||
$dossier_base=$adr_dossier;
|
||||
}
|
||||
|
||||
if(file_exists($adr_dossier)) {
|
||||
if(@$dossier = opendir($adr_dossier)) {
|
||||
while(false !== ($fichier = readdir($dossier))) {
|
||||
if($fichier != '.' && $fichier != '..') {
|
||||
if(is_dir($adr_dossier.$fichier)) {
|
||||
$zip->addEmptyDir($adr_dossier.$fichier);
|
||||
zip($nom_archive, $adr_dossier.$fichier, $dossier_destination, $zip, $dossier_base);
|
||||
}
|
||||
else {
|
||||
$zip->addFile($adr_dossier.$fichier);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if($dossier_base==$adr_dossier) {
|
||||
// On ferme la zip
|
||||
$zip->close();
|
||||
|
||||
if($dossier_destination!='') {
|
||||
if(substr($dossier_destination, -1)!='/') {
|
||||
// Si l'adresse du dossier ne se termine pas par '/', on le rajoute
|
||||
$dossier_destination .= '/';
|
||||
}
|
||||
|
||||
// On déplace l'archive dans le dossier voulu
|
||||
if(rename($nom_archive, $dossier_destination.$nom_archive)) {
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
Reference in a new issue