--- lib/A3C/Model/User.pm 2008/03/18 19:03:53 32 +++ lib/A3C/Model/User.pm 2008/03/30 16:58:21 42 @@ -64,7 +64,7 @@ column hrEduPersonUniqueNumber => # is mandatory, - label is _('JMBG'); + label is _('Unique number'); column hrEduPersonDateOfBirth => type is 'date', @@ -88,6 +88,11 @@ label is _('Tip administratora'), valid are [ '', 'AS', 'AI', 'AR', 'AHU' ]; + column hrEduPersonHomeOrg => + label is _('Oznaka matične ustanove'), + hint is 'CARNet', + is mandatory; + column hrEduPersonProfessionalStatus => label is _('Stručni status'), valid are [ @@ -148,9 +153,9 @@ ], default is ''; - column organization => - refers_to A3C::Model::Organization by 'id', - is mandatory; +# column organization => +# refers_to A3C::Model::Organization by 'id', +# is mandatory; column hrEduPersonAffiliation => label is _('Povezanost s ustanovom'), @@ -341,6 +346,46 @@ return ( 1, 'OK' ); } +=head2 hrEduPersonUniqueNumber + +Check if JMBG is valid + +=cut + +sub validate_hrEduPersonUniqueNumber { + my ( $self, $value ) = @_; + + if ( $value =~ m/^JMBG:\s+(\d+)$/ ) { + + my $jmbg = $1; + + return ( 0, _('JMBG must have 13 digits') ) unless length($jmbg) == 13; + + sub digit_at { + my ($jmbg,$pos) = @_; + return ord(substr($jmbg,$pos,1)) - ord('0'); + } + + my $sum; + my $fact = 7; + + foreach my $i ( 0 .. 11 ) { + my $c = digit_at( $jmbg, $i ); + $sum += $c * $fact; +# warn "## $c * $fact => $sum\n"; + $fact--; + $fact = 7 if $fact == 1; + } + + my $ost = $sum % 11; + $ost = 11 - $ost if $ost > 1; + + return ( 0, _("JMBG is invalid") ) if $ost != digit_at( $jmbg, 12 ); + } + + return ( 1, 'OK' ); +} + =head2 canonicalize_hrEduPersonExpireDate Support NONE as 2042-12-30 @@ -350,7 +395,7 @@ sub canonicalize_hrEduPersonExpireDate { my ( $self, $value ) = @_; - if ( $value eq 'NONE' ) { + if ( lc($value) eq 'none' ) { $self->log->warn("fixed hrEduPersonExpireDate"); $value = '2042-12-30'; }