Théophile Bastian
02479196c6
Bizou now handles correctly data and images directories. One can now configure * `MEDIA_BASE_DIR`: base directory for `images` and `data` and * `{IMAGES,DATA}_URL`: the base url that should be used to point to a file in `IMAGES_DIR` (resp. `DATA_DIR`). Assuming the web server itself can correctly serve those files at the given URL and Bizou has the correct permissions for those locations, Bizou should be able to work as well as using relative paths.
153 lines
4.2 KiB
PHP
153 lines
4.2 KiB
PHP
<?php
|
|
|
|
// load plugins
|
|
$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";
|
|
}
|
|
|
|
function plugins_include($phpFile)
|
|
{
|
|
foreach ($GLOBALS['plugins'] as $p) if (is_file("plugins/$p/$phpFile"))
|
|
require "plugins/$p/$phpFile";
|
|
}
|
|
|
|
function getPathInfo()
|
|
{
|
|
$simplePath = $_SERVER["PATH_INFO"];
|
|
if ($simplePath == '/') $simplePath = '';
|
|
// extra security check to avoid /photos/index/../.. like urls, maybe useless but..
|
|
if (strpos($simplePath, '..') !== false) die(".. found in url");
|
|
return $simplePath;
|
|
}
|
|
|
|
|
|
if (! function_exists('getImageLink')) {
|
|
function getImageLink($imageSimplePath)
|
|
{
|
|
return $GLOBALS['rootUrl'].IMAGES_URL.$imageSimplePath;
|
|
}
|
|
}
|
|
|
|
if (! function_exists('getPreview')) {
|
|
function getPreview($imgFile, $maxSize = THUMB_SIZE)
|
|
{
|
|
# example: data/myalbum/100.mypic.jpg
|
|
$origImgFile = IMAGES_DIR . $imgFile;
|
|
$basePath = dirname($imgFile)."/".$maxSize.".".basename($imgFile);
|
|
$newImgFile = DATA_DIR . "/" . $basePath;
|
|
|
|
# if the preview is a symlink, image is already good sized
|
|
if (is_link($newImgFile)) return $imgFile;
|
|
|
|
if (! is_file($newImgFile))
|
|
{
|
|
# this tels the template to flush output after displaying previews
|
|
$GLOBALS["generating"] = true;
|
|
|
|
# reset script time limit to 20s (wont work in safe mode)
|
|
set_time_limit(20);
|
|
|
|
$ext = strtolower(substr($imgFile, -4));
|
|
if ($ext == ".jpg") {
|
|
$img = imagecreatefromjpeg($origImgFile);
|
|
$exif = exif_read_data($origImgFile);
|
|
} else {
|
|
$img = imagecreatefrompng($origImgFile);
|
|
}
|
|
if ($img === false) return ""; #read error (wrong permission...)
|
|
|
|
$w = imagesx($img);
|
|
$h = imagesy($img);
|
|
# if the image is already small, make a symlink, and return it
|
|
if ($w <= $maxSize and $h <= $maxSize) {
|
|
imagedestroy($img);
|
|
symlink($imgFile, $newImgFile);
|
|
return $imgFile;
|
|
}
|
|
|
|
# config to allow group writable files
|
|
umask(DATA_UMASK);
|
|
# create the thumbs directory recursively
|
|
if (! is_dir(dirname($newImgFile))) @mkdir(dirname($newImgFile), 0777, true)
|
|
or die("Could not write in data dir. Please fix permissions.");
|
|
|
|
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);
|
|
|
|
if ($ext == ".jpg") {
|
|
if (!empty($exif['Orientation'])) {
|
|
$orientation = $exif['Orientation'];
|
|
if ($orientation === 3) $newImg = imagerotate($newImg, 180, 0);
|
|
elseif ($orientation === 6) $newImg = imagerotate($newImg, -90, 0);
|
|
elseif ($orientation === 8) $newImg = imagerotate($newImg, 90, 0);
|
|
}
|
|
imagejpeg($newImg, $newImgFile, JPEG_QUALITY);
|
|
} else {
|
|
imagepng($newImg, $newImgFile);
|
|
}
|
|
|
|
imagedestroy($img);
|
|
imagedestroy($newImg);
|
|
}
|
|
|
|
return $basePath;
|
|
}
|
|
}
|
|
|
|
function getAlbumPreview($dir)
|
|
{
|
|
$previewBase = "/$dir/albumpreview";
|
|
$previewFile = DATA_DIR . $previewBase;
|
|
$dirPath = IMAGES_DIR . "/$dir/";
|
|
|
|
if (is_file("$previewFile.jpg")) {
|
|
return "$previewBase.jpg";
|
|
} else if (is_file("$previewFile.empty")) {
|
|
return "";
|
|
} else if (is_file("$previewFile.png")) {
|
|
return "$previewBase.png";
|
|
} else {
|
|
# config to allow group writable files
|
|
umask(DATA_UMASK);
|
|
# create the thumbs directory recursively
|
|
if (! is_dir(dirname($previewFile))) @mkdir(dirname($previewFile), 0777, true)
|
|
or die("Could not write in data dir. Please fix permissions.");
|
|
|
|
// no preview: look for a preview in current dir, write it, return it
|
|
foreach (scandir($dirPath) as $file) if ($file[0] != '.') {
|
|
$ext = strtolower(substr($file, -4));
|
|
if ($ext == ".jpg" or $ext == ".png") {
|
|
$thumbUrl = getPreview("$dir/$file");
|
|
$thumb = DATA_DIR . $thumbUrl;
|
|
copy($thumb, $previewFile.$ext);
|
|
return $previewBase.$ext;
|
|
} else if (is_dir("$dirPath/$file")) {
|
|
$subPreview = getAlbumPreview("$dir/$file");
|
|
if ($subPreview) {
|
|
$myPreview = dirname($previewBase)."/".basename($subPreview);
|
|
copy(DATA_DIR . $subPreview, DATA_DIR . $myPreview);
|
|
return $myPreview;
|
|
}
|
|
}
|
|
}
|
|
|
|
// nothing found. create empty file
|
|
touch("$previewFile.empty");
|
|
return "";
|
|
}
|
|
}
|
|
|
|
?>
|