/**
  * @param  $filterChain
  * @contextValues
  *  - fbSession (session from Facebook)
  *  -
  * @userValues
  *  - fbuser (user uid)
  *  - me. + $fbuser - user graph /me
  */
 public function execute($filterChain)
 {
     $configFromBase = ConfigTable::getInstance()->findAll();
     if ($configFromBase) {
         foreach ($configFromBase->toArray() as $option) {
             sfConfig::set('conf_' . $option['name'], $option['value']);
         }
     }
     header('P3P: CP="HONK"');
     // Execute this filter only once
     if (!$this->isFirstCall()) {
         $filterChain->execute();
         return;
     }
     $context = $this->getContext();
     $this->user = $context->getUser();
     $this->response = $context->getResponse();
     $this->request = $context->getRequest();
     $context->getConfiguration()->loadHelpers('Url');
     $this->user->setCulture('pl_PL');
     if ($this->request->hasParameter('signed_request')) {
         $this->user->setAttribute('signed_request', $this->request->getParameter('signed_request'), 'signed_request');
     }
     $facebook = FacebookService::getFacebook();
     $session = $facebook->getSession();
     $nextLink = $this->_generateNextLink($context->getConfiguration()->getApplication());
     $loginUrl = $facebook->getLoginUrl(array('canvas' => 1, 'fbconnect' => 0, 'req_perms' => sfConfig::get('app_facebook_permissions'), 'next' => $nextLink));
     if (!$session) {
         if ($this->request->isXMLHttpRequest()) {
             $context->getResponse()->setHttpHeader("Content-Type", "application/json; charset=utf-8");
             echo json_encode(array('status' => 200, 'redirect' => $loginUrl));
             exit;
         } else {
             $this->_redirectToFacebook($loginUrl);
         }
     }
     $context->set('fbSession', $session);
     $fbuser = $facebook->getUser();
     $this->user->setAttribute('fbuser', $fbuser);
     if (!$this->user->hasAttribute('me.' . $fbuser)) {
         try {
             $me = $facebook->api('/me');
             $this->_saveUserData($facebook, $me);
             $this->user->setAttribute('me.' . $fbuser, $me);
         } catch (FacebookApiException $e) {
             $log = LogsService::getInstance($e);
             $log->fromArray(array('user_id' => $fbuser, 'type' => 'FacebookApi', 'message' => 'Problem with get ME from FB Api'));
             $log->save();
         }
     } else {
         $this->getContext()->set('userFromBase', Doctrine_Query::create()->from('Users u')->select('u.*')->where('u.id = ?', $fbuser)->fetchOne());
     }
     $this->userFromBase = $this->getContext()->get('userFromBase');
     $this->_controlAccess($this->user->getAttribute('me.' . $fbuser));
     $filterChain->execute();
 }
 public static function userLike($pageId, $userId)
 {
     try {
         $facebook = FacebookService::getFacebook();
         $data = $facebook->api('' . $pageId . '/members/' . $userId . '');
         if (array_key_exists('0', $data['data'])) {
             if (count($data['data'][0]) == 2) {
                 return true;
             }
         }
         return false;
     } catch (FacebookApiException $e) {
         $log = LogsService::getInstance($e);
         $log->fromArray(array('user_id' => $userId, 'type' => 'Like Error', 'message' => 'problem with checking whether the user likes page'));
         $log->save();
         return false;
     }
 }