Add problem_status, contest_status and a method that updates them
[gruntmaster-data.git] / lib / Gruntmaster / Data / Result / User.pm
CommitLineData
4ed3f8e7
MG
1use utf8;
2package Gruntmaster::Data::Result::User;
3
4# Created by DBIx::Class::Schema::Loader
5# DO NOT MODIFY THE FIRST PART OF THIS FILE
6
7=head1 NAME
8
9Gruntmaster::Data::Result::User
10
11=cut
12
13use strict;
14use warnings;
15
16use base 'DBIx::Class::Core';
17
18=head1 TABLE: C<users>
19
20=cut
21
22__PACKAGE__->table("users");
23
24=head1 ACCESSORS
25
26=head2 id
27
28 data_type: 'text'
29 is_nullable: 0
30
2fec2d56
MG
31=head2 passphrase
32
33 data_type: 'text'
9bb39921 34 is_nullable: 1
2fec2d56
MG
35
36=head2 admin
37
38 data_type: 'boolean'
39 default_value: false
40 is_nullable: 0
41
4ed3f8e7
MG
42=head2 name
43
44 data_type: 'text'
45 is_nullable: 1
46
47=head2 email
48
49 data_type: 'text'
50 is_nullable: 1
51
85d3f015
MG
52=head2 phone
53
54 data_type: 'text'
55 is_nullable: 1
56
4ed3f8e7
MG
57=head2 town
58
59 data_type: 'text'
60 is_nullable: 1
61
62=head2 university
63
64 data_type: 'text'
65 is_nullable: 1
66
67=head2 level
68
69 data_type: 'text'
70 is_nullable: 1
71
72=head2 lastjob
73
74 data_type: 'bigint'
75 is_nullable: 1
76
77=cut
78
79__PACKAGE__->add_columns(
80 "id",
81 { data_type => "text", is_nullable => 0 },
2fec2d56 82 "passphrase",
9bb39921 83 { data_type => "text", is_nullable => 1 },
2fec2d56
MG
84 "admin",
85 { data_type => "boolean", default_value => \"false", is_nullable => 0 },
4ed3f8e7
MG
86 "name",
87 { data_type => "text", is_nullable => 1 },
88 "email",
89 { data_type => "text", is_nullable => 1 },
85d3f015
MG
90 "phone",
91 { data_type => "text", is_nullable => 1 },
4ed3f8e7
MG
92 "town",
93 { data_type => "text", is_nullable => 1 },
94 "university",
95 { data_type => "text", is_nullable => 1 },
96 "level",
97 { data_type => "text", is_nullable => 1 },
98 "lastjob",
99 { data_type => "bigint", is_nullable => 1 },
100);
101
102=head1 PRIMARY KEY
103
104=over 4
105
106=item * L</id>
107
108=back
109
110=cut
111
112__PACKAGE__->set_primary_key("id");
113
114=head1 RELATIONS
115
adb42d4d
MG
116=head2 contest_statuses
117
118Type: has_many
119
120Related object: L<Gruntmaster::Data::Result::ContestStatus>
121
122=cut
123
124__PACKAGE__->has_many(
125 "contest_statuses",
126 "Gruntmaster::Data::Result::ContestStatus",
127 { "foreign.owner" => "self.id" },
128 { cascade_copy => 0, cascade_delete => 0 },
129);
130
4ed3f8e7
MG
131=head2 contests
132
133Type: has_many
134
135Related object: L<Gruntmaster::Data::Result::Contest>
136
137=cut
138
139__PACKAGE__->has_many(
140 "contests",
141 "Gruntmaster::Data::Result::Contest",
142 { "foreign.owner" => "self.id" },
143 { cascade_copy => 0, cascade_delete => 0 },
144);
145
146=head2 jobs
147
148Type: has_many
149
150Related object: L<Gruntmaster::Data::Result::Job>
151
152=cut
153
154__PACKAGE__->has_many(
155 "jobs",
156 "Gruntmaster::Data::Result::Job",
157 { "foreign.owner" => "self.id" },
158 { cascade_copy => 0, cascade_delete => 0 },
159);
160
161=head2 opens
162
163Type: has_many
164
165Related object: L<Gruntmaster::Data::Result::Open>
166
167=cut
168
169__PACKAGE__->has_many(
170 "opens",
171 "Gruntmaster::Data::Result::Open",
172 { "foreign.owner" => "self.id" },
173 { cascade_copy => 0, cascade_delete => 0 },
174);
175
adb42d4d
MG
176=head2 problem_statuses
177
178Type: has_many
179
180Related object: L<Gruntmaster::Data::Result::ProblemStatus>
181
182=cut
183
184__PACKAGE__->has_many(
185 "problem_statuses",
186 "Gruntmaster::Data::Result::ProblemStatus",
187 { "foreign.owner" => "self.id" },
188 { cascade_copy => 0, cascade_delete => 0 },
189);
190
4ed3f8e7
MG
191=head2 problems
192
193Type: has_many
194
195Related object: L<Gruntmaster::Data::Result::Problem>
196
197=cut
198
199__PACKAGE__->has_many(
200 "problems",
201 "Gruntmaster::Data::Result::Problem",
202 { "foreign.owner" => "self.id" },
203 { cascade_copy => 0, cascade_delete => 0 },
204);
205
206
adb42d4d
MG
207# Created by DBIx::Class::Schema::Loader v0.07042 @ 2014-12-11 23:51:27
208# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:JcVHC/n8J+NgJge9LkckYA
4ed3f8e7 209
de625c9b
MG
210use Authen::Passphrase;
211use Authen::Passphrase::BlowfishCrypt;
212
213sub check_passphrase {
214 my ($self, $pw) = @_;
215 Authen::Passphrase->from_rfc2307($self->passphrase)->match($pw)
216}
217
218sub set_passphrase {
219 my ($self, $pw) = @_;
220 $self->update({passphrase => Authen::Passphrase::BlowfishCrypt->new(
221 cost => 10,
222 passphrase => $pw,
223 salt_random => 1,
526b9e80 224 )->as_rfc2307});
de625c9b 225}
4ed3f8e7 226
4ed3f8e7 2271;
4a8747ef
MG
228
229__END__
230
de625c9b
MG
231=head1 METHODS
232
233=head2 check_passphrase(I<$passphrase>)
234
235Returns true if I<$passphrase> is the correct passphrase, false otherwise.
236
237=head2 set_passphrase(I<$passphrase>)
238
239Changes the passphrase to I<$passphrase>.
240
4a8747ef
MG
241=head1 AUTHOR
242
243Marius Gavrilescu E<lt>marius@ieval.roE<gt>
244
245=head1 COPYRIGHT AND LICENSE
246
247Copyright (C) 2014 by Marius Gavrilescu
248
249This library is free software; you can redistribute it and/or modify
250it under the same terms as Perl itself, either Perl version 5.18.1 or,
251at your option, any later version of Perl 5 you may have available.
252
253
254=cut
This page took 0.025749 seconds and 4 git commands to generate.