2010-10-07 21:27:44 +02:00
< ? php
2010-10-25 00:13:23 +02:00
/*
Bizou - a ( french ) KISS php image gallery
Copyright ( C ) 2010 Marc MAURICE
This program is free software : you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation , either version 3 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program . If not , see < http :// www . gnu . org / licenses />.
*/
2010-10-07 21:27:44 +02:00
2010-12-12 22:49:01 +01:00
require 'config.php' ;
2010-10-07 22:42:13 +02:00
2011-01-27 01:13:05 +01:00
// global variables, globals should remain contant
$scriptUrl = $_SERVER [ " SCRIPT_NAME " ];
$rootUrl = dirname ( $scriptUrl );
if ( substr ( $rootUrl , - 1 ) !== '/' ) $rootUrl .= '/' ; // add a trailing / to rootUrl
// $scriptUrl = "/path/to/bizou/index.php"
// $rootUrl = "/path/to/bizou/"
2010-12-12 23:35:15 +01:00
// load plugins
2010-12-30 19:50:36 +01:00
$plugins = array ();
if ( is_dir ( " plugins " )) {
$plugins = scandir ( " plugins " );
array_shift ( $plugins ); array_shift ( $plugins ); // remove . and ..
foreach ( $plugins as $p ) if ( is_file ( " plugins/ $p /functions.php " ))
require " plugins/ $p /functions.php " ;
}
2010-12-12 23:35:15 +01:00
2010-12-30 10:40:38 +01:00
function plugins_include ( $phpFile )
{
foreach ( $GLOBALS [ 'plugins' ] as $p ) if ( is_file ( " plugins/ $p / $phpFile " ))
require " plugins/ $p / $phpFile " ;
}
2010-12-30 17:46:02 +01:00
if ( ! function_exists ( 'getImageLink' )) {
function getImageLink ( $imageSimplePath )
2010-12-12 23:35:15 +01:00
{
2011-01-27 01:13:05 +01:00
return $GLOBALS [ 'rootUrl' ] . IMAGES_DIR . $imageSimplePath ;
2010-12-12 23:35:15 +01:00
}
}
2011-06-13 22:46:52 +02:00
// functions to display a "progress page" when thumbs are generating
function beginGenerating ()
{
if ( ! isset ( $GLOBALS [ " generating " ])) {
echo " <p> <i><b>If you get: \" Fatal error: Maximum execution time exceeded \" , refresh this page.</b></i><br/> Please wait while generating thumbnails:<p/> \n " ;
ob_flush (); flush ();
$GLOBALS [ " generating " ] = true ;
}
}
function displayGenerated ( $thumbFile )
{
if ( isset ( $GLOBALS [ " generating " ])) {
echo basename ( $thumbFile ) . " \n " ;
ob_flush (); flush ();
}
}
function endGenerating () {
if ( isset ( $GLOBALS [ " generating " ])) {
echo " <p>Finished. This page will be refreshed.</p> <script>window.location.reload();</script> \n " ;
exit ();
}
}
2010-10-07 22:42:13 +02:00
function getPreview ( $imgFile , $maxSize = THUMB_SIZE )
2010-10-07 21:27:44 +02:00
{
# example: data/myalbum/100.mypic.jpg
2010-10-24 23:59:35 +02:00
$newImgFile = DATA_DIR . " / " . dirname ( $imgFile ) . " / " . $maxSize . " . " . basename ( $imgFile );
2010-10-07 21:27:44 +02:00
if ( ! is_file ( $newImgFile ))
{
2011-06-13 22:46:52 +02:00
beginGenerating ();
# reset script time limit to 20s (wont work in safe mode)
set_time_limit ( 20 );
2010-10-17 17:00:21 +02:00
$ext = strtolower ( substr ( $imgFile , - 4 ));
2010-10-08 00:11:01 +02:00
if ( $ext == " .jpg " )
$img = imagecreatefromjpeg ( $imgFile );
else
$img = imagecreatefrompng ( $imgFile );
2010-10-07 21:27:44 +02:00
$w = imagesx ( $img );
$h = imagesy ( $img );
# don't do anything if the image is already small
if ( $w <= $maxSize and $h <= $maxSize ) {
imagedestroy ( $img );
return $imgFile ;
}
2011-04-28 17:44:02 +02:00
# uncomment this if you need group writable files
#umask(0002);
2010-10-07 21:27:44 +02:00
# create the thumbs directory recursively
if ( ! is_dir ( dirname ( $newImgFile ))) mkdir ( dirname ( $newImgFile ), 0777 , true );
if ( $w > $h ) {
$newW = $maxSize ;
$newH = $h / ( $w / $maxSize );
} else {
$newW = $w / ( $h / $maxSize );
$newH = $maxSize ;
}
$newImg = imagecreatetruecolor ( $newW , $newH );
imagecopyresampled ( $newImg , $img , 0 , 0 , 0 , 0 , $newW , $newH , $w , $h );
2010-10-08 00:11:01 +02:00
if ( $ext == " .jpg " )
imagejpeg ( $newImg , $newImgFile );
else
imagepng ( $newImg , $newImgFile );
2010-10-07 21:27:44 +02:00
imagedestroy ( $img );
imagedestroy ( $newImg );
2011-06-13 22:46:52 +02:00
displayGenerated ( $newImgFile );
2010-10-07 21:27:44 +02:00
}
2011-01-27 01:13:05 +01:00
return $GLOBALS [ 'rootUrl' ] . $newImgFile ;
2010-10-07 21:27:44 +02:00
}
function getAlbumPreview ( $dir )
{
foreach ( scandir ( $dir ) as $file ) if ( $file != '.' and $file != '..' ) {
2010-10-08 00:11:01 +02:00
$ext = strtolower ( substr ( $file , - 4 ));
if ( $ext == " .jpg " or $ext == " .png " )
2010-10-07 22:42:13 +02:00
return getPreview ( " $dir / $file " );
2010-10-07 21:27:44 +02:00
}
return '' ;
}
2010-12-12 22:52:03 +01:00
// if url == http://localhost/photos/index.php/toto/titi, path_info == /toto/titi
// if url == http://localhost/photos/index.php, path_info is not set
2010-10-07 23:13:32 +02:00
// if url == http://localhost/photos/, path_info is not set
2010-12-12 22:52:03 +01:00
// if path_info is not set, we are at top level, so we redirect to /photos/index.php/
2010-10-07 23:13:32 +02:00
if ( ! isset ( $_SERVER [ " PATH_INFO " ])) {
2010-12-30 18:35:44 +01:00
header ( " Location: $scriptUrl / " );
2010-10-07 23:13:32 +02:00
exit ();
}
2010-12-30 17:49:51 +01:00
# simplePath is the simple path to the image
# /index.php/toto/titi => simplePath == /toto/titi
$simplePath = $_SERVER [ " PATH_INFO " ];
if ( $simplePath == '/' ) $simplePath = '' ;
2010-10-07 23:56:56 +02:00
// extra security check to avoid /photos/index/../.. like urls, maybe useless but..
2010-12-30 17:49:51 +01:00
if ( strpos ( $simplePath , '..' ) !== false ) die ( " .. found in url " );
2010-10-07 23:13:32 +02:00
2010-10-07 22:14:05 +02:00
$folders = array ();
2010-10-07 21:27:44 +02:00
$imageFiles = array ();
$otherFiles = array ();
2010-12-12 22:52:03 +01:00
# realDir is the directory in filesystem
# seen from current script directory
2010-12-30 17:49:51 +01:00
$realDir = IMAGES_DIR . $simplePath ;
2010-10-07 21:27:44 +02:00
2010-11-06 14:40:46 +01:00
if ( ! is_dir ( $realDir )) {
header ( " HTTP/1.1 404 Not Found " );
die ( " Directory Not Found " );
}
2010-10-07 22:27:18 +02:00
foreach ( scandir ( $realDir ) as $file ) if ( $file != '.' and $file != '..' )
2010-10-07 21:27:44 +02:00
{
2010-10-07 22:31:50 +02:00
if ( is_dir ( " $realDir / $file " ))
2010-10-07 21:27:44 +02:00
{
2010-12-30 18:35:44 +01:00
$folders [] = array ( " name " => $file , " link " => " $scriptUrl $simplePath / $file " , " preview " => getAlbumPreview ( " $realDir / $file " ) );
2010-10-07 21:27:44 +02:00
}
else
{
2010-10-07 22:27:18 +02:00
$ext = strtolower ( substr ( $file , - 4 ));
2010-10-25 00:06:54 +02:00
if ( $ext == " .jpg " or $ext == " .png " ) {
2010-12-30 17:49:51 +01:00
$imageFiles [] = array ( " name " => $file , " url " => getPreview ( " $realDir / $file " ), " link " => getImageLink ( " $simplePath / $file " ) );
2010-10-25 00:06:54 +02:00
} else {
2011-01-27 01:13:05 +01:00
$otherFiles [] = array ( " name " => $file , " link " => " $rootUrl $realDir / $file " );
2010-10-25 00:06:54 +02:00
}
2010-10-07 21:27:44 +02:00
}
}
2011-06-13 22:46:52 +02:00
endGenerating ();
2010-12-30 17:49:51 +01:00
if ( dirname ( $simplePath ) !== '' )
2010-12-30 18:35:44 +01:00
$parentLink = $scriptUrl . dirname ( $simplePath );
2010-10-07 22:27:18 +02:00
else
$parentLink = " " ;
2010-10-07 22:34:57 +02:00
///// template starts here /////
header ( 'Content-Type: text/html; charset=utf-8' );
header ( 'Expires: ' . gmdate ( 'D, d M Y H:i:s \G\M\T' , time () + 3600 ));
2011-06-03 18:38:53 +02:00
require 'template.php' ;
2010-10-07 22:34:57 +02:00
?>