<?
include("header.php");
echo "</div></div>";
$image_regex = '/\.(jpg|jpeg)$/i'; // Regulært uttrykk for å matche jpg-bilder
$index_regex = '/^index\.html$/i'; // Regulært uttrykk for å matche index-filen
$oppdrag_dir = 'oppdrag/';
// maks bredde og høyde på thumbnails
$max_w = 60;
$max_h = 63;
// vis galleri i mappen $directory
function show_gallery ($directory) {
show_index ($directory);
echo "<div id=bildegalleri>";
//echo "<div id=mainimage>";
show_first ($directory, $_GET["file"]);
//echo "</div>";
echo "<div id=\"thumbs\">";
show_thumbnails ($directory);
echo "</div>";
echo "</div>";
}
function check_path ($path) {
if ((strpos ($path, "../") === false) &&
(strpos ($path, "/") !== 0))
return true;
return false;
}
function show_index ($directory) {
global $index_regex;
global $oppdrag_dir;
$side = $_GET['s'];
// Inkluder $side hvis den finnes, ellers let etter index.html i
// gallerikatalogen
if ($side && check_path($side) && !strpos($side, "/")) {
include ($oppdrag_dir . $side);
return;
}
// Sjekk om katalogen finnes og at den er en katalog
if (is_dir($directory)) {
// Åpne katalogen
if ($dh = opendir($directory)) {
// Les filer helt til vi finner en bildefil
while (($file = readdir($dh)) !== false) {
if (preg_match ($index_regex, $file)) {
echo "<div id=\"tekst\">";
include ($directory ."/". $file);
echo "</div>";
}
}
}
}
}
// vis "hovedbildet" (det første i fillistingen) i mappen $directory
// (eller søk etter og bruk $filename hvis den er satt)
function show_first ($directory, $filename="") {
global $image_regex;
// Sjekk om katalogen finnes og at den er en katalog
if (is_dir($directory)) {
// Åpne katalogen
if ($dh = opendir($directory)) {
// Les filer helt til vi finner en bildefil
while (($file = readdir($dh)) !== false) {
if (preg_match ($image_regex, $file)) {
if (!$filename || $filename == $file) {
echo "<img class=\"bilde_ramme\" src=\"$directory/$file\" alt=\"$directory\"/>";
return;
}
}
}
}
}
}
// vis thumbnails i en mappe (lag dem hvis de ikke finnes)
function show_thumbnails ($directory) {
global $image_regex, $thumb_script, $index_regex;
$start = (int)$_GET['start'];
$max = $start + 18; // forandre antall bilder per side her
$nesteforrige = "";
// Les mappe
if (is_dir($directory)) {
if ($dh = opendir($directory)) {
if (!is_dir ($directory ."/thumbs"))
mkdir ($directory ."/thumbs");
$first_image = true;
$counter = 0;
while (($file = readdir($dh)) !== false) {
if (preg_match ($image_regex, $file)) {
$counter++;
if ($counter <= $start)
continue;
if ($counter > $max) {
$new_uri = $SCRIPT_NAME . "?";
$new_uri .= 'dir=' . $_GET['dir'];
if ($_GET['file']) $new_uri .= '&file=' . $_GET['file'];
if ($_GET['s']) $new_uri .= '&s=' . $_GET['s'];
$new_uri .= '&start=' . ($start + 18);
$nesteforrige .= '<a href="'.$new_uri.'" class="p">Neste</a>';
break;
}
// Sjekk om thumbnail eksisterer
if (!file_exists ($directory."/thumbs/".$file))
gen_thumb ("$directory/$file", $directory."/thumbs/".$file);
echo "<span>";
echo "<a href=\"galleri.php?dir=$directory&s=".$_GET['s']."&file=$file\">\n\t";
echo "<img class=\"thumb_ramme\" onmouseover=\"this.className='thumb_ramme_orange'\"".
"onmouseout=\"this.className='thumb_ramme'\"".
"src=\"".$directory."/thumbs/".$file."\" alt=\"$file\"/>\n";
echo "</a></span>\n\n";
if(($counter % 3) == 0) {
echo "<br />";
}
}
}
if ($start > 0) {
$new_uri = $SCRIPT_NAME . "?";
$new_uri .= 'dir=' . $_GET['dir'];
if ($_GET['file']) $new_uri .= '&file=' . $_GET['file'];
if ($_GET['s']) $new_uri .= '&s=' . $_GET['s'];
$new_uri .= '&start=' . ($start - 18);
$nesteforrige = '<a href="'.$new_uri.'">Forrige</a> ' . $nesteforrige;
}
echo "<p>$nesteforrige</p>";
closedir($dh);
}
}
}
// Genererer thumbnail av $from_file og lagrer den i $to_file. Antar
// at alle bildene er jpg-bilder
function gen_thumb ($from_file, $to_file) {
global $max_w, $max_h;
$image = imagecreatefromJPEG ($from_file);
$w = imageSX ($image);
$h = imageSY ($image);
// Den minste av disse er aspektet man skal bruke
$aspect_x = $max_w / $w;
$aspect_y = $max_h / $h;
$aspect = ($aspect_x < $aspect_y) ? $aspect_x : $aspect_y;
// Lage kvadratiske thumbnails => driter i høyde/bredde-ting :)
$new_w = 60; // $aspect * $w;
$new_h = 60; // $aspect * $h;
$offset_top = 0;
$offset_left = 0;
// Finn offset for å sentrere bildene :)
if ($h > $w) {
$offset_top = ($h-$w)/2;
$h = $w;
}
else {
$offset_left = ($w-$h)/2;
$w = $h;
}
$to_image = ImageCreateTrueColor($new_w, $new_h);
imagecopyresampled (
$to_image,
$image,
0, 0,
$offset_left,
$offset_top,
$new_w,
$new_h,
$w, $h );
imagejpeg ($to_image, $to_file);
imagedestroy ($image);
imagedestroy ($to_image);
}
//
// Dette kan fjernes eller puttes i en annen fil
//
$directory = $_GET['dir'];
$filename = $_GET['file'];
// VIKTIG!
// ~~~~~~~
// Denne testen er viktig å ha med, ellers kan folk begynne å snoke
// rundt i mapper de ikke skal snoke rundt i.
if (!check_path ($directory) || !check_path($filename))
{
echo "<p class=\"warning\">Error: ugyldig gallerinavn eller filnavn</p>";
}
else
{
show_gallery ($directory);
}
include("footer.php");
?>