0
|
1 <?php
|
|
2 //
|
|
3 // Yet Another Image Gallery
|
|
4 // (C) Copyright 2015 Tecnic Software productions (TNSP)
|
|
5 //
|
|
6 require "msitegen.inc.php";
|
|
7 require "mgallery.inc.php";
|
|
8
|
|
9
|
|
10 //
|
|
11 // Various utility functions
|
|
12 //
|
|
13 function mgGetImageURL()
|
|
14 {
|
|
15 global $galImageURL, $galPath;
|
|
16 return $galImageURL.$galPath."/".implode("", func_get_args());
|
|
17 }
|
|
18
|
|
19
|
|
20 function mgGetURL($path, $image, $entities = TRUE)
|
|
21 {
|
|
22 global $galBaseURL, $galCleanURLS;
|
|
23 $amp = $entities ? "&" : "&";
|
|
24
|
|
25 if ($galCleanURLS)
|
|
26 {
|
|
27 return $galBaseURL.$path."/".($image !== FALSE ? $image : "");
|
|
28 }
|
|
29 else
|
|
30 {
|
|
31 return
|
|
32 $galBaseURL.mgGetSetting("mgallery_php")."?path=".
|
|
33 $path.($image !== FALSE ? $amp."image=".$image : "");
|
|
34 }
|
|
35 }
|
|
36
|
|
37
|
|
38 function mgGetNaviActive(&$galIndex, $index, $delta, &$res, &$url, $entities)
|
|
39 {
|
|
40 global $galPath;
|
|
41 $res = $index + $delta;
|
|
42 if ($res >= 0 && $res <= sizeof($galIndex) - 1)
|
|
43 {
|
|
44 $url = mgGetURL($galPath, $galIndex[$res], $entities);
|
|
45 return TRUE;
|
|
46 }
|
|
47 else
|
|
48 return FALSE;
|
|
49 }
|
|
50
|
|
51
|
|
52 function mgGetNaviControlImage(&$galIndex, $index, $class, $url)
|
|
53 {
|
|
54 global $galTNPath;
|
|
55
|
|
56 $img = "<div class=\"imageCtrl ".$class."\">";
|
|
57
|
|
58 if ($url !== FALSE)
|
|
59 {
|
|
60 $img .=
|
|
61 "<a href=\"".$url."\"><img src=\"".
|
|
62 mgGetImageURL($galTNPath, $galIndex[$index]).
|
|
63 "\" alt=\"".$galIndex[$index]."\" /></a>";
|
|
64 }
|
|
65
|
|
66 return $img."</div>\n";
|
|
67 }
|
|
68
|
|
69
|
|
70 function mgGetNaviControlImageBox(&$galIndex, $index, $class, $delta)
|
|
71 {
|
|
72 if (!mgGetNaviActive($galIndex, $index, $delta, $res, $url, TRUE))
|
|
73 $url = FALSE;
|
|
74
|
|
75 return mgGetNaviControlImage($galIndex, $res, $class, $url);
|
|
76 }
|
|
77
|
|
78
|
|
79 function mgGetControl($str, $class, &$galIndex, $index, $delta, $naviFlags)
|
|
80 {
|
|
81 $active = mgGetNaviActive($galIndex, $index, $delta, $res, $url, TRUE);
|
|
82 if ($active && ($naviFlags & GNAV_IMG))
|
|
83 $img = mgGetNaviControlImage($galIndex, $res, $class, $url);
|
|
84 else
|
|
85 $img = "";
|
|
86
|
|
87 if ($naviFlags & GNAV_TEXT)
|
|
88 $str = "<span class=\"naviControl ".$class."\">[".($active ? "<a href=\"".$url."\">".$str."</a>" : $str)."]</span>";
|
|
89 else
|
|
90 $str = "";
|
|
91
|
|
92 if ($delta < 0)
|
|
93 return $img.$str;
|
|
94 else
|
|
95 return $str.$img;
|
|
96 }
|
|
97
|
|
98
|
|
99 function mgGetNaviControls(&$galIndex, $index, $naviFlags)
|
|
100 {
|
|
101 global $galPath;
|
|
102
|
|
103 return
|
|
104 "<div class=\"naviControls\">".
|
|
105 mgGetControl("<<", "prev", $galIndex, $index, -1, $naviFlags).
|
|
106 "[<a href=\"".mgGetURL($galPath, FALSE)."\">^^</a>]".
|
|
107 mgGetControl(">>", "next", $galIndex, $index, 1, $naviFlags).
|
|
108 "</div>\n";
|
|
109 }
|
|
110
|
|
111
|
|
112 function mgPrintTable($class, &$galEntries, &$galIndex, $start, $limit)
|
|
113 {
|
|
114 global $galAlbumIcon, $galPath, $galTNPath;
|
|
115
|
|
116 $galCount = count($galIndex);
|
|
117 if ($start >= $galCount)
|
|
118 return $start;
|
|
119
|
|
120 $end = ($limit === FALSE) ? $galCount : $start + $limit;
|
|
121 if ($end > $galCount) $end = $galCount;
|
|
122
|
|
123 $rowLimit = mgGetSetting("album_row_limit");
|
|
124 $n = 0;
|
|
125
|
|
126 echo "<table class=\"".$class."\">\n";
|
|
127 for ($index = $start; $index < $end; $index++)
|
|
128 {
|
|
129 $filename = &$galIndex[$index];
|
|
130 $data = &$galEntries[$filename];
|
|
131
|
|
132 if ($n == 0) echo " <tr>\n";
|
|
133
|
|
134 echo
|
|
135 " <td id=\"cd".$data["base"]."\">\n";
|
|
136
|
|
137 if ($data["type"] == 0)
|
|
138 {
|
|
139 echo
|
|
140 "<div class=\"imageBox\"><a href=\"".mgGetURL($galPath, $filename)."\">".
|
|
141 "<img src=\"".mgGetImageURL($galTNPath, $filename)."\" alt=\"".
|
|
142 chentities($filename)."\"></a>".
|
|
143 "</div>".
|
|
144 mgGetArr($data, "caption", "<div class=\"imageCaption\">%1</div>", "", "chentities");
|
|
145 /*
|
|
146 if ($mode == "")
|
|
147 {
|
|
148 echo
|
|
149 " <select class=\"dropdown\" id=\"dd".$data["base"]."\" name=\"dd".$data["base"].
|
|
150 "\" onchange=\"galPhotoDataChanged('".$data["base"]."');\">\n";
|
|
151
|
|
152 foreach ($picChoices as $name => $value)
|
|
153 {
|
|
154 echo " <option value=\"$value\"".($value == $data["id"] ? " selected=\"selected\"" : "").">".chentities($name)."</option>\n";
|
|
155 }
|
|
156 echo
|
|
157 " </select>\n";
|
|
158 }
|
|
159 */
|
|
160 }
|
|
161 else
|
|
162 {
|
|
163 echo
|
|
164 " <a href=\"".mgGetURL(mgCleanPath(TRUE, $galPath, $data["base"]), FALSE)."\">".
|
|
165 "<img class=\"albumIcon\" src=\"".$galAlbumIcon."\" alt=\"".chentities($data["caption"])."\" />\n".
|
|
166 "<div class=\"albumTitle\">".chentities($data["caption"])."</div></a>\n";
|
|
167 }
|
|
168
|
|
169 echo
|
|
170 " </td>\n";
|
|
171
|
|
172 if (++$n >= $rowLimit)
|
|
173 {
|
|
174 echo " </tr>\n";
|
|
175 $n = 0;
|
|
176 }
|
|
177 }
|
|
178 if ($n > 0)
|
|
179 {
|
|
180 while ($n++ < $rowLimit)
|
|
181 echo " <td></td>\n";
|
|
182 echo " </tr>\n";
|
|
183 }
|
|
184 echo "</table>\n";
|
|
185 return $index;
|
|
186 }
|
|
187
|
|
188
|
|
189 function mgTimeStr($str)
|
|
190 {
|
|
191 $tmp = date_create_from_format("Y:m:d H:i:s", $str);
|
|
192 return date_format($tmp, "d M Y (H:i)");
|
|
193 }
|
|
194
|
|
195
|
|
196 function mgPrintPageInfoFooter()
|
|
197 {
|
|
198 if (($str = mgGetSetting("page_info")) !== FALSE)
|
|
199 echo "<div class=\"pageInfoFooter\">".$str."</div>";
|
|
200 }
|
|
201
|
|
202
|
|
203 function mgPrintBreadCrumbs($galData)
|
|
204 {
|
|
205 $res = array();
|
|
206 if ($galData["caption"])
|
|
207 $res[] = chentities($galData["caption"]);
|
|
208
|
|
209 $tmp = $galData;
|
|
210 while (isset($tmp["parent"]))
|
|
211 {
|
|
212 $pdata = $tmp["parent"];
|
|
213 $res[] = "<a href=\"".mgGetURL($pdata["path"], FALSE)."\">".chentities($pdata["caption"])."</a>";
|
|
214 $tmp = $tmp["parent"];
|
|
215 }
|
|
216
|
|
217 if (count($res) > 1)
|
|
218 {
|
|
219 $res = array_map(function ($a) { return "<span class=\"naviBreadCrumbItem\">".$a."</span>"; }, $res);
|
|
220 echo
|
|
221 "<div class=\"naviBreadCrumbs\">".
|
|
222 implode("<span class=\"naviBreadCrumbSep\"></span>", array_reverse($res)).
|
|
223 "</div>\n";
|
|
224 }
|
|
225 }
|
|
226
|
|
227
|
|
228 //
|
|
229 // Get gallery settings
|
|
230 //
|
|
231 mgReadSettings();
|
|
232
|
|
233 $pageCSS = mgGetSetting("css");
|
|
234 $pageCSSSelect = mgGetSetting("css_select");
|
|
235 $galBasePath = mgGetSetting("base_path");
|
|
236 $galBaseURL = mgGetSetting("base_url");
|
|
237 $galImageURL = mgGetSetting("image_url", mgGetSetting("base_url"));
|
|
238
|
|
239 $galAlbumIcon = mgGetSetting("album_icon");
|
|
240 $galCleanURLS = mgGetSetting("clean_urls");
|
|
241 $galTNPath = mgGetSetting("tn_path");
|
|
242 $galMedSuffix = mgGetSetting("med_suffix");
|
|
243 $galTitlePrefix = mgGetSetting("title_prefix");
|
|
244 $galTitleSep = mgGetSetting("title_sep");
|
|
245
|
|
246 $galMode = stGetRequestItem("mode", "view", TRUE);
|
|
247 $galPath = stGetRequestItem("path", ".", TRUE);
|
|
248 $galPageIndex = intval(stGetRequestItem("index", 0, TRUE));
|
|
249 $galImage = stGetRequestItem("image", FALSE, TRUE);
|
|
250
|
|
251 if (is_string($galImage))
|
|
252 $galImage = basename($galImage);
|
|
253
|
|
254
|
|
255 //
|
|
256 // Attempt to read the data cache file
|
|
257 //
|
|
258 $filename = mgGetPath(mgCleanPath(TRUE, $galBasePath, $galPath), "cache_file");
|
|
259 $filename2 = mgGetPath(mgCleanPath(FALSE, $galBasePath, $galPath), "cache_file");
|
|
260 if ($filename == $filename2 && file_exists($filename) && ($fp = @fopen($filename, "rb")) !== FALSE)
|
|
261 {
|
|
262 if (flock($fp, LOCK_SH))
|
|
263 {
|
|
264 require($filename);
|
|
265 flock($fp, LOCK_UN);
|
|
266 }
|
|
267 fclose($fp);
|
|
268 }
|
|
269
|
|
270
|
|
271 // If no data available, show an error page
|
|
272 if (!isset($galData) || !isset($galEntries) ||
|
|
273 !isset($galAlbumsIndex) || !isset($galImagesIndex))
|
|
274 {
|
|
275 cmPrintPageHeader(mgGetVal(array("title_prefix", "title_sep"), "%1%2")."ERROR!");
|
|
276
|
|
277 echo
|
|
278 "<h1>Gallery error</h1>\n".
|
|
279 "<p>Gallery path <b>".chentities($galPath)."</b> does not exist or is invalid.</p>\n";
|
|
280
|
|
281 //echo "<p>".$filename."</p><p>".$filename2."</p>";
|
|
282
|
|
283 mgPrintPageInfoFooter();
|
|
284 cmPrintPageFooter(TRUE);
|
|
285 exit;
|
|
286 }
|
|
287
|
|
288
|
|
289 //
|
|
290 // Print page header, etc.
|
|
291 //
|
|
292 if (($index = array_search($galImage, $galImagesIndex)) !== FALSE)
|
|
293 {
|
|
294 //
|
|
295 // Single image mode
|
|
296 //
|
|
297 $naviFlags = mgGetSetting("image_navigation");
|
|
298 $data = $galEntries[$galImage];
|
|
299
|
|
300 $pageTitle = $galTitlePrefix.$galTitleSep.$galData["caption"]." - ".$galImage;
|
|
301 cmPrintPageHeader($pageTitle);
|
|
302 echo "<h1>".chentities($pageTitle)."</h1>\n";
|
|
303
|
|
304 if ($naviFlags & GNAV_BREADCRUMBS)
|
|
305 mgPrintBreadCrumbs($galData);
|
|
306
|
|
307 if ($naviFlags & GNAV_TOP)
|
|
308 echo mgGetNaviControls($galImagesIndex, $index, $naviFlags);
|
|
309
|
|
310 echo
|
|
311 "<div class=\"imageCBox\">\n".
|
|
312 mgGetNaviControlImageBox($galImagesIndex, $index, "prev", -1).
|
|
313 "<div class=\"imageBox\">\n".
|
|
314 "<a target=\"_blank\" href=\"".$galImageURL.$galPath."/".$galImage."\">".
|
|
315 "<img src=\"".mgGetImageURL($galTNPath, $data["base"].$galMedSuffix.$data["ext"])."\" alt=\"".
|
|
316 chentities($data["base"].$galMedSuffix.$data["ext"])."\"></a>\n".
|
|
317 "</div>\n".
|
|
318 mgGetNaviControlImageBox($galImagesIndex, $index, "next", 1).
|
|
319 "</div>\n".
|
|
320 "<div class=\"imageCaption\">".mgGetArr($data, "caption", "%1", "")."</div>\n";
|
|
321
|
|
322 $list = array(
|
|
323 mgGetArr($data, array("width", "height"), "<span class=\"infoDimensions\"><b>%1</b> x <b>%2</b> px</span>", NULL),
|
|
324 mgGetArr($data, "model", "<span class=\"infoModel\"><b>%1</b></span>", NULL),
|
|
325 mgGetArr($data, "fnumber", "<span class=\"infoFNumber\"><b>f/%1</b></span>", NULL),
|
|
326 mgGetArr($data, "exposure", "<span class=\"infoExposure\"><b>%1</b> sec</span>", NULL, NULL),
|
|
327 mgGetArr($data, "iso", "<span class=\"infoISO\">ISO <b>%1</b></span>", NULL),
|
|
328 );
|
|
329
|
|
330 echo
|
|
331 "<div class=\"infoBox\">\n".
|
|
332 mgGetArr($data, "datetime", "<span class=\"infoDateTime\">%1</span>", "", "mgTimeStr").
|
|
333 implode(", ", array_filter($list, function($a) { return $a !== NULL; })).
|
|
334 "</div>\n";
|
|
335
|
|
336 if ($naviFlags & GNAV_BOTTOM)
|
|
337 echo mgGetNaviControls($galImagesIndex, $index, $naviFlags);
|
|
338
|
|
339 // Javascript navigation
|
|
340 if ($naviFlags & GNAV_JAVASCRIPT)
|
|
341 {
|
|
342 $prevActive = mgGetNaviActive($galImagesIndex, $index, -1, $res, $prevURL, FALSE);
|
|
343 $nextActive = mgGetNaviActive($galImagesIndex, $index, 1, $res, $nextURL, FALSE);
|
|
344 echo
|
|
345 "<script type=\"text/javascript\">\n".
|
|
346 "var mgalPrevURL = \"".($prevActive ? $prevURL : "")."\";\n".
|
|
347 "var mgalNextURL = \"".($nextActive ? $nextURL : "")."\";\n".
|
|
348 "\n";
|
|
349 ?>
|
|
350 function mgalNavigateTo(url)
|
|
351 {
|
|
352 if (url != "")
|
|
353 window.location = url;
|
|
354 }
|
|
355
|
|
356
|
|
357 function mgalProcessKeyPress(ev)
|
|
358 {
|
|
359 ev = ev || window.event;
|
|
360 var key = ev.keyCode ? ev.keyCode : ev.which;
|
|
361 switch (key)
|
|
362 {
|
|
363 case 37:
|
|
364 case 65:
|
|
365 // left
|
|
366 mgalNavigateTo(mgalPrevURL);
|
|
367 break;
|
|
368
|
|
369 case 39:
|
|
370 case 68:
|
|
371 // right
|
|
372 mgalNavigateTo(mgalNextURL);
|
|
373 break;
|
|
374 }
|
|
375 }
|
|
376
|
|
377 document.onkeypress = mgalProcessKeyPress;
|
|
378 <?
|
|
379 echo
|
|
380 "</script>\n";
|
|
381 }
|
|
382 }
|
|
383 else
|
|
384 {
|
|
385 //
|
|
386 // Gallery mode
|
|
387 //
|
|
388 // - needs sub-modes / handling of order shit
|
|
389 // - Javascript stuff for picture data updates
|
|
390 //
|
|
391 $pageTitle = $galTitlePrefix.mgGetArr($galData, "caption", " - %1", "", "chentities");
|
|
392 cmPrintPageHeader($pageTitle);
|
|
393 echo "<h1>".$pageTitle."</h1>\n";
|
|
394
|
|
395 $naviFlags = mgGetSetting("album_navigation");
|
|
396 if ($naviFlags & GNAV_BREADCRUMBS)
|
|
397 mgPrintBreadCrumbs($galData);
|
|
398
|
|
399 if (isset($galData["header"]) && strlen($galData["header"]) > 0)
|
|
400 echo "<div class=\"albumHeaderText\">".$galData["header"]."</div>\n";
|
|
401
|
|
402 mgPrintTable("albumTable", $galEntries, $galAlbumsIndex, 0, FALSE);
|
|
403 mgPrintTable("imageTable", $galEntries, $galImagesIndex, 0, FALSE);
|
|
404 }
|
|
405
|
|
406 mgPrintPageInfoFooter();
|
|
407 cmPrintPageFooter(TRUE);
|
|
408 ?> |