The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Catalyst::Plugin::Facebook;

use strict;
use warnings;

use WWW::Facebook::API;

our $VERSION = '0.1';

# why not
*fb = \&facebook;

sub facebook {
    my ($c) = @_;
    if (! $c->{'facebook'}) {
        $c->{'facebook'} = WWW::Facebook::API->new(
            'desktop' => 0,
            'format' => 'JSON',
            'parse' => 1,
            %{ $c->config->{'facebook'} || { }  },
        );
        $c->{'facebook'}->query( $c->request);
        my $params = $c->facebook->canvas->get_fb_params;
        $c->{'facebook'}->session('uid' => $params->{'user'}, 'key' => $params->{'session_key'}, 'expires' => $params->{'expires'});
    }
    return $c->{'facebook'};
}

1;
__END__

=pod

=head1 NAME

Catalyst::Plugin::Facebook - Build Facebook applications in Catalyst easier

=head1 SYNOPSIS

This module adds quick and easy access to WWW::Facebook::API within
a Catalyst application.

  use Catalyst qw/Facebook/;
  __PACKAGE__->config(
    'facebook' => {
      'api_key' => 'api_key_xyz',
      'secret' => '12345ddd',
    }
  );
  
  sub auto : Private { 
      my ( $self, $c ) = @_;
      if (! $self->can_display($c)) {
          return;
      }
      return 1;
  }
  
  sub can_display {
      my ($self, $c) = @_;
      if (! $c->facebook->canvas->in_fb_canvas()) {
          $c->res->redirect('http://apps.facebook.com/iplaywow/');
          return 0;
      }
      if (! $c->facebook->canvas->get_fb_params->{'added'} ) {
          $c->res->redirect($c->facebook->get_add_url());
          return 0;
      }
      my $user = $c->facebook->canvas->get_fb_params->{'user'};
      if (! $user) {
          $c->res->redirect($c->facebook->get_login_url());
          return 0;
      }
      return 1;
  }

=head1 CONFIGURATION

This package uses the 'facebook' configuration namespace. See the
WWW::Facebook::API module for all of the configuration options available.

The two required configuration options are 'api_key' and 'secret'.

=head1 EXPORT

This package exports the facebook method. The facebook method returns a
full WWW::Facebook::API object.

=head1 BUGS

Please report any bugs or feature requests to
C<bug-catalyst-plugin-facebook at rt.cpan.org>, or through the web interface at
L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Catalyst-Plugin-Facebook>.
I will be notified, and then you'll automatically be notified of progress on
your bug as I make changes.

=head1 SUPPORT

You can find documentation for this module with the perldoc command.

    perldoc Catalyst::Plugin::Facebook

You can also look for information at:

=over 4

=item * AnnoCPAN: Annotated CPAN documentation

L<http://annocpan.org/dist/Catalyst-Plugin-Facebook>

=item * CPAN Ratings

L<http://cpanratings.perl.org/d/Catalyst-Plugin-Facebook>

=item * RT: CPAN's request tracker

L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Catalyst-Plugin-Facebook>

=item * Search CPAN

L<http://search.cpan.org/dist/Catalyst-Plugin-Facebook>

=back

=head1 COPYRIGHT & LICENSE

Copyright 2007 Nick Gerakines, all rights reserved.

This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.

=cut