File Coverage

blib/lib/Photography/Website/Configure.pm
Criterion Covered Total %
statement 24 115 20.8
branch 0 36 0.0
condition 0 76 0.0
subroutine 8 14 57.1
pod 0 6 0.0
total 32 247 12.9


line stmt bran cond sub pod time code
1             my $DIST = 'Photography-Website';
2             package Photography::Website::Configure;
3             $Photography::Website::Configure::VERSION = '0.25';
4 1     1   3 use warnings;
  1         1  
  1         22  
5 1     1   3 use strict;
  1         1  
  1         18  
6              
7 1     1   645 use DateTime;
  1         89271  
  1         31  
8 1     1   7 use File::Basename qw(basename dirname);
  1         2  
  1         67  
9 1     1   418 use File::ShareDir qw(dist_file);
  1         3844  
  1         52  
10 1     1   389 use File::Spec::Functions qw(catfile);
  1         506  
  1         52  
11 1     1   580 use Config::General qw(ParseConfig);
  1         16473  
  1         69  
12 1     1   443 use String::Random qw(random_regex);
  1         2075  
  1         747  
13              
14             my $CONFIG_FILE = "photog.ini";
15              
16             =head1 NAME
17              
18             Photography::Website::Configure - List of Configuration Options
19              
20             =head1 DESCRIPTION
21              
22             This module contains the configuration logic of Photog! the
23             photography website generator. See L for the documentation
24             about the command-line interface and see L for
25             documentation about the Perl interface.
26              
27             What follows is a comprehensive list of all configuration options
28             currently in use, with a short description of their usage and their
29             default value.
30              
31             =head2 Image variables
32              
33             =over 12
34              
35             =cut
36              
37             sub image {
38 0     0 0   my $source = shift;
39 0           my $parent = shift;
40 0 0         return if not is_image($source);
41 0           my $img = {
42             type => 'image',
43             parent => $parent,
44             };
45 0           my $filename = basename($source);
46              
47             =item B
48              
49             The image filename without the extension. Is used by the default
50             template as the caption when the image is viewed fullscreen.
51              
52             =cut
53              
54 0           $img->{name} = strip_suffix($filename);
55              
56             =item B
57              
58             The absolute URL of the fullscreen image. This is used to calculate
59             the image destination. Templates should use the relative URL (see next).
60              
61             =cut
62              
63 0           $img->{url} = $parent->{url} . $filename;
64              
65             =item B
66              
67             The relative URL of the full-size image, i.e., the image filename.
68              
69             =cut
70              
71 0           $img->{href} = $filename;
72              
73             =item B
74              
75             The relative URL of the image thumbnail, i.e., C.
76              
77             =cut
78              
79 0           $img->{src} = "thumbnails/$filename";
80              
81             =item B
82              
83             The full path to the original image in the source directory.
84              
85             =cut
86              
87 0           $img->{source} = $source;
88              
89             =item B
90              
91             The full path to the fullscreen image in the destination directory.
92              
93             =cut
94              
95 0           $img->{destination} = catfile($parent->{root}, substr($img->{url}, 1));
96              
97             =item B
98              
99             The path to the image thumbnail.
100              
101             =cut
102              
103 0           $img->{thumbnail} = catfile($parent->{destination}, $img->{src});
104              
105              
106             # These are documented further below
107 0           $img->{watermark} = $parent->{watermark};
108 0           $img->{scale_command} = $parent->{scale_command};
109 0           $img->{watermark_command} = $parent->{watermark_command};
110 0           $img->{thumbnail_command} = $parent->{thumbnail_command};
111 0           return $img;
112             }
113              
114             =back
115              
116             =head2 Album variables
117              
118             There are three types of album configuration variables: static variables,
119             dynamic variables, and inherited variables. Static variables cannot be
120             changed from a configuration file. Dynamic variables can be set in a
121             configuration or they are calculated dynamically. Inherited variables
122             are either set from a configuration file, inherited from the parent,
123             or a default value.
124              
125             =over 12
126              
127             =cut
128              
129             sub album {
130 0     0 0   my $source = shift;
131 0           my $parent = shift; # optional
132 0           my $album = get_config($source);
133              
134             # Special case for root albums
135             # $parent = $album if not $parent;
136              
137             # Implementation of the "oblivious" feature
138 0 0         if (not $album) {
139 0 0         return if $parent->{oblivious};
140 0           $album = {};
141             }
142              
143             # Implementation of the "private" feature
144 0 0 0       if (defined $album->{slug} and $album->{slug} eq 'private') {
145 0           $album->{slug} = random_regex('[1-9][a-hjkp-z2-9]{15}');
146 0           $album->{unlisted} = "true";
147 0           save_config($album, $source);
148             }
149              
150 0           $album->{type} = 'album';
151 0           $album->{parent} = $parent;
152              
153             # Instantiate the global allfiles hash
154 0 0         if (not $parent) {
155 0           $album->{allfiles} = {};
156             }
157             else {
158 0           $album->{allfiles} = $parent->{allfiles};
159             }
160              
161              
162             =item I
163              
164             =item B
165              
166             The source directory.
167              
168             =cut
169              
170 0           $album->{source} = $source;
171              
172             =item B
173              
174             Path to the album's C
175              
176             =cut
177              
178 0           $album->{config} = catfile($source, $CONFIG_FILE);
179              
180             =item B
181              
182             Directory basename of the album, currently only used for debugging
183             purposes.
184              
185             =cut
186              
187 0           $album->{name} = basename($source);
188              
189             =item B
190              
191             The destination directory of the root album. This is always inherited
192             from the parent album.
193              
194             =cut
195              
196 0 0         if ($parent) {
197 0           $album->{root} = $parent->{root};
198             }
199             else {
200 0   0       $album->{root} = $album->{destination} || die
201             "ERROR: Destination not specified";
202             }
203              
204             =item I
205              
206             =item B
207              
208             A slug is the part of the URL that identifies an album,
209             e.g. C. The default value is the directory's
210             name, so be careful not to use characters in directory names that are
211             not allowed in URLs, like spaces. Or, simply override this value to
212             choose an appropriate URL for each album.
213              
214             The special value of "private" will cause a random slug to be
215             generated consisting of 16 alphanumeric characters, which will
216             immediately be saved to the C file, replacing the
217             original "private" value. In addition, the variable B
218             will be set to true. Use this for creating private albums that
219             are only accessible to people who know the secret URL.
220              
221             =cut
222              
223 0   0       $album->{slug} ||= basename($source);
224              
225             =item B
226              
227             Calculated by concatenating the parent url and the album slug.
228             Overriding this option allows the source directories to be differently
229             organized than the destination directories.
230              
231             =cut
232              
233 0 0 0       $album->{url} ||= $parent->{url}
234             ? "$parent->{url}$album->{slug}/"
235             : "/";
236              
237             =item B
238              
239             The album link for use inside the tag in the template.
240              
241             =cut
242              
243 0   0       $album->{href} ||= $album->{slug} . '/';
244              
245             =item B
246              
247             The album preview image for use inside the tag in the
248             template. Width and height will also be made available to the
249             template.
250              
251             =cut
252              
253 0   0       $album->{src} ||= $album->{href} . "thumbnails/all.jpg";
254              
255             =item B
256              
257             The album's destination directory. Calculated by concatenating the
258             root destination directory and the album's URL. Although possible,
259             overriding this option for subdirectories is not recommended. Use the
260             B option instead (see above).
261              
262             =cut
263              
264 0   0       $album->{destination} ||=
265             catfile($album->{root}, substr($album->{url}, 1));
266              
267             =item B
268              
269             Path to the album preview image, for use a thumbnail in the parent
270             album. Defaults to the file C in subdirectory C
271             inside the destination directory.
272              
273             =cut
274              
275 0   0       $album->{thumbnail} ||=
276             catfile($album->{destination}, "thumbnails/all.jpg");
277              
278             =item B
279              
280             Path to to the album's C.
281              
282             =cut
283              
284 0   0       $album->{index} ||=
285             catfile($album->{destination}, "index.html");
286              
287             =item B
288              
289             Boolean value that specifies whether this album will be diplayed on
290             the parent album. The album page remains accessible to people who know
291             the URL. Defaults to C. Not inherited, always defaults to
292             false (except for the root album)
293              
294             =cut
295              
296 0   0       $album->{unlisted} ||= (not defined $album->{parent});
297              
298             =item B
299              
300             The ISO 8601 date and optionally time of this album. This is used when
301             sorting items chronologically. The default is the directory's
302             modification date. The default template never actually shows dates,
303             but it can also be used to determine the placement of album previews
304             on a page.
305              
306             =cut
307              
308 0   0       $album->{date} ||= DateTime->from_epoch(
309             epoch => (stat $source)[9]);
310              
311             =item B
312              
313             A list of filenames that will not be automatically deleted at the
314             album's destination directory. Defaults to ('index.html',
315             'thumbnails'). The root album will also get the directory 'static'
316             appended to this list.
317              
318             =cut
319              
320 0 0         if (not exists $album->{protected}) {
321 0           $album->{protected} = [];
322             }
323 0           push @{$album->{protected}}, ('index.html', 'thumbnails');
  0            
