All pastes #552621 Raw Edit

Oda Hveem

public text v1 · immutable
·published 2007-06-09 11:49 UTC
rendered paste body

<?
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");
?>