/**
     * Returns a Facebook api instance.
     * 
     * @return Facebook The instance
     */
    public static function getFacebook() {
        if (null === self::$facebook) {
            self::$facebook = new Facebook(array(
                        'appId' => sfConfig::get('app_facebook_appId'),
                        'secret' => sfConfig::get('app_facebook_secret'),
                        'cookie' => sfConfig::get('app_facebook_cookie'),
                    ));
        }

        return self::$facebook;
    }
 /**
  * If a <code>Facebook</code> session if open signout from Facebook
  * then redirect to <code>sfGuardAuthActions</code> signout.
  * Else forward to <code>sfGuardAuthActions</code> signout.
  * 
  * @param sfWebRequest $request 
  */
 public function executeSignout($request) {
   $facebook = kdDoctrineGuardFacebookConnect::getFacebook();
   
   $url = $this->getContext()->getRouting()->generate('sf_guard_signout', array(), true);
   
   if ($facebook->getSession()) {
     $url = $facebook->getLogoutUrl(array (
       'next' => $url
     ));
     
     $this->redirect($url);
   }
   
    $this->forward('sfGuardAuth', 'signout'); 
 }
  /**
   * Executes the filter and chains.
   * 
   * @param sfFilterChain $filterChain 
   */
  public function execute($filterChain) {
    if ($this->isFirstCall() && $this->context->getUser()->isAnonymous()) {
      $facebook = kdDoctrineGuardFacebookConnect::getFacebook();

      $uid = $facebook->getUser();
      try {
        $me = $facebook->api('/me');

        if ($me) {
          $sfGuardUser = kdDoctrineGuardFacebookConnect::updateOrCreateUser($me);

          $this->context->getUser()->signIn($sfGuardUser);
        }
      } catch (FacebookApiException $ex) {
        $this->getContext()->getLogger()->err($ex);
      }
    }

    $filterChain->execute();
  }
  /**
   * Displays the connection form with a Facebook connect button
   */
  public function executeSignin_form()
  {
    $this->facebook = kdDoctrineGuardFacebookConnect::getFacebook();

    parent::executeSignin_form();
  }