/[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/A3C/Model/User.pm revision 11 by dpavlin, Thu Mar 13 14:22:53 2008 UTC lib/A3C/Model/Person.pm revision 70 by dpavlin, Thu Apr 10 20:26:45 2008 UTC
# Line 1  Line 1 
1  use strict;  use strict;
2  use warnings;  use warnings;
3    
4  package A3C::Model::User;  package A3C::Model::Person;
5  use Jifty::DBI::Schema;  use Jifty::DBI::Schema;
6    
7    use utf8;
8    
9  use A3C::Record schema {  use A3C::Record schema {
10    
11          column name =>          column uid =>
12                  type is 'text',                  label is ('uid'),
13                  label is _('Ime'),                  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;                  is mandatory;
22    
23          column cn =>          column cn =>
24                  label is _('Ime'),                  label is _('Ime i prezime'),
25                  type is 'virtual';                  is mandatory;
26    
27          column sn =>          column sn =>
                 type is 'virtual',  
28                  label is _('Prezime'),                  label is _('Prezime'),
29                  is mandatory;                  is mandatory;
30    
31          column givenName =>          column givenName =>
                 type is 'virtual',  
32                  label is _('Ime'),                  label is _('Ime'),
33                  is mandatory;                  is mandatory;
34    
35          column email =>          column mail =>
36                  type is 'text',                  type is 'text',
37                  is mandatory,                  is mandatory,
38                  label is _('Email address'), default is '', is immutable, is distinct;                  label is _('Email address'), default is '',
39                    is immutable,
40          column email_confirmed =>                  is distinct;
                 label is _('Email address confirmed?'),  
                 type is 'boolean';  
41    
42          column password =>          column password =>
43                  is unreadable,                  is unreadable,
# Line 59  use A3C::Record schema { Line 64  use A3C::Record schema {
64    
65          column hrEduPersonUniqueNumber =>          column hrEduPersonUniqueNumber =>
66  #               is mandatory,  #               is mandatory,
67                  label is _('JMBG');                  label is _('Unique number');
68    
69          column hrEduPersonDateOfBirth =>          column hrEduPersonDateOfBirth =>
70                  type is 'date',                  type is 'date',
71                  label is _('Datum rođenja');                  render as 'date',
72                    label is _('Datum rođenja'),
73                    filters are 'Jifty::DBI::Filter::Date';
74    
75          column hrEduPersonGender =>          column hrEduPersonGender =>
76                  label is _('Spol');                  label is _('Spol');
# Line 79  use A3C::Record schema { Line 86  use A3C::Record schema {
86                    
87          column wtAdminType =>          column wtAdminType =>
88                  label is _('Tip administratora'),                  label is _('Tip administratora'),
89                  available are qw( AS AI AR AHU );                  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 =>          column hrEduPersonProfessionalStatus =>
97                  label is _('Stručni status'),                  label is _('Stručni status'),
98                  available are qw( DR KV MR NKV PKV SSS VKV VS VSS VŠS );                  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 =>          column hrEduPersonAcademicStatus =>
114                  label is _('Zvanje'),                  label is _('Zvanje'),
115                  available are [                  valid are [
116                          'asistent',                          '',
                         'asistent - predavač',  
                         'asistent visoke škole',  
                         'docent',  
                         'izvanredni profesor',  
117                          'knjižničar',                          'knjižničar',
118                            'viši knjižničar',
119                          'korepetitor',                          'korepetitor',
120                            'viši korepetitor',
121                          'lektor',                          'lektor',
122                            'viši lektor',
123                            'stručni suradnik',
124                            'asistent visoke škole',
125                            'profesor visoke škole',
126                          'mlađi asistent',                          'mlađi asistent',
127                            'znanstveni novak',
128                            'znanstveni asistent',
129                            'znanstveni suradnik',
130                          'predavač',                          'predavač',
                         'profesor visoke škole',  
                         'redoviti profesor',  
                         'stručni suradnik',  
                         'viši asistent',  
                         'viši knjižničar',  
                         'viši korepetitor',  
                         'viši lektor',  
131                          'viši predavač',                          'viši predavač',
132                          'viši znanstveni suradnik',                          'asistent',
133                          'znanstveni asistent',                          'asistent - predavač',
134                          'znanstveni novak',                          'viši asistent',
135                            'docent',
136                            'izvanredni profesor',
137                            'redoviti profesor',
138                          'znanstveni savjetnik',                          'znanstveni savjetnik',
139                          'znanstveni suradnik',                          'viši znanstveni suradnik',
140                  ];                  ],
141                    default is '';
142    
143          column hrEduPersonScienceArea =>          column hrEduPersonScienceArea =>
144                  label is _('Područje znanosti'),                  label is _('Područje znanosti'),
145                  available are [                  valid are [
146                            '',
147                          'Tehničke znanosti',                          'Tehničke znanosti',
148                          'Prirodne znanosti',                          'Prirodne znanosti',
149                          'Humanističke znanosti',                          'Humanističke znanosti',
150                          'Društvene znanosti',                          'Društvene znanosti',
151                          'Biotehničke znanosti',                          'Biotehničke znanosti',
152                          'Biomedicina i zdravstvo',                          'Biomedicina i zdravstvo',
153                  ];                  ],
154                    default is '';
155    
156            column 'o';
157            column 'l';
158            column 'postalAddress';
159    
160    #       column organization =>
161    #               refers_to A3C::Model::Organization by 'id',
162    #               is mandatory;
163    
164          column hrEduPersonAffiliation =>          column hrEduPersonAffiliation =>
165                  label is _('Povezanost s ustanovom'),                  label is _('Povezanost s ustanovom'),
166                  is mandatory,                  is mandatory,
167                  available are [                  valid are [
                         'djelatnik',  
                         'gost',  
                         'korisnik usluge',  
                         'student',  
168                          'učenik',                          'učenik',
169                            'student',
170                            'djelatnik',
171                          'vanjski suradnik',                          'vanjski suradnik',
172                  ];                          'korisnik usluge',
173                            'gost',
174                    ],
175                    default is 'korisnik usluge';
176    
177          column hrEduPersonPrimaryAffiliation =>          column hrEduPersonPrimaryAffiliation =>
178                  label is _('Temeljna povezanost s ustanovom');                  label is _('Temeljna povezanost s ustanovom');
179                  is mandatory,                  is mandatory,
180                  available are [                  valid are [
                         'djelatnik',  
                         'gost',  
                         'korisnik usluge',  
                         'student',  
181                          'učenik',                          'učenik',
182                            'student',
183                            'djelatnik',
184                          'vanjski suradnik',                          'vanjski suradnik',
185                  ];                          'korisnik usluge',
186                            'gost',
187                    ],
188                    default is 'korisnik usluge';
189    
190          column hrEduPersonStudentCategory =>          column hrEduPersonStudentCategory =>
191                  label is 'Vrsta studenta',                  label is 'Vrsta studenta',
192                  available are [                  valid are [
193                          'dodiplomac',                          '',
194                          'osnovnoškolac',                          'osnovnoškolac',
                         'pauzira godinu',  
                         'postdiplomac',  
                         'preddiplomac',  
                         'prekid studija',  
195                          'srednjoškolac',                          'srednjoškolac',
196                          'student stručnog studija',                          'student stručnog studija',
197                  ];                          'preddiplomac',
198                            'postdiplomac',
199                            'dodiplomac',
200                            'pauzira godinu',
201                            'prekid studija',
202                    ],
203                    default is '';
204    
205          column hrEduPersonExpireDate =>          column hrEduPersonExpireDate =>
206                  label is _('Datum isteka temeljne povezanosti'),                  label is _('Datum isteka temeljne povezanosti'),
207                  type is 'date',                  type is 'date',
208                  hint is 'dd.mm.gggg',                  render as 'date',
209                  is mandatory,                  is mandatory,
210                    filters are 'Jifty::DBI::Filter::Date';
211    
212          column hrEduPersonTitle =>          column hrEduPersonTitle =>
213                  label is 'Položaj u ustanovi',                  label is 'Položaj u ustanovi',
214                  available are [                  valid are [     # FIXME reorder
215                            '',
216                          'dekan',                          'dekan',
217                          'direktor',                          'direktor',
218                          'pomoćnik ravnatelja',                          'pomoćnik ravnatelja',
# Line 187  use A3C::Record schema { Line 230  use A3C::Record schema {
230                          'voditelj projekta',                          'voditelj projekta',
231                          'zamjenik pročelnika sveučilišn',                          'zamjenik pročelnika sveučilišn',
232                          'zamjenik ravnatelja',                          'zamjenik ravnatelja',
233                  ];                  ],
234                    default is '';
235    
236          column hrEduPersonRole =>          column hrEduPersonRole =>
237                  label is 'Uloga u ustanovi',                  label is 'Uloga u ustanovi',
238                  available are [                  valid are [
239                            '',
240                          'administrator imenika',                          'administrator imenika',
241                          'CARNet koordinator',                          'CARNet koordinator',
242                          'CARNet sistem inženjer',                          'CARNet sistem inženjer',
# Line 201  use A3C::Record schema { Line 246  use A3C::Record schema {
246                          'MS koordinator',                          'MS koordinator',
247                          'MATICA operater',                          'MATICA operater',
248                          'MATICA urednik',                          'MATICA urednik',
249                  ];                  ],
250                    default is '';
251    
252          column hrEduPersonStaffCategory =>          column hrEduPersonStaffCategory =>
253                  label is 'Vrsta posla u ustanovi',                  label is 'Vrsta posla u ustanovi',
254                  available are [                  valid are [
255                          'administrativno osoblje',                          'administrativno osoblje',
256                          'ICT podrška',                          'ICT podrška',
257                          'istraživači',                          'istraživači',
# Line 218  use A3C::Record schema { Line 264  use A3C::Record schema {
264                  label is 'Pripadnost grupi',                  label is 'Pripadnost grupi',
265                  hint is 'skolskagodina::razred';                  hint is 'skolskagodina::razred';
266    
         column o =>  
                 label is _('Naziv matične ustanove'),  
                 is mandatory;  
           
         column hrEduPersonHomeOrg =>  
                 label is _('Oznaka matične ustanove'),  
                 hint is 'CARNet',  
                 is mandatory;  
   
267          column ou =>          column ou =>
268                  label is _('Organizacijska jedinica');                  label is _('Organizacijska jedinica');
269                    
270          column roomNumber =>          column roomNumber =>
271                  label is _('Broj sobe');                  label is _('Broj sobe');
272    
         column postalAddress =>  
                 label is _('Poštanska adresa'),  
                 is mandatory;  
           
         column l =>  
                 label is _('Mjesto'),  
                 hist is 'Zagreb',  
                 is mandatory;  
   
         column postalCode =>  
                 label is _('Poštanski broj'),  
                 hint is 'HR-10000';  
   
         column street =>  
                 label is _('Ulica i kućni broj');  
           
273          column homePostalAddress =>          column homePostalAddress =>
274                  label is _('Kućna poštanska adresa');                  label is _('Kućna poštanska adresa'),
275                    render as 'textarea';
276                    
277          column homePhone =>          column homePhone =>
278                  label is _('Kućni telefonski broj');                  label is _('Kućni telefonski broj');
# Line 261  use A3C::Record schema { Line 283  use A3C::Record schema {
283          column hrEduPersonPrivacy =>          column hrEduPersonPrivacy =>
284                  label is _('Oznaka privatnosti');                  label is _('Oznaka privatnosti');
285    
286            column loginShell =>
287                    label is _('login shell');
288    
289            column uidNumber =>
290                    label is _('uid number'),
291                    type is 'int';
292    
293            column gidNumber =>
294                    label is _('gid number');
295                    type is 'int';
296    
297            column homeDirectory =>
298                    label is _('home directory');
299    
300  };  };
301    
302  use Jifty::Plugin::User::Mixin::Model::User;  # we don't use following mixing because it wants to send notificaitons on e-mail address change
303    #use Jifty::Plugin::User::Mixin::Model::User;
304  use Jifty::Plugin::Authentication::Password::Mixin::Model::User;  use Jifty::Plugin::Authentication::Password::Mixin::Model::User;
305  #use Jifty::Plugin::OpenID::Mixin::Model::User;  #use Jifty::Plugin::OpenID::Mixin::Model::User;
306  use Jifty::Plugin::ActorMetadata::Mixin::Model::ActorMetadata; # created_by, created_on, updated_on  use Jifty::Plugin::ActorMetadata::Mixin::Model::ActorMetadata; # created_by, created_on, updated_on
307    
308  # Your model-specific methods go here.  # Your model-specific methods go here.
309    
310    =head2 before_create
311    
312    Implement virtual columns, for now put mail from ldap into email row
313    
314    =cut
315    
316    =for later
317    
318    sub before_create {
319            my ($self, $attr) = @_;
320            if ( ! $attr->{'email'} ) {
321                    warn "push mail to email";
322                    $attr->{'email'} = $attr->{'mail'};
323            }
324    }
325    
326    =cut
327    
328    =head2 email
329    
330    Accessor for compatibility with Jifty mixins
331    
332    =cut
333    
334    sub email {
335            my $self = shift;
336            return $self->__value('mail');
337    }
338    
339    sub email_confirmed { 1 };
340    
341    =head2 name
342    
343    =cut
344    
345    sub name {
346            my $self = shift;
347            return $self->__value('cn') . ' <' . $self->__value('mail') . '>';
348    }
349    
350  =head2 validate_telephoneNumber  =head2 validate_telephoneNumber
351    
352  =cut  =cut
# Line 282  sub validate_telephoneNumber { Line 359  sub validate_telephoneNumber {
359          return ( 1, 'OK' );          return ( 1, 'OK' );
360  }  }
361    
362  sub current_user_can {  =head2 hrEduPersonUniqueNumber
363          # FIXME no security for now :-)  
364          return 1;  Check if JMBG is valid
365    
366    =cut
367    
368    sub validate_hrEduPersonUniqueNumber {
369            my ( $self, $value ) = @_;
370    
371            if ( $value =~ m/^JMBG:\s+(\d+)$/ ) {
372    
373                    my $jmbg = $1;
374    
375                    return ( 0, _('JMBG must have 13 digits') ) unless length($jmbg) == 13;
376    
377                    sub digit_at {
378                            my ($jmbg,$pos) = @_;
379                            return ord(substr($jmbg,$pos,1)) - ord('0');
380                    }
381    
382                    my $sum;
383                    my $fact = 7;
384    
385                    foreach my $i ( 0 .. 11 ) {
386                            my $c = digit_at( $jmbg, $i );
387                            $sum += $c * $fact;
388    #                       warn "## $c * $fact => $sum\n";
389                            $fact--;
390                            $fact = 7 if $fact == 1;
391                    }
392    
393                    my $ost = $sum % 11;
394                    $ost = 11 - $ost if $ost > 1;
395    
396                    return ( 0, _("JMBG is invalid") ) if $ost != digit_at( $jmbg, 12 );
397            }
398    
399            return ( 1, 'OK' );
400  }  }
401    
402    =head2 canonicalize_hrEduPersonExpireDate
403    
404    Support NONE as 2042-12-30
405    
406    =cut
407    
408    sub canonicalize_hrEduPersonExpireDate {
409            my ( $self, $value ) = @_;
410    
411            if ( lc($value) eq 'none' ) {
412                    $self->log->warn("fixed hrEduPersonExpireDate");
413                    $value = '2042-12-30';
414            }
415    
416            return $value;
417    }
418    
419    use A3C::DefaultACL;
420    
421  1;  1;
422    

Legend:
Removed from v.11  
changed lines
  Added in v.70

  ViewVC Help
Powered by ViewVC 1.1.26