package Rose::HTML::Form::Field::Time::Hours; use strict; use Rose::HTML::Object::Errors qw(:time); use Rose::HTML::Object::Messages qw(:time); use base 'Rose::HTML::Form::Field::Text'; our $VERSION = '0.606'; use Rose::Object::MakeMethods::Generic ( boolean => 'military', ); __PACKAGE__->add_required_html_attrs( { size => 2, }); sub init { my($self) = shift; $self->label_id(FIELD_LABEL_HOUR); $self->SUPER::init(@_); } sub validate { my($self) = shift; my $ok = $self->SUPER::validate(@_); return $ok unless($ok); my $value = $self->internal_value; unless($value =~ /^\d\d?$/) { $self->add_error_id(TIME_INVALID_HOUR); return 0; } if($self->military) { return 1 if($value >= 0 && $value <= 23); $self->add_error_id(TIME_INVALID_HOUR); return 0; } else { return 1 if($value >= 0 && $value <= 12); $self->add_error_id(TIME_INVALID_HOUR); return 0; } return 1; } if(__PACKAGE__->localizer->auto_load_messages) { __PACKAGE__->localizer->load_all_messages; } use utf8; # The __DATA__ section contains UTF-8 text 1; __DATA__ [% LOCALE en %] TIME_INVALID_HOUR = "Invalid hour." FIELD_LABEL_HOUR = "Hour" FIELD_ERROR_LABEL_HOUR = "hour" [% LOCALE de %] TIME_INVALID_HOUR = "Ungültige Stunde." FIELD_LABEL_HOUR = "Stunde" FIELD_ERROR_LABEL_HOUR = "Stunde" [% LOCALE fr %] TIME_INVALID_HOUR = "Heure invalide." FIELD_LABEL_HOUR = "Heure" FIELD_ERROR_LABEL_HOUR = "heure" [% LOCALE bg %] TIME_INVALID_HOUR = "Невалиден час." FIELD_LABEL_HOUR = "Час" FIELD_ERROR_LABEL_HOUR = "час" __END__ =head1 NAME Rose::HTML::Form::Field::Time::Hours - Text field that only accepts valid hours. =head1 SYNOPSIS $field = Rose::HTML::Form::Field::Time::Hours->new( label => 'Hours', name => 'hrs'); $field->input_value(99); $field->validate; # 0 $field->input_value(20); $field->validate; # 0 $field->military(1); $field->validate; # 1 print $field->html; ... =head1 DESCRIPTION L is a subclass of L that only accepts valid hours. It supports normal (0-12) and military (0-23) time. The behavior is toggled via the L object method. Leading zeros are optional. =head1 OBJECT METHODS =over 4 =item B Get or set the boolean flag that indicates whether or not the field will accept "military time." If true, the hours 0-23 are valid. If false, only 0-12 are valid. =back =head1 AUTHOR John C. Siracusa (siracusa@gmail.com) =head1 LICENSE Copyright (c) 2010 by John C. Siracusa. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.