Dual-license your content for inclusion in The Perl 5 Wiki using this HOWTO, or join us for a chat on irc.freenode.net#PerlNet.

Melbourne Perl Mongers/8th March 2006/Controller AddressBook.pm

From PerlNet

Jump to: navigation, search

Save as lib/InfoAssistant/Controller/AddressBook.pm

Althought it is best to use the create script, make manual changes and use thie as a comparison.

Package InfoAssistant::Controller::AddressBook;
use strict;
use warnings;
use base 'Catalyst::Controller';

sub default : Private {
        my ( $self, $c ) = @_;

        # Forward example
        # XXX Note - this is not working !
        if ($c->request->arguments->[1] =~ /^[a-z]+$/) {
                $c->request->arguments->[0] = $c->request->arguments->[1];
                $c->forward('view');
        }

        # Get address book
        my $ab = $c->model('AddressBook')->ab;
        my %all = ();
        foreach my $key ( scalar(%{$c->request->parameters})
                ? $ab->search(%{$c->request->parameters})
                : $ab->list()
        ) {
                $all{$key} = $ab->entry($key);
        }
        $c->stash('all' => \%all);

        $c->stash('template' => 'address_list.tt');
}

# /addressbook/view/blah
sub view : Local {
        my ($self, $c) = @_;
        my $id = $c->request->arguments->[0];

        my $entry = $c->model('AddressBook')->ab->entry($id);
        $c->stash('id', $id);
        $c->stash('entry', $entry);
        $c->stash('template' => 'address_view.tt');
}

sub add : Local {
        my ($self, $c) = @_;
        $c->stash('template' => 'address_add.tt');
}

sub suggest : Local {
        my ($self, $c) = @_;
        my ($lookup) = keys %{$c->request->parameters};
        my %ret = ();
        my $ab = $c->model('AddressBook')->ab;
        foreach my $key ($ab->search(%{$c->request->parameters})) {
                $ret{$ab->entry($key)->{$lookup}}++;
        }
        $c->res->output(
                $c->prototype->auto_complete_result(
                        [sort keys %ret]
                )
        );
}
Personal tools