1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
package VNDB::Handler::Producers;
use strict;
use warnings;
use TUWF ':html', ':xml';
use VNDB::Func;
use VNDB::Types;
TUWF::register(
qr{p/([a-z0]|all)} => \&list,
qr{xml/producers\.xml} => \&pxml,
);
sub list {
my($self, $char) = @_;
my $f = $self->formValidate(
{ get => 'p', required => 0, default => 1, template => 'page' },
{ get => 'q', required => 0, default => '' },
);
return $self->resNotFound if $f->{_err};
my($list, $np) = $self->dbProducerGet(
$char ne 'all' ? ( char => $char ) : (),
$f->{q} ? ( search => $f->{q} ) : (),
results => 150,
page => $f->{p}
);
$self->htmlHeader(title => 'Browse producers');
div class => 'mainbox';
h1 'Browse producers';
form action => '/p/all', 'accept-charset' => 'UTF-8', method => 'get';
$self->htmlSearchBox('p', $f->{q});
end;
p class => 'browseopts';
for ('all', 'a'..'z', 0) {
a href => "/p/$_", $_ eq $char ? (class => 'optselected') : (), $_ eq 'all' ? 'ALL' : $_ ? uc $_ : '#';
}
end;
end;
my $pageurl = "/p/$char" . ($f->{q} ? "?q=$f->{q}" : '');
$self->htmlBrowseNavigate($pageurl, $f->{p}, $np, 't');
div class => 'mainbox producerbrowse';
h1 $f->{q} ? 'Search results' : 'Producer list';
if(!@$list) {
p 'No results found';
} else {
# spread the results over 3 equivalent-sized lists
my $perlist = @$list/3 < 1 ? 1 : @$list/3;
for my $c (0..(@$list < 3 ? $#$list : 2)) {
ul;
for ($perlist*$c..($perlist*($c+1))-1) {
li;
cssicon 'lang '.$list->[$_]{lang}, $LANGUAGE{$list->[$_]{lang}};
a href => "/p$list->[$_]{id}", title => $list->[$_]{original}, $list->[$_]{name};
end;
}
end;
}
}
clearfloat;
end 'div';
$self->htmlBrowseNavigate($pageurl, $f->{p}, $np, 'b');
$self->htmlFooter;
}
# peforms a (simple) search and returns the results in XML format
sub pxml {
my $self = shift;
my $f = $self->formValidate(
{ get => 'q', required => 0, maxlength => 500 },
{ get => 'id', required => 0, multi => 1, template => 'id' },
{ get => 'r', required => 0, template => 'uint', min => 1, max => 50, default => 10 },
);
return $self->resNotFound if $f->{_err} || (!$f->{q} && !$f->{id} && !$f->{id}[0]);
my($list, $np) = $self->dbProducerGet(
!$f->{q} ? () : $f->{q} =~ /^p([1-9]\d*)/ ? (id => $1) : (search => $f->{q}, sort => 'search'),
$f->{id} && $f->{id}[0] ? (id => $f->{id}) : (),
results => $f->{r},
page => 1,
);
$self->resHeader('Content-type' => 'text/xml; charset=UTF-8');
xml;
tag 'producers', more => $np ? 'yes' : 'no', query => $f->{q}||'';
for(@$list) {
tag 'item', id => $_->{id}, $_->{name};
}
end;
}
1;
|