/usr/local/CPAN/Apache-Action/MyApplication/State.pm
package MyApplication::State;
use strict;
use base 'Apache::Action::State';
# Not a DB object!
sub user {
my ($self) = @_;
unless (exists $self->{User}) {
my $user_id = $self->{Session}->{user_id};
if ($user_id) {
my $user = retrieve Anarres::DesignDB::User($user_id);
if ($user) {
$self->{User} = $user;
}
else {
delete $self->{Session}->{user_id};
}
}
}
return $self->{User};
}
sub set_user {
my ($self, $user) = @_;
if ($user) {
$self->{Session}->{user_id} = $user->id;
$self->{User} = $user;
}
else {
delete $self->{Session}->{user_id};
delete $self->{User};
}
return $self->{User};
}
sub category {
my ($self) = @_;
unless (exists $self->{Category}) {
my $t = $self->{Request}->parms; # Apache::Table;
$self->{Session}->{category_id} = $t->{category}
if exists $t->{category};
my $cat = retrieve Anarres::DesignDB::Category(
$self->{Session}->{category_id}
)
if $self->{Session}->{category_id};
unless ($cat) {
delete $self->{Session}->{category_id};
delete $t->{category};
$cat = retrieve Anarres::DesignDB::Category(1)
}
$self->{Category} = $cat;
$self->{Session}->{RecentCategories}->{$cat->id} = 1;
}
return $self->{Category};
}
sub set_category {
my ($self, $cat) = @_;
$self->{Category} = $cat;
$self->{Session}->{RecentCategories}->{$cat->id} = 1;
$self->{Session}->{category_id} = $cat->id;
return $self->{Category};
}
# etc etc (this came from a real application)
1;