/[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 15 by dpavlin, Thu Mar 13 17:33:45 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;  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 61  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                  render as 'date',                  render as 'date',
72                  label is _('Datum rođenja');                  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 84  use A3C::Record schema { Line 88  use A3C::Record schema {
88                  label is _('Tip administratora'),                  label is _('Tip administratora'),
89                  valid are [ '', '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                  valid are [                  valid are [
# Line 144  use A3C::Record schema { Line 153  use A3C::Record schema {
153                  ],                  ],
154                  default is '';                  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,
# Line 190  use A3C::Record schema { Line 207  use A3C::Record schema {
207                  type is 'date',                  type is 'date',
208                  render as 'date',                  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',
# Line 246  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'),  
                 render as 'textarea',  
                 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';                  render as 'textarea';
# Line 291  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 312  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.15  
changed lines
  Added in v.70

  ViewVC Help
Powered by ViewVC 1.1.26