$length) { return substr($name,0,$length) . "..."; } else return $name; } function getfirstImage($dirname) { $imageName = false; $ext = array("jpg", "png", "jpeg", "gif", "JPG", "PNG", "GIF", "JPEG"); if($handle = opendir($dirname)) { while(false !== ($file = readdir($handle))) { $lastdot = strrpos($file, '.'); $extension = substr($file, $lastdot + 1); if ($file[0] != '.' && in_array($extension, $ext)) break; } $imageName = $file; closedir($handle); } return($imageName); } function readEXIF($file) { $exif_data = ""; $exif_idf0 = exif_read_data ($file,'IFD0' ,0 ); $emodel = $exif_idf0['Model']; $efocal = $exif_idf0['FocalLength']; //Next is only cosmectic need but give an error due to division by zero //list($x,$y) = preg_split('/', $efocal); //$efocal = round($x/$y,0); $exif_exif = exif_read_data ($file,'EXIF' ,0 ); $eexposuretime = $exif_exif['ExposureTime']; $efnumber = $exif_exif['FNumber']; //Next is only cosmectic need but give an error due to division by zero //list($x,$y) = preg_split('/', $efnumber); //$efnumber = round($x/$y,0); $eiso = $exif_exif['ISOSpeedRatings']; $exif_date = exif_read_data ($file,'IFD0' ,0 ); $edate = $exif_date['DateTime']; if (strlen($emodel) > 0 OR strlen($efocal) > 0 OR strlen($eexposuretime) > 0 OR strlen($efnumber) > 0 OR strlen($eiso) > 0) $exif_data .= "::"; if (strlen($emodel) > 0) $exif_data .= "$emodel"; if ($efocal > 0) $exif_data .= " | $efocal" . "mm"; if (strlen($eexposuretime) > 0) $exif_data .= " | $eexposuretime" . "s"; if ($efnumber > 0) $exif_data .= " | f$efnumber"; if (strlen($eiso) > 0) $exif_data .= " | ISO $eiso"; return($exif_data); } function checkpermissions($file) { global $messages; if (substr(decoct(fileperms($file)), -1, strlen(fileperms($file))) < 4 OR substr(decoct(fileperms($file)), -3,1) < 4) $messages = "At least one file or folder has wrong permissions. Learn how to set file permissions"; } //----------------------- // CHECK FOR NEW VERSION //----------------------- // New version check disabled because original author does not update it software anymore. /* if (ini_get('allow_url_fopen') == "1") { $file = @fopen ("http://www.minigal.dk/minigalnano_version.php", "r"); $server_version = fgets ($file, 1024); if (strlen($server_version) == 5 ) { //If string retrieved is exactly 5 chars then continue if (version_compare($server_version, $version, '>')) $messages = "MiniGal Nano $server_version is available! Get it now"; } fclose($file); } */ if (!defined("GALLERY_ROOT")) define("GALLERY_ROOT", ""); $requestedDir = ''; if (!empty($_GET['dir'])) $requestedDir = $_GET['dir']; $thumbdir = rtrim('photos/'.$requestedDir,'/'); //$thumbdir = str_replace('/..', '', $thumbdir); // Prevent directory traversal attacks. if(strstr($thumbdir, '..') !== FALSE) { $requestedDir = ''; $thumbdir = rtrim('photos/','/'); } $currentdir = GALLERY_ROOT . $thumbdir; //----------------------- // READ FILES AND FOLDERS //----------------------- $files = array(); $dirs = array(); if (is_directory($currentdir) && $handle = opendir($currentdir)) { while (false !== ($file = readdir($handle))) { // 1. LOAD FOLDERS if (is_directory($currentdir . "/" . $file)) { if ($file != "." && $file != ".." ) { checkpermissions($currentdir . "/" . $file); // Check for correct file permission // Set thumbnail to folder.jpg if found: if (file_exists($currentdir. '/' . $file . '/folder.jpg')) { $dirs[] = array( "name" => $file, "date" => filemtime($currentdir . "/" . $file . "/folder.jpg"), "html" => "
  • " . padstring($file, $label_max_length) . "$label_loading
  • "); } else { // Set thumbnail to first image found (if any): unset ($firstimage); $firstimage = getfirstImage("$currentdir/" . $file); if ($firstimage != "") { $dirs[] = array( "name" => $file, "date" => filemtime($currentdir . "/" . $file), "html" => "
  • " . padstring($file, $label_max_length) . "$label_loading
  • "); } else { // If no folder.jpg or image is found, then display default icon: $dirs[] = array( "name" => $file, "date" => filemtime($currentdir . "/" . $file), "html" => "
  • " . padstring($file, $label_max_length) . "$label_loading
  • "); } } } } // 2. LOAD CAPTIONS $img_captions['']=''; if (file_exists($currentdir ."/captions.txt")) { $file_handle = fopen($currentdir ."/captions.txt", "rb"); while (!feof($file_handle) ) { $line_of_text = fgets($file_handle); if (empty($line_of_text)) { continue; } $parts = explode('/n', $line_of_text); foreach($parts as $img_capts) { list($img_filename, $img_caption) = explode('|', $img_capts); $img_captions[$img_filename] = $img_caption; } } fclose($file_handle); } // 3. LOAD FILES if ($file != "." && $file != ".." && $file != "folder.jpg") { // JPG, GIF and PNG if (preg_match("/.jpg$|.gif$|.png$/i", $file)) { //Read EXIF if (!array_key_exists($file, $img_captions)) { if ($display_exif == 1) { $exifReaden= readEXIF($currentdir . "/" . $file); //Add to the caption all the EXIF information $img_captions[$file] = $file.$exifReaden; } else { //If no EXIF, just use the filename as caption $img_captions[$file] = $file; } } // Read the optionnal image title and caption in html file (image.jpg --> image.jpg.html) // Format: title::caption // Example: My cat::My cat like to roll on the floor. // If file is not provided, image filename will be used instead. checkpermissions($currentdir . "/" . $file); if (is_file($currentdir.'/'.$file.'.html')) { $img_captions[$file] = $file.'::'.htmlspecialchars(file_get_contents($currentdir.'/'.$file.'.html'),ENT_QUOTES); } if ($lazyload) { $files[] = array ( "name" => $file, "date" => filemtime($currentdir . "/" . $file), "size" => filesize($currentdir . "/" . $file), "html" => "
  • $label_loading
  • "); } else { $files[] = array ( "name" => $file, "date" => filemtime($currentdir . "/" . $file), "size" => filesize($currentdir . "/" . $file), "html" => "
  • $label_loading
  • "); } } // Other filetypes $extension = ""; if (preg_match("/.pdf$/i", $file)) $extension = "PDF"; // PDF if (preg_match("/.zip$/i", $file)) $extension = "ZIP"; // ZIP archive if (preg_match("/.rar$|.r[0-9]{2,}/i", $file)) $extension = "RAR"; // RAR Archive if (preg_match("/.tar$/i", $file)) $extension = "TAR"; // TARball archive if (preg_match("/.gz$/i", $file)) $extension = "GZ"; // GZip archive if (preg_match("/.doc$|.docx$/i", $file)) $extension = "DOCX"; // Word if (preg_match("/.ppt$|.pptx$/i", $file)) $extension = "PPTX"; //Powerpoint if (preg_match("/.xls$|.xlsx$/i", $file)) $extension = "XLXS"; // Excel if ($extension != "") { $files[] = array ( "name" => $file, "date" => filemtime($currentdir . "/" . $file), "size" => filesize($currentdir . "/" . $file), "html" => "
  • " . padstring($file, 20) . "$file
  • "); } } } closedir($handle); } else die("ERROR: Could not open ".htmlspecialchars(stripslashes($currentdir))." for reading!"); //----------------------- // SORT FILES AND FOLDERS //----------------------- if (sizeof($dirs) > 0) { foreach ($dirs as $key => $row) { if($row["name"] == "") unset($dirs[$key]); //Delete empty array entries $name[$key] = strtolower($row['name']); $date[$key] = strtolower($row['date']); } if (strtoupper($sortdir_folders) == "DESC") array_multisort($$sorting_folders, SORT_DESC, $name, SORT_DESC, $dirs); else array_multisort($$sorting_folders, SORT_ASC, $name, SORT_ASC, $dirs); } if (sizeof($files) > 0) { foreach ($files as $key => $row) { if($row["name"] == "") unset($files[$key]); //Delete empty array entries $name[$key] = strtolower($row['name']); $date[$key] = strtolower($row['date']); $size[$key] = strtolower($row['size']); } if (strtoupper($sortdir_files) == "DESC") @array_multisort($$sorting_files, SORT_DESC, $name, SORT_ASC, $files); else @array_multisort($$sorting_files, SORT_ASC, $name, SORT_ASC, $files); } //----------------------- // OFFSET DETERMINATION //----------------------- if (!isset($_GET["page"])) $_GET["page"] = 1; $offset_start = ($_GET["page"] * $thumbs_pr_page) - $thumbs_pr_page; if (!isset($_GET["page"])) $offset_start = 0; $offset_end = $offset_start + $thumbs_pr_page; if ($offset_end > sizeof($dirs) + sizeof($files)) $offset_end = sizeof($dirs) + sizeof($files); if ($_GET["page"] == "all" || $lazyload) { $offset_start = 0; $offset_end = sizeof($dirs) + sizeof($files); } //----------------------- // PAGE NAVIGATION //----------------------- if (!$lazyload && sizeof($dirs) + sizeof($files) > $thumbs_pr_page) { $page_navigation .= "$label_page "; for ($i=1; $i <= ceil((sizeof($files) + sizeof($dirs)) / $thumbs_pr_page); $i++) { if ($_GET["page"] == $i) $page_navigation .= "$i"; else $page_navigation .= "" . $i . ""; if ($i != ceil((sizeof($files) + sizeof($dirs)) / $thumbs_pr_page)) $page_navigation .= " | "; } //Insert link to view all images if ($_GET["page"] == "all") $page_navigation .= " | $label_all"; else $page_navigation .= " | $label_all"; } //----------------------- // BREADCRUMB NAVIGATION //----------------------- if ($requestedDir != "") { $breadcrumb_navigation .= "" . $label_home . " > "; $navitems = explode("/", $_REQUEST['dir']); for($i = 0; $i < sizeof($navitems); $i++) { if ($i == sizeof($navitems)-1) $breadcrumb_navigation .= $navitems[$i]; else { $breadcrumb_navigation .= "" . $navitems[$i] . " > "; } } } else $breadcrumb_navigation .= $label_home; //Include hidden links for all images BEFORE current page so lightbox is able to browse images on different pages for ($y = 0; $y < $offset_start - sizeof($dirs); $y++) { $breadcrumb_navigation .= ""; } //----------------------- // DISPLAY FOLDERS //----------------------- if (count($dirs) + count($files) == 0) { $thumbnails .= "
  • $label_noimages
  • "; //Display 'no images' text if($currentdir == "photos") $messages = "It looks like you have just installed MiniGal Nano. Please run the system check tool"; } $offset_current = $offset_start; for ($x = $offset_start; $x < sizeof($dirs) && $x < $offset_end; $x++) { $offset_current++; $thumbnails .= $dirs[$x]["html"]; } //----------------------- // DISPLAY FILES //----------------------- for ($i = $offset_start - sizeof($dirs); $i < $offset_end && $offset_current < $offset_end; $i++) { if ($i >= 0) { $offset_current++; $thumbnails .= $files[$i]["html"]; } } //Include hidden links for all images AFTER current page so lightbox is able to browse images on different pages if ($i<0) $i=1; for ($y = $i; $y < sizeof($files); $y++) { $page_navigation .= ""; } //----------------------- // OUTPUT MESSAGES //----------------------- if ($messages != "") { $messages = "
    " . $messages . "
    "; } // Read folder comment. $comment_filepath = $currentdir . $file . "/comment.html"; if (file_exists($comment_filepath)) { $fd = fopen($comment_filepath, "r"); $comment = fread($fd,filesize ($comment_filepath)); fclose($fd); } //PROCESS TEMPLATE FILE if(GALLERY_ROOT != "") $templatefile = GALLERY_ROOT . "templates/integrate.html"; else $templatefile = "templates/" . $templatefile . ".html"; if(!$fd = fopen($templatefile, "r")) { echo "Template ".htmlspecialchars(stripslashes($templatefile))." not found!"; exit(); } else { $template = fread ($fd, filesize ($templatefile)); fclose ($fd); $template = stripslashes($template); $template = preg_replace("/<% title %>/", $title, $template); $template = preg_replace("/<% messages %>/", $messages, $template); $template = preg_replace("/<% author %>/", $author, $template); $template = preg_replace("/<% gallery_root %>/", GALLERY_ROOT, $template); $template = preg_replace("/<% images %>/", "$images", $template); $template = preg_replace("/<% thumbnails %>/", "$thumbnails", $template); $template = preg_replace("/<% breadcrumb_navigation %>/", "$breadcrumb_navigation", $template); $template = preg_replace("/<% page_navigation %>/", "$page_navigation", $template); $template = preg_replace("/<% folder_comment %>/", "$comment", $template); $template = preg_replace("/<% bgcolor %>/", "$backgroundcolor", $template); $template = preg_replace("/<% gallery_width %>/", "$gallery_width", $template); $template = preg_replace("/<% version %>/", "$version", $template); echo "$template"; } //----------------------- //Debug stuff //----------------------- /* $mtime = microtime(); $mtime = explode(" ",$mtime); $mtime = $mtime[1] + $mtime[0]; $endtime = $mtime; $totaltime = ($endtime - $starttime); echo "This page was created in ".$totaltime." seconds"; */ ?>