/[A3C]/lib/A3C/Model/User.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /lib/A3C/Model/User.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 42 - (show annotations)
Sun Mar 30 16:58:21 2008 UTC (14 years, 6 months ago) by dpavlin
File size: 7905 byte(s)
- move all LDAP-related logic in A3C::LDAP
- remove logic to link User and Organization
- ldap search base is now configurable in config.yml
1 use strict;
2 use warnings;
3
4 package A3C::Model::User;
5 use Jifty::DBI::Schema;
6
7 use utf8;
8
9 use A3C::Record schema {
10
11 column uid =>
12 label is ('uid'),
13 is indexed,
14 is mandatory,
15 is distinct;
16
17 column hrEduPersonUniqueID =>
18 label is ('hrEduPersonUniqueID'),
19 is indexed,
20 is distinct,
21 is mandatory;
22
23 column cn =>
24 label is _('Ime i prezime'),
25 is mandatory;
26
27 column sn =>
28 label is _('Prezime'),
29 is mandatory;
30
31 column givenName =>
32 label is _('Ime'),
33 is mandatory;
34
35 column mail =>
36 type is 'text',
37 is mandatory,
38 label is _('Email address'), default is '',
39 is immutable,
40 is distinct;
41
42 column password =>
43 is unreadable,
44 label is _('Password'),
45 type is 'varchar',
46 hints is _('Your password should be at least six characters'),
47 render_as 'password',
48 # filters are 'Jifty::DBI::Filter::SaltHash',
49 is mandatory;
50
51 column telephoneNumber =>
52 type is 'text',
53 label is _('Telefonski broj'),
54 hint is '+385 xx yyyyyy';
55
56 column hrEduPersonExtensionNumber =>
57 label is _('Lokalni telefonski broj');
58
59 column mobile =>
60 label is _('Broj mobilnog telefona');
61
62 column facsimileTelephoneNumber =>
63 label is _('Fax broj');
64
65 column hrEduPersonUniqueNumber =>
66 # is mandatory,
67 label is _('Unique number');
68
69 column hrEduPersonDateOfBirth =>
70 type is 'date',
71 render as 'date',
72 label is _('Datum rođenja'),
73 filters are 'Jifty::DBI::Filter::Date';
74
75 column hrEduPersonGender =>
76 label is _('Spol');
77
78 column jpegPhoto =>
79 label is _('Slika');
80
81 column userCertificate =>
82 label is _('Ceritifikat');
83
84 column labeledURI =>
85 label is _('URI adresa');
86
87 column wtAdminType =>
88 label is _('Tip administratora'),
89 valid are [ '', 'AS', 'AI', 'AR', 'AHU' ];
90
91 column hrEduPersonHomeOrg =>
92 label is _('Oznaka matične ustanove'),
93 hint is 'CARNet',
94 is mandatory;
95
96 column hrEduPersonProfessionalStatus =>
97 label is _('Stručni status'),
98 valid are [
99 '',
100 'NKV',
101 'PKV',
102 'KV',
103 'VKV',
104 'SSS',
105 'VS',
106 'VSS',
107 'VŠS',
108 'MR',
109 'DR',
110 ],
111 default is '';
112
113 column hrEduPersonAcademicStatus =>
114 label is _('Zvanje'),
115 valid are [
116 '',
117 'knjižničar',
118 'viši knjižničar',
119 'korepetitor',
120 'viši korepetitor',
121 'lektor',
122 'viši lektor',
123 'stručni suradnik',
124 'asistent visoke škole',
125 'profesor visoke škole',
126 'mlađi asistent',
127 'znanstveni novak',
128 'znanstveni asistent',
129 'znanstveni suradnik',
130 'predavač',
131 'viši predavač',
132 'asistent',
133 'asistent - predavač',
134 'viši asistent',
135 'docent',
136 'izvanredni profesor',
137 'redoviti profesor',
138 'znanstveni savjetnik',
139 'viši znanstveni suradnik',
140 ],
141 default is '';
142
143 column hrEduPersonScienceArea =>
144 label is _('Područje znanosti'),
145 valid are [
146 '',
147 'Tehničke znanosti',
148 'Prirodne znanosti',
149 'Humanističke znanosti',
150 'Društvene znanosti',
151 'Biotehničke znanosti',
152 'Biomedicina i zdravstvo',
153 ],
154 default is '';
155
156 # column organization =>
157 # refers_to A3C::Model::Organization by 'id',
158 # is mandatory;
159
160 column hrEduPersonAffiliation =>
161 label is _('Povezanost s ustanovom'),
162 is mandatory,
163 valid are [
164 'učenik',
165 'student',
166 'djelatnik',
167 'vanjski suradnik',
168 'korisnik usluge',
169 'gost',
170 ],
171 default is 'korisnik usluge';
172
173 column hrEduPersonPrimaryAffiliation =>
174 label is _('Temeljna povezanost s ustanovom');
175 is mandatory,
176 valid are [
177 'učenik',
178 'student',
179 'djelatnik',
180 'vanjski suradnik',
181 'korisnik usluge',
182 'gost',
183 ],
184 default is 'korisnik usluge';
185
186 column hrEduPersonStudentCategory =>
187 label is 'Vrsta studenta',
188 valid are [
189 '',
190 'osnovnoškolac',
191 'srednjoškolac',
192 'student stručnog studija',
193 'preddiplomac',
194 'postdiplomac',
195 'dodiplomac',
196 'pauzira godinu',
197 'prekid studija',
198 ],
199 default is '';
200
201 column hrEduPersonExpireDate =>
202 label is _('Datum isteka temeljne povezanosti'),
203 type is 'date',
204 render as 'date',
205 is mandatory,
206 filters are 'Jifty::DBI::Filter::Date';
207
208 column hrEduPersonTitle =>
209 label is 'Položaj u ustanovi',
210 valid are [ # FIXME reorder
211 '',
212 'dekan',
213 'direktor',
214 'pomoćnik ravnatelja',
215 'predstojnik zavoda',
216 'pročelnik katedre',
217 'pročelnik odsjeka',
218 'pročelnik sveučilišnog odjela',
219 'prodekan',
220 'prorektor',
221 'ravnatelj',
222 'rektor',
223 'voditelj laboratorija',
224 'voditelj odjela',
225 'voditelj organizacijske jedini',
226 'voditelj projekta',
227 'zamjenik pročelnika sveučilišn',
228 'zamjenik ravnatelja',
229 ],
230 default is '';
231
232 column hrEduPersonRole =>
233 label is 'Uloga u ustanovi',
234 valid are [
235 '',
236 'administrator imenika',
237 'CARNet koordinator',
238 'CARNet sistem inženjer',
239 'ICT koordinator',
240 'ISVU koordinator',
241 'kontakt za sigurnosna pitanja',
242 'MS koordinator',
243 'MATICA operater',
244 'MATICA urednik',
245 ],
246 default is '';
247
248 column hrEduPersonStaffCategory =>
249 label is 'Vrsta posla u ustanovi',
250 valid are [
251 'administrativno osoblje',
252 'ICT podrška',
253 'istraživači',
254 'nastavno osoblje',
255 'osoblje knjižnice',
256 'tehničko osoblje',
257 ];
258
259 column hrEduPersonGroupMember =>
260 label is 'Pripadnost grupi',
261 hint is 'skolskagodina::razred';
262
263 column ou =>
264 label is _('Organizacijska jedinica');
265
266 column roomNumber =>
267 label is _('Broj sobe');
268
269 column homePostalAddress =>
270 label is _('Kućna poštanska adresa'),
271 render as 'textarea';
272
273 column homePhone =>
274 label is _('Kućni telefonski broj');
275
276 column hrEduPersonCommURI =>
277 label is _('Desktop uređaj');
278
279 column hrEduPersonPrivacy =>
280 label is _('Oznaka privatnosti');
281
282 column loginShell =>
283 label is _('shell');
284
285 column uidNumber =>
286 label is _('uid'),
287 type is 'int';
288
289 column gidNumber =>
290 label is _('gid');
291 type is 'int';
292
293 column homeDirectory =>
294 label is _('home');
295
296 };
297
298 # we don't use following mixing because it wants to send notificaitons on e-mail address change
299 #use Jifty::Plugin::User::Mixin::Model::User;
300 use Jifty::Plugin::Authentication::Password::Mixin::Model::User;
301 #use Jifty::Plugin::OpenID::Mixin::Model::User;
302 use Jifty::Plugin::ActorMetadata::Mixin::Model::ActorMetadata; # created_by, created_on, updated_on
303
304 # Your model-specific methods go here.
305
306 =head2 before_create
307
308 Implement virtual columns, for now put mail from ldap into email row
309
310 =cut
311
312 =for later
313
314 sub before_create {
315 my ($self, $attr) = @_;
316 if ( ! $attr->{'email'} ) {
317 warn "push mail to email";
318 $attr->{'email'} = $attr->{'mail'};
319 }
320 }
321
322 =cut
323
324 =head2 email
325
326 Accessor for compatibility with Jifty mixins
327
328 =cut
329
330 sub email {
331 my $self = shift;
332 return $self->__value('mail');
333 }
334
335 sub email_confirmed { 1 };
336
337 =head2 validate_telephoneNumber
338
339 =cut
340
341 sub validate_telephoneNumber {
342 my ( $self, $value ) = @_;
343
344 return ( 0, _('Telephone number invalid') ) if $value !~ m/^(\+?385)?[\d\s-]+$/;
345
346 return ( 1, 'OK' );
347 }
348
349 =head2 hrEduPersonUniqueNumber
350
351 Check if JMBG is valid
352
353 =cut
354
355 sub validate_hrEduPersonUniqueNumber {
356 my ( $self, $value ) = @_;
357
358 if ( $value =~ m/^JMBG:\s+(\d+)$/ ) {
359
360 my $jmbg = $1;
361
362 return ( 0, _('JMBG must have 13 digits') ) unless length($jmbg) == 13;
363
364 sub digit_at {
365 my ($jmbg,$pos) = @_;
366 return ord(substr($jmbg,$pos,1)) - ord('0');
367 }
368
369 my $sum;
370 my $fact = 7;
371
372 foreach my $i ( 0 .. 11 ) {
373 my $c = digit_at( $jmbg, $i );
374 $sum += $c * $fact;
375 # warn "## $c * $fact => $sum\n";
376 $fact--;
377 $fact = 7 if $fact == 1;
378 }
379
380 my $ost = $sum % 11;
381 $ost = 11 - $ost if $ost > 1;
382
383 return ( 0, _("JMBG is invalid") ) if $ost != digit_at( $jmbg, 12 );
384 }
385
386 return ( 1, 'OK' );
387 }
388
389 =head2 canonicalize_hrEduPersonExpireDate
390
391 Support NONE as 2042-12-30
392
393 =cut
394
395 sub canonicalize_hrEduPersonExpireDate {
396 my ( $self, $value ) = @_;
397
398 if ( lc($value) eq 'none' ) {
399 $self->log->warn("fixed hrEduPersonExpireDate");
400 $value = '2042-12-30';
401 }
402
403 return $value;
404 }
405
406 =head2 current_user_can
407
408 =cut
409
410 sub current_user_can {
411 # FIXME no security for now :-)
412 return 1;
413 }
414
415 1;
416

  ViewVC Help
Powered by ViewVC 1.1.26