324              
325             =item I
326              
327             =item B </td> </tr> <tr> <td class="h" > <a name="328">328</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="329">329</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> In the default template, the title appears at the top of the page. The </td> </tr> <tr> <td class="h" > <a name="330">330</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> default value is "My Photography Website". Please set this to </td> </tr> <tr> <td class="h" > <a name="331">331</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> something more catchy. You can also override it for specific albums to </td> </tr> <tr> <td class="h" > <a name="332">332</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> show an album name. </td> </tr> <tr> <td class="h" > <a name="333">333</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="334">334</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="335">335</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="336">336</a> </td> <td class="c0" > 0 </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--branch.html#336-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> if (not exists $album->{title}) { </td> </tr> <tr> <td class="h" > <a name="337">337</a> </td> <td class="c0" > 0 </td> <td >   </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--condition.html#337-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $album->{title} = $parent->{title} </td> </tr> <tr> <td class="h" > <a name="338">338</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> || "My Photography Website"; </td> </tr> <tr> <td class="h" > <a name="339">339</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="340">340</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="341">341</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item B<copyright> </td> </tr> <tr> <td class="h" > <a name="342">342</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="343">343</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> In the default template, the copyright notice appears at the </td> </tr> <tr> <td class="h" > <a name="344">344</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> bottom of the page. The default value is empty. </td> </tr> <tr> <td class="h" > <a name="345">345</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="346">346</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="347">347</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="348">348</a> </td> <td class="c0" > 0 </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--branch.html#348-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> if (not exists $album->{copyright}) { </td> </tr> <tr> <td class="h" > <a name="349">349</a> </td> <td class="c0" > 0 </td> <td >   </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--condition.html#349-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $album->{copyright} = $parent->{copyright} || ''; </td> </tr> <tr> <td class="h" > <a name="350">350</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="351">351</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="352">352</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item B<template> </td> </tr> <tr> <td class="h" > <a name="353">353</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="354">354</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Path to an HTML file containing directives in L<Template::Toolkit> </td> </tr> <tr> <td class="h" > <a name="355">355</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> syntax. The current album will be made available as the variable </td> </tr> <tr> <td class="h" > <a name="356">356</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> "album", from where all additional configuration variables can be </td> </tr> <tr> <td class="h" > <a name="357">357</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> accessed using dot syntax, i.e., album.title, album.copyright etc. You </td> </tr> <tr> <td class="h" > <a name="358">358</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> can even make up your own configuration variables in C<photog.ini> and </td> </tr> <tr> <td class="h" > <a name="359">359</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> have them available in the template. The default is the file </td> </tr> <tr> <td class="h" > <a name="360">360</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> C<template.html> that's included with Photog!. Use it as a starting </td> </tr> <tr> <td class="h" > <a name="361">361</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> point to create your own template! </td> </tr> <tr> <td class="h" > <a name="362">362</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="363">363</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="364">364</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="365">365</a> </td> <td class="c0" > 0 </td> <td >   </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--condition.html#365-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $album->{template} ||= $parent->{template} </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--condition.html#-2"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="366">366</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> || dist_file($DIST, 'template.html'); </td> </tr> <tr> <td class="h" > <a name="367">367</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="368">368</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item B<preview> </td> </tr> <tr> <td class="h" > <a name="369">369</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="370">370</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> An album preview is a thumbnail image of the album that contains a </td> </tr> <tr> <td class="h" > <a name="371">371</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> number of smaller images. This option sets the number of preview </td> </tr> <tr> <td class="h" > <a name="372">372</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> images for an album. Allowed values are 3, 6, and 9. The default is 9. </td> </tr> <tr> <td class="h" > <a name="373">373</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="374">374</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="375">375</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="376">376</a> </td> <td class="c0" > 0 </td> <td >   </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--condition.html#376-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $album->{preview} ||= $parent->{preview} || 9; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--condition.html#-2"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="377">377</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="378">378</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item B<watermark> </td> </tr> <tr> <td class="h" > <a name="379">379</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="380">380</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> The path to a transparent PNG file that will be used to watermark all </td> </tr> <tr> <td class="h" > <a name="381">381</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> fullscreen images in an album. The command C<photog-watermark> is </td> </tr> <tr> <td class="h" > <a name="382">382</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> called to do the actual watermarking, and it currently places the </td> </tr> <tr> <td class="h" > <a name="383">383</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> watermark in the lower right corner. The default is to not watermark </td> </tr> <tr> <td class="h" > <a name="384">384</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> website images. </td> </tr> <tr> <td class="h" > <a name="385">385</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="386">386</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="387">387</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="388">388</a> </td> <td class="c0" > 0 </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--branch.html#388-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> if (not exists $album->{watermark}) { </td> </tr> <tr> <td class="h" > <a name="389">389</a> </td> <td class="c0" > 0 </td> <td >   </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--condition.html#389-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $album->{watermark} = $parent->{watermark} || ''; </td> </tr> <tr> <td class="h" > <a name="390">390</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="391">391</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="392">392</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item B<sort> </td> </tr> <tr> <td class="h" > <a name="393">393</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="394">394</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Photos are always sorted according to EXIF date. Possible sort orders </td> </tr> <tr> <td class="h" > <a name="395">395</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> are: C<ascending> and C<descending>. The default value is </td> </tr> <tr> <td class="h" > <a name="396">396</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> C<descending>. </td> </tr> <tr> <td class="h" > <a name="397">397</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="398">398</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="399">399</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="400">400</a> </td> <td class="c0" > 0 </td> <td >   </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--condition.html#400-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $album->{sort} ||= $parent->{sort} || 'descending'; </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--condition.html#-2"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="401">401</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="402">402</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item B<fullscreen> </td> </tr> <tr> <td class="h" > <a name="403">403</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="404">404</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A boolean to indicate whether large images should be made </td> </tr> <tr> <td class="h" > <a name="405">405</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> available. Use this to prevent access to full-size images by clients </td> </tr> <tr> <td class="h" > <a name="406">406</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> who haven't paid yet. Defaults to true. </td> </tr> <tr> <td class="h" > <a name="407">407</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="408">408</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="409">409</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="410">410</a> </td> <td class="c0" > 0 </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--branch.html#410-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> if (not exists $album->{fullscreen}) { </td> </tr> <tr> <td class="h" > <a name="411">411</a> </td> <td class="c0" > 0 </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--branch.html#411-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> if ($album->{parent}) { </td> </tr> <tr> <td class="h" > <a name="412">412</a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $album->{fullscreen} = $parent->{fullscreen}; </td> </tr> <tr> <td class="h" > <a name="413">413</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="414">414</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> else { </td> </tr> <tr> <td class="h" > <a name="415">415</a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $album->{fullscreen} = 1; </td> </tr> <tr> <td class="h" > <a name="416">416</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="417">417</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="418">418</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="419">419</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item B<oblivious> </td> </tr> <tr> <td class="h" > <a name="420">420</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="421">421</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> A boolean value that specifies whether C<photog.ini> </td> </tr> <tr> <td class="h" > <a name="422">422</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> files are required. If true, Photog! will only consider a </td> </tr> <tr> <td class="h" > <a name="423">423</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> subdirectory an album when it contains a C<photog.ini> file, even if </td> </tr> <tr> <td class="h" > <a name="424">424</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> the file is empty. Defaults to false. </td> </tr> <tr> <td class="h" > <a name="425">425</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="426">426</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="427">427</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="428">428</a> </td> <td class="c0" > 0 </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--branch.html#428-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> if (not exists $album->{oblivious}) { </td> </tr> <tr> <td class="h" > <a name="429">429</a> </td> <td class="c0" > 0 </td> <td >   </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--condition.html#429-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $album->{oblivious} = $parent->{oblivious} || 0; </td> </tr> <tr> <td class="h" > <a name="430">430</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="431">431</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="432">432</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item B<scale_command> </td> </tr> <tr> <td class="h" > <a name="433">433</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="434">434</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> The path to a command to convert an original image to a fullscreen </td> </tr> <tr> <td class="h" > <a name="435">435</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> web-image. The command will receive 2 arguments: The source image path </td> </tr> <tr> <td class="h" > <a name="436">436</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> and the destination image path. The default is C<photog-scale>, which </td> </tr> <tr> <td class="h" > <a name="437">437</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> will scale an image to measure 2160 pixels vertically. </td> </tr> <tr> <td class="h" > <a name="438">438</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="439">439</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="440">440</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="441">441</a> </td> <td class="c0" > 0 </td> <td >   </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--condition.html#441-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $album->{scale_command} ||= $parent->{scale_command} </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--condition.html#-2"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="442">442</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> || 'photog-scale'; </td> </tr> <tr> <td class="h" > <a name="443">443</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="444">444</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item B<watermark_command> </td> </tr> <tr> <td class="h" > <a name="445">445</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="446">446</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> The command that does the image watermarking. The command will receive </td> </tr> <tr> <td class="h" > <a name="447">447</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 3 arguments: Paths to the source image, the watermark image, and the </td> </tr> <tr> <td class="h" > <a name="448">448</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> destination image. The default command is C<photog-watermark> which </td> </tr> <tr> <td class="h" > <a name="449">449</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> places the watermark file in the lower-right corner. </td> </tr> <tr> <td class="h" > <a name="450">450</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="451">451</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="452">452</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="453">453</a> </td> <td class="c0" > 0 </td> <td >   </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--condition.html#453-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $album->{watermark_command} ||= $parent->{watermark_command} </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--condition.html#-2"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="454">454</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> || 'photog-watermark'; </td> </tr> <tr> <td class="h" > <a name="455">455</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="456">456</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item B<thumbnail_command> </td> </tr> <tr> <td class="h" > <a name="457">457</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="458">458</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> The path to a command that generates image thumbnails. The command </td> </tr> <tr> <td class="h" > <a name="459">459</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> receives 2 arguments: The source image path and the thumbnail </td> </tr> <tr> <td class="h" > <a name="460">460</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> destination path. The default is C<photog-thumbnail>, which performs </td> </tr> <tr> <td class="h" > <a name="461">461</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> quite a bit of sharpening to make sure that the thumbnail doesn't </td> </tr> <tr> <td class="h" > <a name="462">462</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> become blurry after resizing. </td> </tr> <tr> <td class="h" > <a name="463">463</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="464">464</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="465">465</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="466">466</a> </td> <td class="c0" > 0 </td> <td >   </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--condition.html#466-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $album->{thumbnail_command} ||= $parent->{thumbnail_command} </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--condition.html#-2"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="467">467</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> || 'photog-thumbnail'; </td> </tr> <tr> <td class="h" > <a name="468">468</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="469">469</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =item B<preview_command> </td> </tr> <tr> <td class="h" > <a name="470">470</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="471">471</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> The command that generates album previews by compositing multiple </td> </tr> <tr> <td class="h" > <a name="472">472</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> thumbnails together. It will receive paths to the source images' </td> </tr> <tr> <td class="h" > <a name="473">473</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> thumbnails as its arguments, and the path to a destination file as its </td> </tr> <tr> <td class="h" > <a name="474">474</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> final argument. Currently, Photog! will only request previews of 3, 6, </td> </tr> <tr> <td class="h" > <a name="475">475</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> or 9 images. </td> </tr> <tr> <td class="h" > <a name="476">476</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="477">477</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="478">478</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="479">479</a> </td> <td class="c0" > 0 </td> <td >   </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--condition.html#479-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $album->{preview_command} ||= $parent->{preview_command} </td> </tr> <tr> <td class="h" > <a > </a> </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--condition.html#-2"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="480">480</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> || 'photog-preview'; </td> </tr> <tr> <td class="h" > <a name="481">481</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="482">482</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =back </td> </tr> <tr> <td class="h" > <a name="483">483</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="484">484</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="485">485</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="486">486</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> # Finally, inherit all remaining parent values </td> </tr> <tr> <td class="h" > <a name="487">487</a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> for (keys %$parent) { </td> </tr> <tr> <td class="h" > <a name="488">488</a> </td> <td class="c0" > 0 </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--branch.html#488-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> next if $_ eq 'items'; </td> </tr> <tr> <td class="h" > <a name="489">489</a> </td> <td class="c0" > 0 </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--branch.html#489-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> next if exists $album->{$_}; </td> </tr> <tr> <td class="h" > <a name="490">490</a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $album->{$_} = $parent->{$_}; </td> </tr> <tr> <td class="h" > <a name="491">491</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="492">492</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="493">493</a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> return $album; </td> </tr> <tr> <td class="h" > <a name="494">494</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="495">495</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="496">496</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub get_config { </td> </tr> <tr> <td class="h" > <a name="497">497</a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--subroutine.html#497-1"> 0 </a> </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--subroutine.html#497-1"> 0 </a> </td> <td >   </td> <td class="s"> my $directory = shift; </td> </tr> <tr> <td class="h" > <a name="498">498</a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my $file = catfile($directory, $CONFIG_FILE); </td> </tr> <tr> <td class="h" > <a name="499">499</a> </td> <td class="c0" > 0 </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--branch.html#499-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> if (-f $file) { </td> </tr> <tr> <td class="h" > <a name="500">500</a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> return { ParseConfig(-ConfigFile=>$file, -AutoTrue=>1) }; </td> </tr> <tr> <td class="h" > <a name="501">501</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="502">502</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> else { </td> </tr> <tr> <td class="h" > <a name="503">503</a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> return 0; </td> </tr> <tr> <td class="h" > <a name="504">504</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="505">505</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="506">506</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="507">507</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub save_config { </td> </tr> <tr> <td class="h" > <a name="508">508</a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--subroutine.html#508-1"> 0 </a> </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--subroutine.html#508-1"> 0 </a> </td> <td >   </td> <td class="s"> my $config = shift; </td> </tr> <tr> <td class="h" > <a name="509">509</a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my $directory = shift; </td> </tr> <tr> <td class="h" > <a name="510">510</a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> my $file = catfile($directory ,$CONFIG_FILE); </td> </tr> <tr> <td class="h" > <a name="511">511</a> </td> <td class="c0" > 0 </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--branch.html#511-1"> 0 </a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> open(my $fh, '>', $file) </td> </tr> <tr> <td class="h" > <a name="512">512</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> or die "ERROR: Can't open '$file' for writing\n"; </td> </tr> <tr> <td class="h" > <a name="513">513</a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> for my $key (keys %{$config}) { </td> </tr> <tr> <td class="h" > <a > </a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="514">514</a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> say $fh "$key = $config->{$key}"; </td> </tr> <tr> <td class="h" > <a name="515">515</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="516">516</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="517">517</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="518">518</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub is_image { </td> </tr> <tr> <td class="h" > <a name="519">519</a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--subroutine.html#519-1"> 0 </a> </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--subroutine.html#519-1"> 0 </a> </td> <td >   </td> <td class="s"> return shift =~ /\.jpg$/; </td> </tr> <tr> <td class="h" > <a name="520">520</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="521">521</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="522">522</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> sub strip_suffix { </td> </tr> <tr> <td class="h" > <a name="523">523</a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--subroutine.html#523-1"> 0 </a> </td> <td class="c0" > <a href="blib-lib-Photography-Website-Configure-pm--subroutine.html#523-1"> 0 </a> </td> <td >   </td> <td class="s"> my $file = shift; </td> </tr> <tr> <td class="h" > <a name="524">524</a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> $file =~ s/\.[^\.]+$//; </td> </tr> <tr> <td class="h" > <a name="525">525</a> </td> <td class="c0" > 0 </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> return $file; </td> </tr> <tr> <td class="h" > <a name="526">526</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> } </td> </tr> <tr> <td class="h" > <a name="527">527</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="528">528</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head1 SEE ALSO </td> </tr> <tr> <td class="h" > <a name="529">529</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="530">530</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> L<photog>, L<Photography::Website> </td> </tr> <tr> <td class="h" > <a name="531">531</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="532">532</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =head1 AUTHOR </td> </tr> <tr> <td class="h" > <a name="533">533</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="534">534</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> Photog! was written by Jaap Joris Vens <jj@rtts.eu>, and is used to </td> </tr> <tr> <td class="h" > <a name="535">535</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> create his personal photography website at L<http://www.superformosa.nl/> </td> </tr> <tr> <td class="h" > <a name="536">536</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="537">537</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> =cut </td> </tr> <tr> <td class="h" > <a name="538">538</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s">   </td> </tr> <tr> <td class="h" > <a name="539">539</a> </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td >   </td> <td class="s"> 1; </td> </tr> </table> </body> </html>