summaryrefslogtreecommitdiff
path: root/lib/VNDB/Handler/Affiliates.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/VNDB/Handler/Affiliates.pm')
-rw-r--r--lib/VNDB/Handler/Affiliates.pm146
1 files changed, 146 insertions, 0 deletions
diff --git a/lib/VNDB/Handler/Affiliates.pm b/lib/VNDB/Handler/Affiliates.pm
new file mode 100644
index 00000000..679d6ee2
--- /dev/null
+++ b/lib/VNDB/Handler/Affiliates.pm
@@ -0,0 +1,146 @@
+
+package VNDB::Handler::Affiliates;
+
+use strict;
+use warnings;
+use TUWF ':html';
+use VNDB::Func;
+
+
+TUWF::register(
+ qr{affiliates} => \&list,
+ qr{affiliates/del/([1-9]\d*)} => \&linkdel,
+ qr{affiliates/edit/([1-9]\d*)} => \&edit,
+ qr{affiliates/new} => \&edit,
+);
+
+
+sub list {
+ my $self = shift;
+
+ return $self->htmlDenied if !$self->authCan('affiliate');
+ my $f = $self->formValidate(
+ { get => 'a', required => 0, enum => [ 0..$#{$self->{affiliates}} ] },
+ { get => 'h', required => 0, default => 0, enum => [ -1..1 ] },
+ { get => 'o', required => 0, default => 'a', enum => ['a', 'd'] },
+ { get => 's', required => 0, default => 'rel', enum => [qw|rel prio url lastfetch|] },
+ );
+ return $self->resNotFound if $f->{_err};
+
+ $self->htmlHeader(title => 'Affiliate administration interface');
+ div class => 'mainbox';
+ h1 'Affiliate administration interface';
+ p class => 'browseopts';
+ a defined($f->{a}) && $f->{a} == $_ ? (class => 'optselected') : (), href => "/affiliates?a=$_", $self->{affiliates}[$_]{name}
+ for (grep $self->{affiliates}[$_], 0..$#{$self->{affiliates}});
+ end;
+ if(defined $f->{a}) {
+ p class => 'browseopts';
+ a $f->{h} == -1 ? (class => 'optselected') : (), href => "/affiliates?a=$f->{a};h=-1",'all';
+ a $f->{h} == 1 ? (class => 'optselected') : (), href => "/affiliates?a=$f->{a};h=1", 'hidden';
+ a $f->{h} == 0 ? (class => 'optselected') : (), href => "/affiliates?a=$f->{a};h=0", 'non-hidden';
+ end;
+ }
+ end;
+
+ if(defined $f->{a}) {
+ my $list = $self->dbAffiliateGet(
+ affiliate => $f->{a}, hidden => $f->{h}==-1?undef:$f->{h},
+ what => 'release',
+ sort => $f->{s}, reverse => $f->{o} eq 'd'
+ );
+ $self->htmlBrowse(
+ items => $list,
+ nextpage => 0,
+ options => {p=>0, %$f},
+ pageurl => '',
+ sorturl => "/affiliates?a=$f->{a};h=$f->{h}",
+ header => [
+ ['Release', 'rel'],
+ ['Version'],
+ ['Hid'],
+ ['Prio', 'prio'],
+ ['Price / Lastfetch', 'lastfetch'],
+ ['', 'url' ]
+ ],
+ row => sub {
+ my($s, $n, $l) = @_;
+ Tr $n % 2 ? (class => 'odd') : ();
+ td class => 'tc1'; a href => "/r$l->{rid}", shorten $l->{title}, 50; end;
+ td class => 'tc2', $l->{version} || '<default>';
+ td class => 'tc3', $l->{hidden} ? 'YES' : 'no';
+ td class => 'tc4', $l->{priority};
+ td class => 'tc5', sprintf '%s / %s', $l->{price}, $l->{lastfetch} ? $self->{l10n}->age($l->{lastfetch}) : '-';
+ td class => 'tc6';
+ a href => $l->{url}, 'link';
+ txt ' | ';
+ a href => "/affiliates/edit/$l->{id}", 'edit';
+ txt ' | ';
+ a href => "/affiliates/del/$l->{id}?formcode=".$self->authGetCode("/affiliates/del/$l->{id}"), 'del';
+ end;
+ end;
+ },
+ );
+ }
+ $self->htmlFooter;
+}
+
+
+sub linkdel {
+ my($self, $id) = @_;
+ return $self->htmlDenied if !$self->authCan('affiliate');
+ return if !$self->authCheckCode;
+ my $l = $self->dbAffiliateGet(id => $id)->[0];
+ return $self->resNotFound if !$l;
+ $self->dbAffiliateDel($id);
+ $self->resRedirect("/affiliates?a=$l->{affiliate}");
+}
+
+
+sub edit {
+ my($self, $id) = @_;
+ return $self->htmlDenied if !$self->authCan('affiliate');
+
+ my $r = $id && $self->dbAffiliateGet(id => $id)->[0];
+ return $self->resNotFound if $id && !$r;
+
+ my $frm;
+ if($self->reqMethod eq 'POST') {
+ return if !$self->authCheckCode;
+ $frm = $self->formValidate(
+ { post => 'rid', required => 1, template => 'int' },
+ { post => 'priority', required => 0, default => 0, template => 'int' },
+ { post => 'hidden', required => 0, default => 0, enum => [0,1] },
+ { post => 'affiliate',required => 1, enum => [0..$#{$self->{affiliates}}] },
+ { post => 'url', required => 1 },
+ { post => 'version', required => 0, default => '' },
+ );
+ if(!$frm->{_err}) {
+ $self->dbAffiliateEdit($id, %$frm) if $id;
+ $self->dbAffiliateAdd(%$frm) if !$id;
+ return $self->resRedirect("/affiliates?a=$frm->{affiliate}", 'post');
+ }
+ }
+
+ if($id) {
+ $frm->{$_} = $r->{$_} for(qw|rid priority hidden affiliate url version|);
+ } else {
+ $frm->{rid} = $self->reqGet('rid');
+ }
+
+ $self->htmlHeader(title => 'Edit affiliate link');
+ $self->htmlForm({ frm => $frm, action => $id ? "/affiliates/edit/$id" : '/affiliates/new' }, 'blah' => [ 'Edit affiliate link',
+ [ input => short => 'rid', name => 'Release ID', width => 100 ],
+ [ input => short => 'priority', name => 'Priority', width => 50 ],
+ [ check => short => 'hidden', name => 'Hidden' ],
+ [ select => short => 'affiliate', name => 'Affiliate', options => [ map
+ [ $_, $self->{affiliates}[$_]{name} ], grep $self->{affiliates}[$_], 0..$#{$self->{affiliates}} ] ],
+ [ input => short => 'url', name => 'URL', width => 400 ],
+ [ input => short => 'version', name => 'Version', width => 400 ],
+ ]);
+ $self->htmlFooter;
+}
+
+
+1;
+