/[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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

lib/CAdmin/Model/User.pm revision 2 by dpavlin, Sun Mar 9 22:39:58 2008 UTC lib/A3C/Model/User.pm revision 42 by dpavlin, Sun Mar 30 16:58:21 2008 UTC
# Line 1  Line 1 
1  use strict;  use strict;
2  use warnings;  use warnings;
3    
4  package CAdmin::Model::User;  package A3C::Model::User;
5  use Jifty::DBI::Schema;  use Jifty::DBI::Schema;
6    
7  use CAdmin::Record schema {  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.  # 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;  1;
416    

Legend:
Removed from v.2  
changed lines
  Added in v.42

  ViewVC Help
Powered by ViewVC 1.1.26