/**
  * Setup a default Facebook app
  **/
 public function requireDefaultRecords()
 {
     $facebook = FacebookApp::get()->count();
     if (!$facebook) {
         $facebook = FacebookApp::create();
         $facebook->write();
     }
 }
 /**
  * Log the user in via an existing Facebook account connection.
  *
  * @return SS_HTTPResponse
  **/
 public function login()
 {
     $form = $this->Form();
     if ($this->request->getVar("error")) {
         $form->sessionMessage("Unable to obtain access to Facebook.", "bad");
         return $this->renderWith(array("FacebookController", "Page", "Controller"));
     }
     $facebookApp = FacebookApp::get()->first();
     if (!$facebookApp || !$facebookApp->EnableFacebookLogin) {
         $form->sessionMessage("Facebook Login is disabled.", "bad");
     } else {
         if ($member = Member::currentUser()) {
             $member->logOut();
         }
         $facebook = $facebookApp->getFacebook();
         $user = $facebook->getUser();
         if ($user) {
             $member = Member::get()->filter("FacebookUserID", $user)->first();
             if ($member) {
                 $member->logIn();
                 $form->sessionMessage("You have logged in with your Facebook account.", "good");
                 $member->extend("onAfterMemberLogin");
             } else {
                 if ($facebookApp->EnableFacebookSignup) {
                     // Attempt to sign the user up.
                     $member = new Member();
                     // Load the user from Faceook
                     $user_profile = $facebook->api("/me");
                     if ($user_profile) {
                         // Fill in the required fields.
                         $access_token = Session::get("fb_" . $facebookApp->FacebookConsumerKey . "_access_token");
                         $signup = $member->connectFacebookAccount($user_profile, $access_token, $facebookApp->config()->get("required_user_fields"));
                         if ($signup->valid()) {
                             $member->logIn();
                             $form->sessionMessage("You have signed up with your Facbeook account.", "good");
                             // Facebook Hooks
                             $this->extend("onAfterFacebookSignup", $member);
                         } else {
                             $form->sessionMessage($signup->message(), "bad");
                         }
                     } else {
                         $form->sessionMessage("Unable to load your Facbeook account.", "bad");
                     }
                 } else {
                     $form->sessionMessage("Unable to log in with Facebook.", "bad");
                 }
             }
         } else {
             $params = $facebookApp->getLoginUrlParams();
             $url = $facebook->getLoginUrl($params);
             if ($url) {
                 return $this->redirect($url, 302);
             } else {
                 $form->sessionMessage("Unable to login to Facebook at this time.", "bad");
             }
         }
     }
     // Extend Failed facebook login
     if (!Member::currentUser()) {
         $this->extend("onAfterFailedFacebookLogin");
     }
     return $this->renderWith(array("FacebookController", "Page", "Controller"));
 }
 /**
  * Returns the client_* params for OAuth requests.
  *
  * @return array
  */
 protected function getClientParams()
 {
     return ['client_id' => $this->app->getId(), 'client_secret' => $this->app->getSecret()];
 }
 /**
  * Fetches the sites Facebook Applications.
  *
  * @return FacebookApp
  **/
 public function getFacebookApp()
 {
     return FacebookApp::get()->first();
 }
 /**
  * Returns the Facebook App for the current site.
  *
  * @return FacebookApp
  **/
 public function getFacebookApp()
 {
     if ($this->facebook) {
         return $this->facebook;
     }
     return $this->facebook = FacebookApp::get()->first();
 }
 /**
  * Clears out the facebook session keys.
  **/
 public function memberLoggedOut()
 {
     $facebookApp = FacebookApp::get()->first();
     if ($facebookApp) {
         foreach (array('state', 'code', 'access_token', 'user_id') as $key) {
             Session::clear("fb_" . $facebookApp->FacebookConsumerKey . "_" . $key);
         }
     }
 }