summaryrefslogtreecommitdiff
path: root/lib/VNDB
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2011-02-27 09:59:03 +0100
committerYorhel <git@yorhel.nl>2011-02-27 09:59:03 +0100
commit4582a5dce7c0793fe64806d4cba5ab9d386ea878 (patch)
treefab8a5eab8a6fc416e43d1ca0ea5f85d114d9528 /lib/VNDB
parent77f6ce0bb06e0496fbcc98656b82108d62c6aeef (diff)
chardb: Allow specifying the order of trait groups +'sexual' trait flag
The sexual flag isn't used yet.
Diffstat (limited to 'lib/VNDB')
-rw-r--r--lib/VNDB/DB/Chars.pm3
-rw-r--r--lib/VNDB/DB/Traits.pm14
-rw-r--r--lib/VNDB/Handler/Chars.pm14
-rw-r--r--lib/VNDB/Handler/Traits.pm15
4 files changed, 31 insertions, 15 deletions
diff --git a/lib/VNDB/DB/Chars.pm b/lib/VNDB/DB/Chars.pm
index 03771132..a1ceb13b 100644
--- a/lib/VNDB/DB/Chars.pm
+++ b/lib/VNDB/DB/Chars.pm
@@ -61,7 +61,8 @@ sub dbCharGet {
FROM chars_traits ct
JOIN traits t ON t.id = ct.tid
LEFT JOIN traits tg ON tg.id = t."group"
- WHERE cid IN(!l)|, [ keys %r ]
+ WHERE cid IN(!l)
+ ORDER BY tg."order", t.name|, [ keys %r ]
)});
}
diff --git a/lib/VNDB/DB/Traits.pm b/lib/VNDB/DB/Traits.pm
index 0ee83f10..15779391 100644
--- a/lib/VNDB/DB/Traits.pm
+++ b/lib/VNDB/DB/Traits.pm
@@ -15,7 +15,7 @@ our @EXPORT = qw|dbTraitGet dbTraitEdit dbTraitAdd|;
# Options: id what results page sort reverse
# what: parents childs(n) addedby
-# sort: id name groupname added items
+# sort: id name name added items
sub dbTraitGet {
my $self = shift;
my %o = (
@@ -38,8 +38,8 @@ sub dbTraitGet {
);
my @select = (
- qw|t.id t.meta t.name t.description t.state t.alias t."group" t.c_items|,
- 'tg.name AS groupname', q|extract('epoch' from t.added) as added|,
+ qw|t.id t.meta t.name t.description t.state t.alias t."group" t."order" t.sexual t.c_items|,
+ 'tg.name AS groupname', 'tg."order" AS grouporder', q|extract('epoch' from t.added) as added|,
$o{what} =~ /addedby/ ? ('t.addedby', 'u.username') : (),
);
my @join = $o{what} =~ /addedby/ ? 'JOIN users u ON u.id = t.addedby' : ();
@@ -48,7 +48,7 @@ sub dbTraitGet {
my $order = sprintf {
id => 't.id %s',
name => 't.name %s',
- groupname => 'tg.name %s NULLS FIRST, t.name %1$s',
+ group => 'tg."order" %s, t.name %1$s',
added => 't.added %s',
items => 't.c_items %s',
}->{ $o{sort}||'id' }, $o{reverse} ? 'DESC' : 'ASC';
@@ -80,7 +80,7 @@ sub dbTraitEdit {
$self->dbExec('UPDATE traits !H WHERE id = ?', {
$o{upddate} ? ('added = NOW()' => 1) : (),
- map exists($o{$_}) ? ("\"$_\" = ?" => $o{$_}) : (), qw|name meta description state alias group|
+ map exists($o{$_}) ? ("\"$_\" = ?" => $o{$_}) : (), qw|name meta description state alias group order sexual|
}, $id);
if($o{parents}) {
$self->dbExec('DELETE FROM traits_parents WHERE trait = ?', $id);
@@ -93,8 +93,8 @@ sub dbTraitEdit {
# returns the id of the new trait
sub dbTraitAdd {
my($self, %o) = @_;
- my $id = $self->dbRow('INSERT INTO traits (name, meta, description, state, alias, "group", addedby) VALUES (!l, ?) RETURNING id',
- [ map $o{$_}, qw|name meta description state alias group| ], $o{addedby}||$self->authInfo->{id}
+ my $id = $self->dbRow('INSERT INTO traits (name, meta, description, state, alias, "group", "order", sexual, addedby) VALUES (!l, ?) RETURNING id',
+ [ map $o{$_}, qw|name meta description state alias group order sexual| ], $o{addedby}||$self->authInfo->{id}
)->{id};
$self->dbExec('INSERT INTO traits_parents (trait, parent) VALUES (?, ?)', $id, $_) for(@{$o{parents}});
return $id;
diff --git a/lib/VNDB/Handler/Chars.pm b/lib/VNDB/Handler/Chars.pm
index ef15b823..64e7df2d 100644
--- a/lib/VNDB/Handler/Chars.pm
+++ b/lib/VNDB/Handler/Chars.pm
@@ -50,8 +50,7 @@ sub page {
}],
[ traits => join => '<br />', split => sub {
map sprintf('%s<a href="/i%d">%s</a> (%s)', $_->{group}?qq|<b class="grayedout">$_->{groupname} / </b> |:'',
- $_->{tid}, $_->{name}, mt("_spoil_$_->{spoil}")),
- sort { ($a->{groupname}||$a->{name}) cmp ($b->{groupname}||$b->{name}) || $a->{name} cmp $b->{name} } @{$_[0]}
+ $_->{tid}, $_->{name}, mt("_spoil_$_->{spoil}")), @{$_[0]}
}],
[ vns => join => '<br />', split => sub {
map sprintf('<a href="/v%d">v%d</a> %s %s (%s)', $_->{vid}, $_->{vid},
@@ -120,10 +119,15 @@ sub page {
}
# traits
- # TODO: handle spoilers!
+ # TODO: handle spoilers and 'sexual' traits
my %groups;
- push @{$groups{ $_->{group}||$_->{tid} }}, $_ for(sort { $a->{name} cmp $b->{name} } @{$r->{traits}});
- for my $g (sort { ($groups{$a}[0]{groupname}||$groups{$a}[0]{name}) cmp ($groups{$a}[0]{groupname}||$groups{$a}[0]{name}) } keys %groups) {
+ my @groups;
+ for (@{$r->{traits}}) {
+ my $g = $_->{group}||$_->{tid};
+ push @groups, $g if !$groups{$g};
+ push @{$groups{ $g }}, $_
+ }
+ for my $g (@groups) {
Tr ++$i % 2 ? (class => 'odd') : ();
td class => 'key'; a href => '/i'.($groups{$g}[0]{group}||$groups{$g}[0]{tid}), $groups{$g}[0]{groupname} || $groups{$g}[0]{name}; end;
td;
diff --git a/lib/VNDB/Handler/Traits.pm b/lib/VNDB/Handler/Traits.pm
index 9d02ec0d..a66721a8 100644
--- a/lib/VNDB/Handler/Traits.pm
+++ b/lib/VNDB/Handler/Traits.pm
@@ -66,6 +66,11 @@ sub traitpage {
lit bb2html $t->{description};
end;
}
+ if($t->{sexual}) {
+ p class => 'center';
+ b mt '_traitp_sexual';
+ end;
+ }
if($t->{alias}) {
p class => 'center';
b mt('_traitp_aliases');
@@ -147,9 +152,11 @@ sub traitedit {
{ post => 'name', required => 1, maxlength => 250, regex => [ qr/^[^,]+$/, 'A comma is not allowed in trait names' ] },
{ post => 'state', required => 0, default => 0, enum => [ 0..2 ] },
{ post => 'meta', required => 0, default => 0 },
+ { post => 'sexual', required => 0, default => 0 },
{ post => 'alias', required => 0, maxlength => 1024, default => '', regex => [ qr/^[^,]+$/s, 'No comma allowed in aliases' ] },
{ post => 'description', required => 0, maxlength => 10240, default => '' },
{ post => 'parents', required => !$self->authCan('tagmod'), default => '', regex => [ qr/^(?:$|(?:[1-9]\d*)(?: +[1-9]\d*)*)$/, 'Parent traits must be a space-separated list of trait IDs' ] },
+ { post => 'order', required => 0, default => 0, template => 'int', min => 0 },
);
my @parents = split /[\t ]+/, $frm->{parents};
my $group = undef;
@@ -168,7 +175,9 @@ sub traitedit {
state => $frm->{state},
description => $frm->{description},
meta => $frm->{meta}?1:0,
+ sexual => $frm->{sexual}?1:0,
alias => $frm->{alias},
+ order => $frm->{order},
parents => \@parents,
group => $group,
);
@@ -187,7 +196,7 @@ sub traitedit {
}
if($t) {
- $frm->{$_} ||= $t->{$_} for (qw|name meta description state alias|);
+ $frm->{$_} ||= $t->{$_} for (qw|name meta sexual description state alias order|);
$frm->{parents} ||= join ' ', map $_->{id}, @{$t->{parents}};
}
@@ -216,10 +225,12 @@ sub traitedit {
map [$_, mt '_traite_frm_state'.$_], 0..2 ] ],
[ checkbox => short => 'meta', name => mt '_traite_frm_meta' ]
) : (),
+ [ checkbox => short => 'sexual', name => mt '_traite_frm_sexual' ],
[ textarea => short => 'alias', name => mt('_traite_frm_alias'), cols => 30, rows => 4 ],
[ textarea => short => 'description', name => mt '_traite_frm_desc' ],
[ input => short => 'parents', name => mt '_traite_frm_parents' ],
[ static => content => mt '_traite_frm_parents_msg' ],
+ [ input => short => 'order', name => mt('_traite_frm_gorder'), width => 50, post => ' '.mt('_traite_frm_gorder_msg') ],
]);
$self->htmlFooter;
@@ -407,7 +418,7 @@ sub traitxml {
$f->{id} && $f->{id}[0] ? (id => $f->{id}) : (),
results => $f->{r},
page => 1,
- sort => 'groupname'
+ sort => 'group'
);
$self->resHeader('Content-type' => 'text/xml; charset=UTF-8');