Erstes großes Refactoring
* alle gemeinsamen Funktionen in includes/galleryfunctions.php zusammengeführt (fixes #21) * AJAX-Requests werden in ajaxrequest.php behandelt und liefern zusätzlich zum Titel auch die URLs des Vorschau- und des Vollbildes (fixes #22), die übergebenen Request-Parameter werden syntaktisch geprüft (fixes #23) * Die Vorschau- und Thumbnail-Bilder werden in der Funktion getScaledImage() in includes/galleryfunctions.php generiert und im Filesystem abgelegt (fixes #10) * Bildbeschreibungen sind jetzt in einem .ini-Format in bilder/example/galleryinfo.ini in der Sektion "images" definiert (addresses #20) * Rendern der Menüpunkte in index.php und includes/galleryfunctions.php vorbereitet (addresses #16) * Die AJAX-Aufrufe und Pfadberechnungen in scripts/ourhandlers.js wurden korrigiert und an die neue AJAX-Handler-URL angepasst (addresses #22, fixes #19) * Beispielbilder in Unterverzeichnis ''bilder/example'' verschoben und die Möglichkeit vorgesehen in ''bilder/galleryinfo.ini'' eine Standardgallerie anzugeben (fixes #24, addresses #20, #16)
This commit is contained in:
		
							parent
							
								
									3b970fb135
								
							
						
					
					
						commit
						0f8dda1b1b
					
				
					 19 changed files with 435 additions and 428 deletions
				
			
		
							
								
								
									
										224
									
								
								includes/galleryfunctions.php
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										224
									
								
								includes/galleryfunctions.php
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,224 @@ | |||
| <?php | ||||
| /** | ||||
|  * Diese Datei stellt die verschiedenen Funktionen für den Aufbau der | ||||
|  * Bildergallerie zur Verfügung. | ||||
|  * | ||||
|  * Copyright (c) 2007, 2008 Jan Dittberner <jan@dittberner.info> | ||||
|  * Jan Dittberner IT-Consulting & -Solutions, | ||||
|  * Cottbuser Str. 1, D-01129 Dresden | ||||
|  * | ||||
|  * This file is part of the ScrollingJQueryGallery component of the | ||||
|  * gnuviech-server.de Websitetools | ||||
|  * | ||||
|  * ScrollingJQueryGallery 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. | ||||
|  * | ||||
|  * ScrollingJQueryGallery 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 ScrollingJQueryGallery.  If not, see | ||||
|  * <http://www.gnu.org/licenses/>. | ||||
|  * | ||||
|  * Version: $Id$ | ||||
|  */ | ||||
| 
 | ||||
| define(GALLERYPREFIX, "bilder"); | ||||
| define(INFOFILE, "galleryinfo.ini"); | ||||
| define(IMAGESEC, "images"); | ||||
| define(GALLERYSEC, "gallery"); | ||||
| define(GALLERY_RE, '/^[\w\d _-]+$/'); | ||||
| 
 | ||||
| $previewwidth = 311; | ||||
| $thumbheight = 67; | ||||
| 
 | ||||
| function galleryExists($galleryname) { | ||||
|   return preg_match(GALLERY_RE, $galleryname) && | ||||
|     realpath(GALLERYPREFIX . DIRECTORY_SEPARATOR . $galleryname); | ||||
| } | ||||
| 
 | ||||
| function getGalleryConfig($galleryname = null) { | ||||
|   if ($galleryname) { | ||||
|     $filepath = realpath(GALLERYPREFIX . DIRECTORY_SEPARATOR . | ||||
|                          $galleryname . DIRECTORY_SEPARATOR . INFOFILE); | ||||
|   } else { | ||||
|     $filepath = realpath(GALLERYPREFIX . DIRECTORY_SEPARATOR . INFOFILE); | ||||
|   } | ||||
|   if (is_file($filepath)) { | ||||
|     return parse_ini_file($filepath, true); | ||||
|   } | ||||
|   return array(); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Holt die Bildinformationen zu einem Bild aus der Datei | ||||
|  * bilder/imginfo.txt und gibt diese zurueck. | ||||
|  * | ||||
|  * @param $imagename Bildname | ||||
|  * @param $galleryname Galleriename | ||||
|  */ | ||||
| function getImgInfo($galleryname, $imagename) { | ||||
|   return array("name" => $imagename, | ||||
|                "data" => getImageLabel($galleryname, $imagename), | ||||
|                "preview" => GALLERYPREFIX . DIRECTORY_SEPARATOR . | ||||
|                getScaledImage($galleryname, $imagename, | ||||
|                               $GLOBALS["previewwidth"], false), | ||||
|                "full" => GALLERYPREFIX . DIRECTORY_SEPARATOR . $galleryname . | ||||
|                DIRECTORY_SEPARATOR . $imagename | ||||
|                ); | ||||
| } | ||||
| 
 | ||||
| function getImageLabel($galleryname, $imagename) { | ||||
|   $gallerypath = realpath(GALLERYPREFIX . DIRECTORY_SEPARATOR . $galleryname); | ||||
|   if (empty($gallerypath) || !is_dir($gallerypath)) { | ||||
|     return false; | ||||
|   } | ||||
|   $filepath = $gallerypath . DIRECTORY_SEPARATOR . $imagename; | ||||
|   if (!is_file($filepath)) { | ||||
|     return false; | ||||
|   } | ||||
|   $inidata = getGalleryConfig($galleryname); | ||||
|   $value = $inidata[IMAGESEC][$imagename]; | ||||
|   if ($value) { | ||||
|     return $value; | ||||
|   } | ||||
|   return $imagename; | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Liefert die aktuelle Gallerie. Die Gallerie kann entweder im | ||||
|  * GET-Parameter "galleryname" stehen, in der "gallery"-Sektion der | ||||
|  * zentralen galleryinfo.ini angegeben werden oder es wird das erste | ||||
|  * Unterverzeichnis von GALLERYPREFIX verwendet. | ||||
|  */ | ||||
| function getCurrentGallery() { | ||||
|   if (galleryExists($_GET["galleryname"])) { | ||||
|     return $_GET["galleryname"]; | ||||
|   } | ||||
|   $filepath = realpath(GALLERYPREFIX . DIRECTORY_SEPARATOR . INFOFILE); | ||||
|   if (!empty($filepath)) { | ||||
|     $inidata = getGalleryConfig(); | ||||
|     if (galleryExists($inidata[GALLERYSEC]["default"])) { | ||||
|       return $inidata[GALLERYSEC]["default"]; | ||||
|     } | ||||
|   } | ||||
|   foreach (glob(realpath(GALLERYPREFIX) . DIRECTORY_SEPARATOR . '*', | ||||
|                 GLOB_ONLYDIR) as $directory) { | ||||
|     $basename = basename($directory); | ||||
|     if (galleryExists($basename)) { | ||||
|       return $basename; | ||||
|     } | ||||
|   } | ||||
|   return null; | ||||
| } | ||||
| 
 | ||||
| function getScaledImage($galleryname, $basename, $maxdim, $scaleheight=true) { | ||||
|   if ($maxdim == 0) { | ||||
|     debug_print_backtrace(); | ||||
|   } | ||||
|   $gallerydir = realpath(GALLERYPREFIX . DIRECTORY_SEPARATOR . $galleryname); | ||||
|   if ($scaleheight) { | ||||
|     $scaleddir = sprintf("%s%sscaled_x%d", $galleryname, | ||||
|                          DIRECTORY_SEPARATOR, $maxdim); | ||||
|   } else { | ||||
|     $scaleddir = sprintf("%s%sscaled%dx_", $galleryname, | ||||
|                          DIRECTORY_SEPARATOR, $maxdim); | ||||
|   } | ||||
|   $scaleddirpath = GALLERYPREFIX . DIRECTORY_SEPARATOR . $scaleddir; | ||||
|   if (!is_dir($scaleddirpath)) { | ||||
|     // versuchen das Thumbnail-Verzeichnis anzulegen
 | ||||
|     $mkdir = @mkdir($scaleddirpath, 0755); | ||||
|     if (!$mkdir) { | ||||
|       return $galleryname . DIRECTORY_SEPARATOR . $basename; | ||||
|     } | ||||
|   } | ||||
|    | ||||
|   $scaledimage = $scaleddirpath . DIRECTORY_SEPARATOR . $basename; | ||||
|   if (!is_file($scaledimage)) { | ||||
|     // Datei erzeugen
 | ||||
|     $originalfile = $gallerydir . DIRECTORY_SEPARATOR . $basename; | ||||
|     $origimage = imagecreatefromjpeg($originalfile); | ||||
|     $origx = imagesx($origimage); | ||||
|     $origy = imagesy($origimage); | ||||
|     if ($scaleheight) { | ||||
|       $scaleratio = $origy / (1.0 * $maxdim); | ||||
|       $newy = $maxdim; | ||||
|       $newx = (int) $origx / $scaleratio; | ||||
|     } else { | ||||
|       $scaleratio = $origx / (1.0 * $maxdim); | ||||
|       $newx = $maxdim; | ||||
|       $newy = (int) $origy / $scaleratio; | ||||
|     } | ||||
|     $newimage = imagecreatetruecolor($newx, $newy); | ||||
|     imagecopyresampled($newimage, $origimage, 0, 0, 0, 0, $newx, $newy, | ||||
|                        $origx, $origy); | ||||
|     imagejpeg($newimage, $scaledimage, 90); | ||||
|   } | ||||
|   return $scaleddir . DIRECTORY_SEPARATOR . $basename; | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Gibt die Informationen über Vorschaubilder zurück. | ||||
|  * | ||||
|  * @return array das erste Element ist die aufsummierte Breite der | ||||
|  * Einzelbilder und das zweite Element ist ein assoziatives Array mit | ||||
|  * den Bildnamen als Keys und dem Ergebnis von getimagesize() als | ||||
|  * Werten | ||||
|  */ | ||||
| function getThumbNailInfo($galleryname) { | ||||
|   $thumbsizes = array(); | ||||
|   $thumbwidthsum = 2; | ||||
|   foreach (glob(realpath(GALLERYPREFIX . DIRECTORY_SEPARATOR . | ||||
|                          $galleryname) . DIRECTORY_SEPARATOR . | ||||
|                 '*.jp{e,}g', GLOB_BRACE) as $filename) { | ||||
|     $basename = basename($filename); | ||||
|     $thumbfile = getScaledImage($galleryname, $basename, | ||||
|                                 $GLOBALS["thumbheight"]); | ||||
|     if ($thumbsize = getimagesize(realpath(GALLERYPREFIX . | ||||
|                                            DIRECTORY_SEPARATOR . | ||||
|                                            $thumbfile))) { | ||||
|       $thumbsizes[$basename] = array($thumbfile, $thumbsize); | ||||
|       $thumbwidthsum = $thumbwidthsum + $thumbsize[0] + 3; | ||||
|     } | ||||
|   } | ||||
|   return array($thumbwidthsum, $galleryname, $thumbsizes); | ||||
| } | ||||
| 
 | ||||
| function getGalleryLinks() { | ||||
| } | ||||
| 
 | ||||
| function showThumbnails(&$thumbinfo) { | ||||
|   foreach ($thumbinfo[2] as $basename => $data) { | ||||
|     printf("<div class=\"thumbnail\"><img src=\"%s\" alt=\"\" \"%s\" /></div>", | ||||
|            GALLERYPREFIX . DIRECTORY_SEPARATOR . $data[0], | ||||
|            $data[1][3]);; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| function showPreview(&$thumbinfo) { | ||||
|   foreach ($thumbinfo[2] as $basename => $data) { | ||||
|     $galleryname = $thumbinfo[1]; | ||||
|     $fullname = GALLERYPREFIX . DIRECTORY_SEPARATOR . $galleryname . | ||||
|       DIRECTORY_SEPARATOR . $basename; | ||||
|     $scaledimage = getScaledImage($galleryname, $basename, | ||||
|                                   $GLOBALS["previewwidth"], false); | ||||
|     $scaledimagesize = getimagesize(realpath(GALLERYPREFIX . | ||||
|                                              DIRECTORY_SEPARATOR . | ||||
|                                              $scaledimage)); | ||||
|     printf("<a href=\"%s\" class=\"lightbox\" ><img id=\"contentimg\" src=\"%s%s%s\" alt=\"%s\" %s /></a>", | ||||
|            $fullname, GALLERYPREFIX, DIRECTORY_SEPARATOR, $scaledimage, | ||||
|            getImageLabel($galleryname, $basename), $scaledimagesize[3]); | ||||
|     break; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| function renderDescription(&$thumbinfo) { | ||||
|   foreach ($thumbinfo[2] as $basename => $data) { | ||||
|     print htmlentities(getImageLabel($thumbinfo[1], $basename)); | ||||
|     break; | ||||
|   } | ||||
| } | ||||
		Reference in a new issue