/**
  * login() method return succeeded HTML message of connector
  *
  * @param $sData
  * @return string
  */
 protected function login($sData = '')
 {
     $sLink = '';
     // get back URI
     $sBackURI = self::$oSession->get('back');
     if (!empty($sBackURI)) {
         $sLink = urldecode($sBackURI);
     } else {
         if (version_compare(_PS_VERSION_, '1.4', '>')) {
             $sLink = BT_FPCModuleTools::getAccountPageLink();
         } else {
             global $smarty;
             $sLink = $smarty->_tpl_vars['base_dir_ssl'] . 'my-account.php';
         }
     }
     if (!empty($sData)) {
         $sLink .= (strstr($sLink, '?') ? '&' : '?') . 'data=' . $sData;
     }
     // detect user agent to redirect or close the popup windows and reload the current page
     if (!empty($_SERVER['HTTP_USER_AGENT']) && (stristr($_SERVER['HTTP_USER_AGENT'], 'iphone') || stristr($_SERVER['HTTP_USER_AGENT'], 'mobile'))) {
         header("Location: " . $sLink);
         exit(0);
     } else {
         return '<script>' . '     window.opener.location.href = "' . $sLink . '";' . '     window.opener.focus();' . '     window.close();' . '</script>';
     }
 }
Esempio n. 2
0
 /**
  * run() method detect warnings and display them
  */
 public function run($sType, $mValue, array $aParams = array(), $bStop = false)
 {
     $bWarning = false;
     switch ($sType) {
         case 'configuration':
             if (!Configuration::get($mValue)) {
                 $bWarning = true;
             }
             break;
         case 'directive':
             if (!ini_get($mValue)) {
                 $bWarning = true;
             }
             break;
         case 'module':
             // get module's vars to check
             $aModuleVars = !empty($aParams['vars']) && is_array($aParams['vars']) ? $aParams['vars'] : array();
             // if only activated
             $bActivatedOnly = !empty($aParams['installed']) ? $aParams['installed'] : false;
             if (!BT_FPCModuleTools::isInstalled($mValue, $aModuleVars, false, $bActivatedOnly)) {
                 $bWarning = true;
             }
             break;
         case 'function':
             if (!function_exists($mValue)) {
                 $bWarning = true;
             }
             break;
         case 'callback':
             $mReturn = call_user_func_array($mValue, array($aParams));
             if ($mReturn) {
                 $bWarning = true;
             }
             break;
         case 'file-permission':
             // use case - check file permission
             if (!is_writable($mValue)) {
                 $bWarning = true;
             }
             break;
         default:
             $bWarning = false;
             break;
     }
     if ($bWarning && $bStop) {
         $this->bStopExecution = true;
     }
     return $bWarning;
 }
 /**
  * run() method execute hook
  *
  * @param array $aParams
  * @return array
  */
 public function run(array $aParams)
 {
     $aAssign = array();
     try {
         // get connector
         $oConnector = BT_BaseConnector::get($this->_sConnectorType, $aParams);
         // first connection
         if (empty($aParams['activecallback'])) {
             $mContent = $oConnector->connect();
         } else {
             // exec callback for some connectors which need to use redirection and callback
             $mContent = $oConnector->callback($aParams);
         }
         $aAssign['content'] = $mContent;
     } catch (BT_ConnectorException $e) {
         $aAssign['aErrors'][] = array('msg' => $e->getMessage(), 'code' => $e->getCode());
         $aAssign['sErrorInclude'] = BT_FPCModuleTools::getTemplatePath(_FPC_PATH_TPL_NAME . _FPC_TPL_ERROR);
     }
     return $aAssign;
 }
 /**
  * _updateBasic() method update basic settings
  *
  * @param array $aPost
  * @return array
  */
 private function _updateBasic(array $aPost)
 {
     // clean headers
     @ob_end_clean();
     // set
     $aUpdate = array();
     try {
         // use case - check display fancy popin for asking to associate FB account with PS
         $bDisplayAskFbPopin = Tools::getIsset(strtolower(_FPC_MODULE_NAME) . 'DisplayFbPopin') && Tools::getValue(strtolower(_FPC_MODULE_NAME) . 'DisplayFbPopin') == 'true' ? true : false;
         if (!Configuration::updateValue(_FPC_MODULE_NAME . '_DISPLAY_FB_POPIN', $bDisplayAskFbPopin)) {
             throw new Exception(FacebookPsConnect::$oModule->l('An error occurred during FB association popin update', 'admin-update_class') . '.', 110);
         }
         // use case - check display block
         $bDisplayBlock = Tools::getIsset(strtolower(_FPC_MODULE_NAME) . 'DisplayBlock') && Tools::getValue(strtolower(_FPC_MODULE_NAME) . 'DisplayBlock') == 'true' ? true : false;
         if (!Configuration::updateValue(_FPC_MODULE_NAME . '_DISPLAY_BLOCK', $bDisplayBlock)) {
             throw new Exception(FacebookPsConnect::$oModule->l('An error occurred during block display update', 'admin-update_class') . '.', 111);
         }
         // use case - check display account information block
         $bDisplayBlockInfoAccount = Tools::getIsset(strtolower(_FPC_MODULE_NAME) . 'DisplayBlockInfoAccount') && Tools::getValue(strtolower(_FPC_MODULE_NAME) . 'DisplayBlockInfoAccount') == 'true' ? true : false;
         if (!Configuration::updateValue(_FPC_MODULE_NAME . '_DISPLAY_BLOCK_INFO_ACCOUNT', $bDisplayBlockInfoAccount)) {
             throw new Exception(FacebookPsConnect::$oModule->l('An error occurred during block display update', 'admin-update_class') . '.', 112);
         }
         // use case - check display cart information block
         $bDisplayBlockInfoCart = Tools::getIsset(strtolower(_FPC_MODULE_NAME) . 'DisplayBlockInfoCart') && Tools::getValue(strtolower(_FPC_MODULE_NAME) . 'DisplayBlockInfoCart') == 'true' ? true : false;
         if (!Configuration::updateValue(_FPC_MODULE_NAME . '_DISPLAY_BLOCK_INFO_CART', $bDisplayBlockInfoCart)) {
             throw new Exception(FacebookPsConnect::$oModule->l('An error occurred during block display update', 'admin-update_class') . '.', 113);
         }
         // use case - set  default customer group
         if (Tools::getIsset(strtolower(_FPC_MODULE_NAME) . 'DefaultGroup')) {
             $iDefaultCustGroup = Tools::getValue(strtolower(_FPC_MODULE_NAME) . 'DefaultGroup');
             if (is_numeric($iDefaultCustGroup)) {
                 if (!Configuration::updateValue(_FPC_MODULE_NAME . '_DEFAULT_CUSTOMER_GROUP', $iDefaultCustGroup)) {
                     throw new Exception(FacebookPsConnect::$oModule->l('An error occurred during default customer group update', 'admin-update_class') . '.', 114);
                 }
             } else {
                 throw new Exception(FacebookPsConnect::$oModule->l('Default customer group is not a numeric', 'admin-update_class') . '.', 115);
             }
         }
         // use case - set  default API request method
         if (Tools::getIsset(strtolower(_FPC_MODULE_NAME) . 'ApiRequestType')) {
             $iDefaultApiMethod = Tools::getValue(strtolower(_FPC_MODULE_NAME) . 'ApiRequestType');
             if (!empty($iDefaultApiMethod)) {
                 if (!Configuration::updateValue(_FPC_MODULE_NAME . '_API_REQUEST_METHOD', $iDefaultApiMethod)) {
                     throw new Exception(FacebookPsConnect::$oModule->l('An error occurred during default API request method update', 'admin-update_class') . '.', 116);
                 }
             }
         }
         // use case - if OPC activate, update block's text below connectors' button
         if (Tools::getIsset(strtolower(_FPC_MODULE_NAME) . 'DisplayBlockInfoCart')) {
             $bDisplayBlockOpc = Tools::getValue(strtolower(_FPC_MODULE_NAME) . 'DisplayBlockInfoCart') == 'true' ? true : false;
             if (!Configuration::updateValue(_FPC_MODULE_NAME . '_DISPLAY_BLOCK_INFO_CART', $bDisplayBlockOpc)) {
                 throw new Exception(FacebookPsConnect::$oModule->l('An error occurred during display block cart update', 'admin-update_class') . '.', 117);
             }
         }
     } catch (Exception $e) {
         $aUpdate['aErrors'][] = array('msg' => $e->getMessage(), 'code' => $e->getCode());
     }
     // get configuration options
     BT_FPCModuleTools::getConfiguration();
     // require admin configure class - to factorise
     require_once _FPC_PATH_LIB_ADMIN . 'admin-display_class.php';
     // get run of admin display in order to display first page of admin with basic settings updated
     $aData = BT_AdminDisplay::create()->run(array('sType' => 'basic'));
     // use case - empty error and updating status
     $aData['assign'] = array_merge($aData['assign'], array('iActiveTab' => 1, 'bUpdate' => empty($aUpdate['aErrors']) ? true : false), $aUpdate);
     // destruct
     unset($aUpdate);
     return $aData;
 }
 /**
  * callback() method check exchanged code and connect the customer
  *
  * @params array $aParams
  */
 public function callback(array $aParams = null)
 {
     if (!empty($aParams['state']) && self::$oSession->get('state') == $aParams['state'] && !empty($aParams['code'])) {
         // get oauth_token
         $sResponse = BT_FPCModuleTools::fileGetContent($this->sGraphUrl . '&code=' . $aParams['code']);
         if (!empty($sResponse)) {
             // set params
             $aQUERY = array();
             // parse URI
             parse_str($sResponse, $aQUERY);
             if (!empty($aQUERY['access_token'])) {
                 // set session
                 self::$oSession->set('access_token', $aQUERY['access_token']);
                 return $this->connect(array('code' => $aParams['code'], 'access_token' => $aQUERY['access_token']));
             }
         } else {
             throw new BT_FacebookException(FacebookPsConnect::$oModule->l('Internal server error. Facebook access token is empty or the connect method to the Facebook URL with HTTPS is not allowed. Please contact the merchant to warn him', 'facebook-connect_class'), 523);
         }
     } else {
         throw new BT_FacebookException(FacebookPsConnect::$oModule->l('The state doesn\'t match. You may be a victim of cross-site request forgery or you decided to cancel your connect processing. Please close this window', 'facebook-connector_class'), 524);
     }
 }
 /**
  * displayErrorModule() method displays view with error
  *
  * @param string $sTplName
  * @param array $aAssign
  * @return string html
  */
 public function displayErrorModule()
 {
     global $smarty;
     $smarty->assign(array('sHomeURI' => BT_FPCModuleTools::truncateUri(), 'aErrors' => $this->aErrors, 'sModuleName' => strtolower(_FPC_MODULE_NAME), 'bDebug' => _FPC_DEBUG));
     return $this->display(__FILE__, _FPC_PATH_TPL_NAME . _FPC_TPL_ERROR);
 }
 /**
  * _displayAccount() method displays fancybox if customer do not use a social connector to link his PS account
  *
  * @category hook collection
  * @uses
  *
  * @param array $aParams
  * @return array
  */
 private function _displayAccount()
 {
     $aAssign = array('iCustomerId' => $this->iCustomerLogged, 'bUseJqueryUI' => true);
     $aAssign['bDisplay'] = false;
     // if one of connectors is active at least
     if (self::$bConnectorsActive) {
         require_once _FPC_PATH_LIB . 'module-dao_class.php';
         // include abstract connector
         require_once _FPC_PATH_LIB_CONNECTOR . 'base-connector_class.php';
         if (FacebookPsConnect::$aConfiguration[_FPC_MODULE_NAME . '_DISPLAY_FB_POPIN'] && !empty($GLOBALS[_FPC_MODULE_NAME . '_CONNECTORS']['facebook']['data']['activeConnector'])) {
             // set
             $bSocialCustomerExist = false;
             // loop on each connector to check if social account already exists - if not, display FB popin account association
             foreach ($GLOBALS[_FPC_MODULE_NAME . '_CONNECTORS'] as $sName => $aConnector) {
                 if (!empty($GLOBALS[_FPC_MODULE_NAME . '_CONNECTORS'][$sName]['data'])) {
                     // get connector options
                     $aParams = $GLOBALS[_FPC_MODULE_NAME . '_CONNECTORS'][$sName]['data'];
                     // get connector
                     $oConnector = BT_BaseConnector::get($sName, $aParams);
                     // check if customer is already logged from FB connector
                     if ($oConnector->existSocialAccount($aAssign['iCustomerId'], 'ps')) {
                         $bSocialCustomerExist = true;
                     }
                     unset($oConnector);
                 }
             }
             if (!BT_FPCModuleDao::existCustomerAssociationStatus(FacebookPsConnect::$iShopId, $this->iCustomerLogged) && empty($bSocialCustomerExist)) {
                 $aAssign['bDisplay'] = true;
                 $aAssign['bSocialCustomerExist'] = true;
                 $aAssign['sConnectorButtonFacebook'] = BT_FPCModuleTools::getTemplatePath(_FPC_PATH_TPL_NAME . _FPC_TPL_HOOK_PATH . _FPC_TPL_BUTTON_FB);
                 $aAssign['sModuleURI'] = $this->sModuleURI;
                 $aAssign['bFriendlyPermission'] = $GLOBALS[_FPC_MODULE_NAME . '_CONNECTORS']['facebook']['data']['permissions'];
                 $aAssign['sBackUri'] = self::$sCurrentURI;
             }
         }
         // get connector options
         $aParams = $GLOBALS[_FPC_MODULE_NAME . '_CONNECTORS']['twitter']['data'];
         // test if twitter is already configured
         if (!empty($aParams)) {
             // get connector
             $oConnector = BT_BaseConnector::get('twitter', $aParams);
             // check if customer is already logged from FB connector
             if ($oConnector->existSocialAccount($aAssign['iCustomerId'], 'ps') && strstr(FacebookPsConnect::$oCookie->email, 'twitter.com')) {
                 $aAssign['iCustomerId'] = md5(_FPC_MODULE_NAME . 'twitter' . $aAssign['iCustomerId']);
                 $aAssign['sConnector'] = 'twitter';
                 $aAssign['bTwitterCustomerExist'] = true;
                 $aAssign['bDisplay'] = true;
             }
             unset($oConnector);
         }
         // use case - data sent for collecting
         $sRequestData = Tools::getValue('data');
         if (!empty($sRequestData)) {
             $aRequestData = unserialize(gzuncompress(urldecode(base64_decode($sRequestData))));
             if (!empty($aRequestData)) {
                 if (empty($aRequestData['ci'])) {
                     $aRequestData['ci'] = md5('collect' . FacebookPsConnect::$oCookie->id_customer);
                     if (!empty($aRequestData['cn']) && !empty($aRequestData['ca']) && !empty($aRequestData['ct']) && !empty($aRequestData['oi'])) {
                         // execute social collect method
                         $sReturn = FacebookPsConnect::$oModule->HookSocialCollector(base64_decode($aRequestData['cn']), $aRequestData);
                         if (!empty($sReturn)) {
                             // get collect data array
                             $oResponse = BT_FPCModuleTools::jsonDecode($sReturn);
                             if (!empty($oResponse->status)) {
                                 $aAssign['bCustomerCollect'] = true;
                             }
                         }
                     }
                 }
             }
         }
     }
     $aAssign['sModuleURI'] = _FPC_MODULE_URL . 'ws-' . _FPC_MODULE_SET_NAME . '.php';
     return array('tpl' => _FPC_TPL_HOOK_PATH . _FPC_TPL_CONNECTOR_ACCOUNT, 'assign' => $aAssign);
 }
 /**
  * _displaySystemHealth() method displays system health information
  *
  * @param array $aPost
  * @return array
  */
 private function _displaySystemHealth(array $aPost)
 {
     $aAssign = array();
     $aAssign['iCurrentLang'] = intval(FacebookPsConnect::$iCurrentLang);
     // set
     $sIsoCode = FacebookPsConnect::$sCurrentLang;
     if ($sIsoCode !== 'fr') {
         $sIsoCode = 'en';
     }
     $aModules = array('facebookpsshoptab' => array('active' => true, 'min' => '3.3.2', 'name' => 'Facebook Ps Shop Tab', 'img' => _FPC_URL_IMG . 'admin/fb-ps-shop-tab.jpg', 'addons' => 'http://addons.prestashop.com/' . $sIsoCode . '/social-commerce-facebook-prestashop-modules/1048-facebook-ps-shop-tab.html'), 'facebookpsessentials' => array('active' => true, 'min' => '2.3.0', 'name' => 'Facebook Ps Essentials', 'img' => _FPC_URL_IMG . 'admin/fb-ps-essentials.jpg', 'addons' => 'http://addons.prestashop.com/' . $sIsoCode . '/social-commerce-facebook-prestashop-modules/5025-facebook-ps-essentials-facebook-like-twitter-etc.html'));
     unset($sIsoCode);
     foreach ($aModules as $sName => $aModule) {
         $aParams = $aModule;
         if (($oModule = BT_FPCModuleTools::isInstalled($sName, array(), true)) !== false) {
             // installed ok + min version
             $aParams['installed'] = true;
             $aParams['minVersion'] = version_compare($oModule->version, $aModule['min'], '>=') ? true : false;
         } else {
             $aParams['installed'] = false;
         }
         $aAssign['aModules'][$sName] = $aParams;
     }
     return array('tpl' => _FPC_TPL_ADMIN_PATH . _FPC_TPL_SYS_HEALTH_SETTINGS, 'assign' => $aAssign);
 }
 /**
  * _updateEmail() method update customer email
  *
  * @param array $aParams
  * @return bool
  */
 private function _updateEmail(array $aParams)
 {
     $aAssign = array();
     if (version_compare(_PS_VERSION_, '1.4', '>')) {
         $oLink = new Link();
         $sLink = $oLink->getPageLink('my-account.php');
         unset($oLink);
     } else {
         global $smarty;
         $sLink = $smarty->_tpl_vars['base_dir_ssl'] . 'my-account.php';
     }
     $aAssign['sLink'] = $sLink;
     // get serialized connector data
     BT_FPCModuleTools::getConnectorData();
     // check if customer is the same customer connected and if the e-mail is valid
     if (!empty($aParams['connector']) && !empty($GLOBALS[_FPC_MODULE_NAME . '_CONNECTORS'][$aParams['connector']]['data']['activeConnector']) && !empty($aParams['customerId']) && $aParams['customerId'] === md5(_FPC_MODULE_NAME . $aParams['connector'] . FacebookPsConnect::$oCookie->id_customer) && !empty($aParams['customerId']) && filter_var($aParams['socialEmail'], FILTER_VALIDATE_EMAIL) !== false) {
         // include
         require_once _FPC_PATH_LIB . 'module-dao_class.php';
         require_once _FPC_PATH_LIB . 'mail-send_class.php';
         // check if exists and return id customer if exists
         $iCustomerId = BT_FPCModuleDao::existCustomerEmail($aParams['socialEmail']);
         // if customer not exists
         if (empty($iCustomerId)) {
             if (BT_FPCModuleDao::updateCustomerEmail(FacebookPsConnect::$oCookie->id_customer, $aParams['socialEmail'])) {
                 $aAssign['sMsg'] = FacebookPsConnect::$oModule->l('Your information has been updated', 'hook-action_class');
                 // set the new e-mail in cookie
                 if (version_compare(_PS_VERSION_, '1.5', '>')) {
                     Context::getContext()->cookie->email = $aParams['socialEmail'];
                 } else {
                     global $cookie;
                     $cookie->email = $aParams['socialEmail'];
                 }
             } else {
                 $aAssign['aErrors'][] = array('msg' => FacebookPsConnect::$oModule->l('Internal server error. The customer e-mail has not been updated. Please try again by clicking on reload button below', 'hook-action_class') . '.', 'code' => 590);
             }
             // manage the update firstname and name for twitter connexion
             BT_FPCModuleDao::updateCustomerFirstName(FacebookPsConnect::$oCookie->id_customer, $aParams['socialFirstName']);
             BT_FPCModuleDao::updateCustomerName(FacebookPsConnect::$oCookie->id_customer, $aParams['socialName']);
             BT_FPCModuleDao::updateCustomerPassword(FacebookPsConnect::$oCookie->id_customer, $aParams['socialPassword']);
             BT_FpcMailSend::_updateEmailTwitter($aParams['socialFirstName'], $aParams['socialName'], $aParams['socialEmail'], $aParams['socialPassword'], FacebookPsConnect::$iCurrentLang, FacebookPsConnect::$iShopId);
         } else {
             $aAssign['aErrors'][] = array('msg' => FacebookPsConnect::$oModule->l('This e-mail address is already taken by a customer account or you already have linked this e-mail address with another network. Please try again by clicking on reload button below', 'hook-action_class') . '.', 'code' => 591);
         }
     } else {
         $aAssign['aErrors'][] = array('msg' => FacebookPsConnect::$oModule->l('Internal server error. The customer could not be identified. You may be a victim of cross-site request forgery', 'hook-action_class') . '.', 'code' => 592);
     }
     if (empty($aAssign['aErrors'])) {
         $sTpl = _FPC_TPL_CONFIRM;
     } else {
         $sTpl = _FPC_TPL_ERROR;
     }
     return array('tpl' => $sTpl, 'assign' => $aAssign);
 }
 /**
  * getProfile() method returns the customer's profile
  *
  *
  * @param array $aToken
  * @return array
  */
 public function getProfile(array $aToken)
 {
     $sProfileUrl = sprintf("%s?schema=openid&access_token=%s", "https://api.paypal.com/v1/identity/openidconnect/userinfo/", $aToken['access_token']);
     return BT_FPCModuleTools::jsonDecode($this->runCurl($sProfileUrl));
 }