1 # Simple Photo Gallery: Web Interface
2 # (c) 2003--2012 Martin Mares <mj@ucw.cz>
4 package UCW::Gallery::Web;
16 'i' => { 'var' => \$show_img, 'check' => '\d+' },
17 'a' => { 'var' => \$want_archive },
21 print "<p style='color:red'>Bad luck, the script is broken. Sorry.\n<p>$_[0]\n";
22 print "</body></html>\n";
26 my ($self, $key) = @_;
27 return $self->{gal}->get($key);
31 my ($self, $key) = @_;
32 return $self->{gal}->try_get($key);
36 my ($self, $key) = @_;
37 my $val = $self->get($key);
38 if (ref $val eq 'CODE') {
45 # For use by extras hooks
51 # For use by extras hooks: return true if we are showing an image page, false for index page
52 sub showing_image($) {
54 return $show_img ne "";
59 my $title = $self->get('Title');
60 my $hextras = $self->extras('WebHeadExtras');
61 my $theme_hextras = $self->theme_head_extras;
63 Content-Type: text/html
65 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
67 $hextras$theme_hextras<title>$title</title>
71 $UCW::CGI::ErrorHandler::error_hook = \&error;
73 # WebTopExtras are evaluated separately, since they can override the error hook
74 print $self->extras('WebTopExtras');
79 print $self->extras('WebBotExtras'), "</body></html>\n";
85 if ($show_img < 1 || $show_img > $self->{num_photos}) {
86 UCW::CGI::http_error('404 No such photo');
90 my $meta = $self->{meta};
91 my $id = $meta->{sequence}->[$show_img-1];
92 my $m = $meta->{photo}->{$id} or die;
95 $self->show_links(($show_img > 1 ? ("?i=".($show_img-1)) : ""),
97 ($show_img < $self->{num_photos} ? ("?i=".($show_img+1)) : ""));
99 my $t = UCW::CGI::html_escape($m->{title});
102 print "<h1>$t</h1>\n" if $t ne "";
103 my $img = $self->get('PhotoUrlPrefix') . $self->{gal}->photo_file_name($m, $id);
104 print "<p class=large><img src='$img' width=$w height=$h alt='$t'>\n";
109 sub show_pre_thumbs($) {
113 sub show_post_thumbs($) {
121 $self->show_links($self->get('BackURL'), $self->get('ParentURL'), $self->get('FwdURL'));
122 print "<h1>", $self->get('Title'), "</h1>\n";
123 my $subtitle = $self->get('SubTitle');
124 print "<h2>$subtitle</h2>\n" if $subtitle ne "";
125 $self->show_pre_thumbs;
127 my $meta = $self->{meta};
128 for my $idx (1..$self->{num_photos}) {
129 my $id = $meta->{sequence}->[$idx-1];
130 my $m = $meta->{photo}->{$id};
132 if ($self->get('WebImageSubpages')) {
133 $click_url = "?i=$idx";
135 $click_url = $self->get('PhotoUrlPrefix') . $self->{gal}->photo_file_name($m, $id);
137 $self->show_thumb($meta, $id, $click_url);
140 $self->show_post_thumbs;
146 binmode STDOUT, ':utf8';
147 UCW::CGI::parse_args(\%args);
148 $self->{meta} = $self->{gal}->read_meta(File::Spec->catfile($self->get('CacheDir'), 'cache.meta'));
149 $self->{num_photos} = scalar @{$self->{meta}->{sequence}};
152 require UCW::Gallery::Archive;
153 UCW::Gallery::Archive::send_archive($self->{gal}, $self->{meta});
154 } elsif ($show_img ne "") {
162 my ($class, $gal) = @_;
163 my $self = { gal => $gal };
167 # Extras are either strings or functions called with the current gallery object as parameter
172 # Used by the theming logic
173 WebThemeCSS => undef,
175 # 1 if thumbnail link to sub-pages with images, 0 if they link directly to image files
176 WebImageSubpages => 1,
178 # If enabled, calling the CGI with a=zip produces a ZIP archive with all photos.
179 WebAllowArchives => 1,