SimpleFbConnectController.php in Simple FB Connect 8.2
File
src/Controller/SimpleFbConnectController.php
View source
<?php
namespace Drupal\simple_fb_connect\Controller;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Routing\TrustedRedirectResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Facebook\FacebookRedirectLoginHelper;
use Drupal\simple_fb_connect\SimpleFbConnectFbManager;
use Drupal\simple_fb_connect\SimpleFbConnectUserManager;
use Drupal\simple_fb_connect\SimpleFbConnectPostLoginManager;
class SimpleFbConnectController extends ControllerBase {
protected $fbManager;
protected $userManager;
protected $postLoginManager;
public function __construct(SimpleFbConnectFbManager $fb_manager, SimpleFbConnectUserManager $user_manager, SimpleFbConnectPostLoginManager $post_login_manager) {
$this->fbManager = $fb_manager;
$this->userManager = $user_manager;
$this->postLoginManager = $post_login_manager;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('simple_fb_connect.fb_manager'), $container
->get('simple_fb_connect.user_manager'), $container
->get('simple_fb_connect.post_login_manager'));
}
public function redirectToFb() {
if (!$this->fbManager
->validateConfig()) {
drupal_set_message(t('Simple FB Connect not configured properly. Contact site administrator.'), 'error');
return $this
->redirect('user.login');
}
if ($post_login_path = $this->postLoginManager
->getPostLoginPathFromRequest()) {
$this->postLoginManager
->savePostLoginPathToSession($post_login_path);
}
$fb_login_url = $this->fbManager
->getFbLoginUrl();
return new TrustedRedirectResponse($fb_login_url);
}
public function returnFromFb() {
if (!$this->fbManager
->validateConfig()) {
drupal_set_message(t('Simple FB Connect not configured properly.'), 'error');
return $this
->redirect('user.login');
}
$login_helper = new FacebookRedirectLoginHelper($this->fbManager
->getReturnUrl());
if (!$this->fbManager
->startFbSession($login_helper)) {
drupal_set_message(t("Facebook login failed."), 'error');
return $this
->redirect('user.login');
}
if (!($fb_session = $this->fbManager
->getFbSession())) {
drupal_set_message(t("Facebook login failed."), 'error');
return $this
->redirect('user.login');
}
if (!($fb_profile = $this->fbManager
->getFbProfile($fb_session))) {
drupal_set_message(t("Facebook login failed, could not load Facebook profile. Contact site administrator."), 'error');
return $this
->redirect('user.login');
}
if (!($email = $this->fbManager
->getEmail($fb_profile))) {
drupal_set_message(t('Facebook login failed. This site requires permission to get your email address.'), 'error');
return $this
->redirect('user.login');
}
if ($drupal_user = $this->userManager
->loadUserByProperty('mail', $email)) {
if ($this->userManager
->loginUser($drupal_user)) {
return new RedirectResponse($this->postLoginManager
->getPostLoginPath());
}
else {
return $this
->redirect('user.login');
}
}
$drupal_user = $this->userManager
->createUser($fb_profile
->getProperty('name'), $email);
if ($drupal_user) {
if ($picture_url = $this->fbManager
->getFbProfilePicUrl($fb_session)) {
$this->userManager
->setProfilePic($drupal_user, $picture_url, $fb_profile
->getProperty('id'));
}
if ($this->userManager
->loginUser($drupal_user)) {
if ($this->postLoginManager
->getRedirectNewUsersToUserFormSetting()) {
drupal_set_message(t("Please check your account details. Since you logged in with Facebook, you don't need to update your password."));
return new RedirectResponse($this->postLoginManager
->getPathToUserForm($drupal_user));
}
return new RedirectResponse($this->postLoginManager
->getPostLoginPath());
}
else {
drupal_set_message(t('You will receive an email when site administrator activates your account.'), 'warning');
return $this
->redirect('user.login');
}
}
else {
return $this
->redirect('user.login');
}
throw new AccessDeniedHttpException();
}
}