App-Office-Contacts
view release on metacpan or search on metacpan
lib/App/Office/Contacts/View/Base.pm view on Meta::CPAN
package App::Office::Contacts::View::Base;
use strict;
use utf8;
use warnings;
use warnings qw(FATAL utf8); # Fatalize encoding glitches.
use DateTime;
use Lingua::ENG::Inflect 'PL';
use Moo;
use Text::Xslate 'mark_raw';
extends 'App::Office::Contacts::Database::Base';
has view =>
(
default => sub{return ''},
is => 'ro',
#isa => 'App::Office::Contacts::View',
required => 1,
);
my $email_phone_count = 4;
our $VERSION = '2.04';
# -----------------------------------------------
sub build_email_menus
{
my($self, $prefix, $email_araref) = @_;
$email_araref = [sort{$$a{email}{address} cmp $$b{email}{address} } grep{$$_{email}{address} } @$email_araref];
$self -> db -> logger -> log(debug => 'View::Base.build_email_menus');
my($email_type) = $self -> get_menu_data('email_address_types');
my($default);
my(@email_type_menu);
for my $i (1 .. $email_phone_count)
{
$default = ($i - 1) <= $#$email_araref ? $$email_araref[$i - 1]{email}{type_id} : 1;
push @email_type_menu, $self -> build_menu("${prefix}_email_address_type_id_$i", $email_type, $default);
}
return $self -> db -> templater -> render
(
'email.phone.tx',
{
list =>
[
map
{
{
id => "${prefix}_email_address_$_",
prompt => "Email $_",
type_menu => mark_raw($email_type_menu[$_ - 1]),
value => $$email_araref[$_ - 1]{email}{address},
}
} 1 .. $email_phone_count
],
}
);
lib/App/Office/Contacts/View/Base.pm view on Meta::CPAN
sub build_phone_menus
{
my($self, $prefix, $phone_araref) = @_;
$phone_araref = [sort{$$a{phone}{number} cmp $$b{phone}{number} } grep{$$_{phone}{number} } @$phone_araref];
$self -> db -> logger -> log(debug => "View::Base.build_phone_menus($prefix)");
my($phone_type) = $self -> get_menu_data('phone_number_types');
my($default);
my(@phone_type_menu);
for my $i (1 .. $email_phone_count)
{
$default = ($i - 1) <= $#$phone_araref ? $$phone_araref[$i - 1]{phone}{type_id} : 1;
push @phone_type_menu, $self -> build_menu("${prefix}_phone_number_type_id_$i", $phone_type, $default);
}
return $self -> db -> templater -> render
(
'email.phone.tx',
{
list =>
[
map
{
{
id => "${prefix}_phone_number_$_",
prompt => "Phone $_",
type_menu => mark_raw($phone_type_menu[$_ - 1]),
value => $$phone_araref[$_ - 1]{phone}{number},
}
} 1 .. $email_phone_count
],
}
);
} # End of build_phone_menus.
# -----------------------------------------------
sub build_simple_menu
{
my($self, $prefix, $subject, $default) = @_;
$default ||= 1;
$prefix = length($prefix) > 0 ? "${prefix}_" : '';
$self -> db -> logger -> log(debug => "View::Base.build_simple_menu($prefix, $subject, $default)");
return $self -> build_menu("${prefix}${subject}_id", $self -> get_menu_data(PL($subject) ), $default);
} # End of build_simple_menu.
# -----------------------------------------------
sub format_timestamp
{
my($self, $timestamp) = @_;
my(@field) = split(/[- :.]/, $timestamp);
my($datestamp) = DateTime -> new
(
year => $field[0],
month => $field[1],
day => $field[2],
hour => $field[3],
minute => $field[4],
second => $field[5],
);
return $datestamp -> strftime('%A, %e %B %Y %I:%M:%S %P');
} # End of format_timestamp.
# -----------------------------------------------
sub get_menu_data
{
my($self, $table) = @_;
$self -> db -> logger -> log(debug => "View::Base.get_menu_data($table)");
my($result) = $self -> db -> simple -> query("select name, id from $table order by name")
|| die $self -> db -> simple -> error;
my(%data) = $result -> map;
# Since we don't use utf8 in menus, so we don't need to call decode('utf-8', ...).
return [map{ {key => $data{$_}, value => $_} } sort keys %data];
} # End of get_menu_data.
# --------------------------------------------------
1;
=head1 NAME
App::Office::Contacts::View::Base - A web-based contacts manager
=head1 Synopsis
See L<App::Office::Contacts/Synopsis>.
=head1 Description
L<App::Office::Contacts> implements a utf8-aware, web-based, private and group contacts manager.
=head1 Distributions
See L<App::Office::Contacts/Distributions>.
=head1 Installation
See L<App::Office::Contacts/Installation>.
=head1 Object attributes
Each instance of this class is a L<Moo>-based object with these attributes:
=over 4
( run in 0.593 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )