/[A3C]/lib/A3C/Model/Person.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

Annotation of /lib/A3C/Model/Person.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 42 - (hide annotations)
Sun Mar 30 16:58:21 2008 UTC (16 years ago) by dpavlin
Original Path: lib/A3C/Model/User.pm
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 dpavlin 2 use strict;
2     use warnings;
3    
4 dpavlin 11 package A3C::Model::User;
5 dpavlin 2 use Jifty::DBI::Schema;
6    
7 dpavlin 14 use utf8;
8    
9 dpavlin 11 use A3C::Record schema {
10 dpavlin 2
11 dpavlin 16 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 dpavlin 18 is distinct,
21 dpavlin 4 is mandatory;
22    
23     column cn =>
24 dpavlin 21 label is _('Ime i prezime'),
25 dpavlin 29 is mandatory;
26 dpavlin 4
27     column sn =>
28     label is _('Prezime'),
29     is mandatory;
30    
31     column givenName =>
32     label is _('Ime'),
33     is mandatory;
34    
35 dpavlin 16 column mail =>
36 dpavlin 4 type is 'text',
37     is mandatory,
38 dpavlin 18 label is _('Email address'), default is '',
39     is immutable,
40     is distinct;
41 dpavlin 4
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 dpavlin 10 # is mandatory,
67 dpavlin 35 label is _('Unique number');
68 dpavlin 4
69     column hrEduPersonDateOfBirth =>
70     type is 'date',
71 dpavlin 15 render as 'date',
72 dpavlin 16 label is _('Datum rođenja'),
73     filters are 'Jifty::DBI::Filter::Date';
74 dpavlin 4
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 dpavlin 15 valid are [ '', 'AS', 'AI', 'AR', 'AHU' ];
90 dpavlin 4
91 dpavlin 42 column hrEduPersonHomeOrg =>
92     label is _('Oznaka matične ustanove'),
93     hint is 'CARNet',
94     is mandatory;
95    
96 dpavlin 4 column hrEduPersonProfessionalStatus =>
97     label is _('Stručni status'),
98 dpavlin 15 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 dpavlin 4
113     column hrEduPersonAcademicStatus =>
114     label is _('Zvanje'),
115 dpavlin 15 valid are [
116     '',
117 dpavlin 4 'knjižničar',
118 dpavlin 15 'viši knjižničar',
119 dpavlin 4 'korepetitor',
120 dpavlin 15 'viši korepetitor',
121 dpavlin 4 'lektor',
122 dpavlin 15 'viši lektor',
123     'stručni suradnik',
124     'asistent visoke škole',
125     'profesor visoke škole',
126 dpavlin 4 'mlađi asistent',
127 dpavlin 15 'znanstveni novak',
128     'znanstveni asistent',
129     'znanstveni suradnik',
130 dpavlin 4 'predavač',
131 dpavlin 15 'viši predavač',
132     'asistent',
133     'asistent - predavač',
134     'viši asistent',
135     'docent',
136     'izvanredni profesor',
137 dpavlin 4 'redoviti profesor',
138 dpavlin 15 'znanstveni savjetnik',
139 dpavlin 4 'viši znanstveni suradnik',
140 dpavlin 15 ],
141     default is '';
142 dpavlin 4
143     column hrEduPersonScienceArea =>
144     label is _('Područje znanosti'),
145 dpavlin 15 valid are [
146     '',
147 dpavlin 4 'Tehničke znanosti',
148     'Prirodne znanosti',
149     'Humanističke znanosti',
150     'Društvene znanosti',
151     'Biotehničke znanosti',
152     'Biomedicina i zdravstvo',
153 dpavlin 15 ],
154     default is '';
155 dpavlin 4
156 dpavlin 42 # column organization =>
157     # refers_to A3C::Model::Organization by 'id',
158     # is mandatory;
159 dpavlin 32
160 dpavlin 4 column hrEduPersonAffiliation =>
161     label is _('Povezanost s ustanovom'),
162     is mandatory,
163 dpavlin 15 valid are [
164     'učenik',
165     'student',
166 dpavlin 4 'djelatnik',
167 dpavlin 15 'vanjski suradnik',
168     'korisnik usluge',
169 dpavlin 4 'gost',
170 dpavlin 15 ],
171     default is 'korisnik usluge';
172 dpavlin 4
173     column hrEduPersonPrimaryAffiliation =>
174     label is _('Temeljna povezanost s ustanovom');
175     is mandatory,
176 dpavlin 15 valid are [
177     'učenik',
178     'student',
179 dpavlin 4 'djelatnik',
180 dpavlin 15 'vanjski suradnik',
181     'korisnik usluge',
182 dpavlin 4 'gost',
183 dpavlin 15 ],
184     default is 'korisnik usluge';
185 dpavlin 4
186     column hrEduPersonStudentCategory =>
187     label is 'Vrsta studenta',
188 dpavlin 15 valid are [
189     '',
190     'osnovnoškolac',
191     'srednjoškolac',
192     'student stručnog studija',
193     'preddiplomac',
194     'postdiplomac',
195 dpavlin 4 'dodiplomac',
196     'pauzira godinu',
197     'prekid studija',
198 dpavlin 15 ],
199     default is '';
200 dpavlin 4
201     column hrEduPersonExpireDate =>
202     label is _('Datum isteka temeljne povezanosti'),
203     type is 'date',
204 dpavlin 15 render as 'date',
205 dpavlin 4 is mandatory,
206 dpavlin 16 filters are 'Jifty::DBI::Filter::Date';
207 dpavlin 4
208     column hrEduPersonTitle =>
209     label is 'Položaj u ustanovi',
210 dpavlin 15 valid are [ # FIXME reorder
211     '',
212 dpavlin 4 '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 dpavlin 15 ],
230     default is '';
231 dpavlin 4
232     column hrEduPersonRole =>
233     label is 'Uloga u ustanovi',
234 dpavlin 15 valid are [
235     '',
236 dpavlin 4 '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 dpavlin 15 ],
246     default is '';
247 dpavlin 4
248     column hrEduPersonStaffCategory =>
249     label is 'Vrsta posla u ustanovi',
250 dpavlin 15 valid are [
251 dpavlin 4 '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 dpavlin 12 label is _('Kućna poštanska adresa'),
271     render as 'textarea';
272 dpavlin 4
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 dpavlin 23 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 dpavlin 2 };
297    
298 dpavlin 18 # 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 dpavlin 4 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 dpavlin 2 # Your model-specific methods go here.
305    
306 dpavlin 18 =head2 before_create
307 dpavlin 16
308 dpavlin 18 Implement virtual columns, for now put mail from ldap into email row
309 dpavlin 16
310     =cut
311    
312 dpavlin 18 =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 dpavlin 16 }
321    
322 dpavlin 18 =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 dpavlin 4 =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 dpavlin 38 =head2 hrEduPersonUniqueNumber
350 dpavlin 35
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 dpavlin 16 =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 dpavlin 33 if ( lc($value) eq 'none' ) {
399 dpavlin 16 $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 dpavlin 7 sub current_user_can {
411     # FIXME no security for now :-)
412     return 1;
413     }
414    
415 dpavlin 2 1;
416    

  ViewVC Help
Powered by ViewVC 1.1.26