@@ -3,18 +3,108 @@ use Mojo::Base 'Mojolicious::Controller', -signatures;
33
44sub get_tags ($c ) {
55 $c -> set_template( ' tags/index' );
6+
7+ push @{$c -> stash-> {tags }}, $c -> db-> resultset(' Tag' )-> all;
8+ push @{$c -> stash-> {pending_tags }}, $c -> db-> resultset(' PendingTag' )-> all;
9+
610}
711
812sub post_suggest_tag ($c ) {
913 $c -> set_template( ' tags/index' );
14+
15+ push @{$c -> stash-> {tags }}, $c -> db-> resultset(' Tag' )-> all;
16+ push @{$c -> stash-> {pending_tags }}, $c -> db-> resultset(' PendingTag' )-> all;
17+
18+ my $tag_name = $c -> stash-> {form_tag } = $c -> param(' tag' );
19+ my $is_adult = $c -> stash-> {form_adult } = $c -> param(' is_adult' );
20+
21+ push @{$c -> stash-> {errors }}, " Tag names must start with a letter, and may only contain letters and numbers."
22+ unless $tag_name =~ m / ^[a-zA-Z][a-zA-Z0-9] +$ / ;
23+
24+ return 0 if $c -> stash-> {errors };
25+
26+ my $tag_exists = $c -> db-> resultset(' Tag' )-> search({ name => $tag_name })-> first;
27+ my $pending_tag_exists = $c -> db-> resultset(' PendingTag' )-> search({ name => $tag_name })-> first;
28+
29+ push @{$c -> stash-> {errors }}, " There is already a tag with that name."
30+ if $tag_exists ;
31+
32+ push @{$c -> stash-> {errors }}, " There is already a pending tag with that name."
33+ if $pending_tag_exists ;
34+
35+ return 0 if $c -> stash-> {errors };
36+
37+ $c -> db-> resultset(' PendingTag' )-> create({
38+ name => $tag_name ,
39+ });
40+
41+ $c -> stash-> {success } = 1;
42+ $c -> stash-> {tag_name } = $tag_name ;
1043}
1144
1245sub post_vote_tag ($c ) {
1346 $c -> set_template( ' tags/index' );
47+
48+ push @{$c -> stash-> {tags }}, $c -> db-> resultset(' Tag' )-> all;
49+ push @{$c -> stash-> {pending_tags }}, $c -> db-> resultset(' PendingTag' )-> all;
50+
51+ my $tag_name = $c -> stash-> {form_tag } = $c -> param(' tag' );
52+
53+ my $tag = $c -> db-> resultset(' PendingTag' )-> search({ name => $tag_name })-> first;
54+
55+ push @{$c -> stash-> {errors }}, " No such tag?"
56+ unless $tag ;
57+
58+ return 0 if $c -> stash-> {errors };
59+
60+ # Find out if the user already voted -- in which case we are toggling the vote.
61+ my $vote = $c -> db-> resultset(' TagVote' )-> search( {
62+ tag_id => $tag -> id,
63+ person_id => $c -> stash-> {person }-> id,
64+ });
65+
66+ if ( $vote ) {
67+ $vote -> vote( ! $vote -> vote );
68+ $vote -> update;
69+ } else {
70+ $c -> stash-> {person }-> create_related( ' tag_votes' , {
71+ tag_id => $tag -> id,
72+ });
73+ }
74+
75+ $c -> stash-> {success } = 1;
1476}
1577
1678sub post_delete_tag ($c ) {
1779 $c -> set_template( ' tags/index' );
80+
81+ push @{$c -> stash-> {tags }}, $c -> db-> resultset(' Tag' )-> all;
82+ push @{$c -> stash-> {pending_tags }}, $c -> db-> resultset(' PendingTag' )-> all;
83+
84+ my $tag_name = $c -> stash-> {form_tag } = $c -> param(' tag' );
85+ }
86+
87+ sub post_approve_tag ($c ) {
88+ $c -> set_template( ' tags/index' );
89+
90+ push @{$c -> stash-> {tags }}, $c -> db-> resultset(' Tag' )-> all;
91+ push @{$c -> stash-> {pending_tags }}, $c -> db-> resultset(' PendingTag' )-> all;
92+
93+ my $tag_name = $c -> stash-> {form_tag } = $c -> param(' tag' );
94+
95+ my $tag = $c -> db-> resultset(' PendingTag' )-> search({ name => $tag_name })-> first;
96+
97+ push @{$c -> stash-> {errors }}, " No such tag?"
98+ unless $tag ;
99+
100+ return 0 if $c -> stash-> {errors };
101+
102+ $c -> db-> resultset(' Tag' )-> create({
103+ name => $tag -> name,
104+ is_adult => $tag -> is_adult,
105+ });
106+
107+ $c -> stash-> {success } = 1;
18108}
19109
201101;
0 commit comments