/app/code/local/Excellence/Social/Block/Linkedln/Index.php
PHP | 146 lines | 108 code | 17 blank | 21 comment | 16 complexity | e36e5a1f409fd59a5165103691a7acc3 MD5 | raw file
- <?php
- class Excellence_Social_Block_Linkedln_Index extends Excellence_Social_Block_Linkedln{
- public function __construct(){
- parent::__construct();
-
- if($this->getRequest()->getPost('linkedln_oauth')){
- return;
- }
-
- if(isset($_REQUEST['close'])){
- $url = $this->getUrl('*/*/*',array('_current'=>true));
- $url = str_replace('close=true&', '', $url);
- $url = str_replace('close=true', '', $url);
- return $this->killPopup($url);
- }
-
- $API_CONFIG = $this->getApiConfig();
- $param = $this->getRequest()->getParam(LINKEDIN::_GET_TYPE,false);
- switch($param) {
- case 'initiate':
- /**
- * Handle user initiated LinkedIn connection, create the LinkedIn object.
- */
-
- // set the callback url
- if($this->getRequest()->getParam('popup',false)){
- $API_CONFIG['callbackUrl'] = Mage::getUrl('social/linkedln/login') .'?' . LINKEDIN::_GET_TYPE . '=initiate&' . LINKEDIN::_GET_RESPONSE . '=1&close=true';
- }else{
- $API_CONFIG['callbackUrl'] = Mage::getUrl('social/linkedln/login') .'?' . LINKEDIN::_GET_TYPE . '=initiate&' . LINKEDIN::_GET_RESPONSE . '=1';
- }
- $OBJ_linkedin = new LinkedIn($API_CONFIG);
-
- // check for response from LinkedIn
- $_GET[LINKEDIN::_GET_RESPONSE] = (isset($_GET[LINKEDIN::_GET_RESPONSE])) ? $_GET[LINKEDIN::_GET_RESPONSE] : '';
- if(!$_GET[LINKEDIN::_GET_RESPONSE]) {
- // LinkedIn hasn't sent us a response, the user is initiating the connection
-
- // send a request for a LinkedIn access token
- $response = $OBJ_linkedin->retrieveTokenRequest();
- if($response['success'] === TRUE) {
- // store the request token
- $_SESSION['oauth']['linkedin']['request'] = $response['linkedin'];
-
- // redirect the user to the LinkedIn authentication/authorisation page to initiate validation.
- header('Location: ' . LINKEDIN::_URL_AUTHENTICATE . $response['linkedin']['oauth_token']);
- exit;
- } else {
- // bad token request
- $data = array();
- $data['error'] = "Request token retrieval failed:<br /><br />RESPONSE:<br /><br /><pre>" . print_r($response, TRUE) . "</pre><br /><br />LINKEDIN OBJ:<br /><br /><pre>" . print_r($OBJ_linkedin, TRUE) . "</pre>";
- $data['type'] = 'linkedln';
- Mage::register('oauth_customer_data', $data);
- return;
- }
- } else {
- // LinkedIn has sent a response, user has granted permission, take the temp access token, the user's secret and the verifier to request the user's real secret key
- $response = $OBJ_linkedin->retrieveTokenAccess($_SESSION['oauth']['linkedin']['request']['oauth_token'], $_SESSION['oauth']['linkedin']['request']['oauth_token_secret'], $_GET['oauth_verifier']);
- if($response['success'] === TRUE) {
-
- // the request went through without an error, gather user's 'access' tokens
-
- if($response['linkedin']) {
- $OBJ_linkedin = new LinkedIn($API_CONFIG);
- $OBJ_linkedin->setTokenAccess($response['linkedin']);
- $OBJ_linkedin->setResponseFormat(LINKEDIN::_RESPONSE_JSON);
-
- $response = $OBJ_linkedin->profile('~:(id,first-name,last-name,picture-url)');
- if($response['success'] === TRUE) {
- $response = json_decode($response['linkedin'],true);
-
- $data = array();
-
- $data['social_id'] = $response['id'];
- $data['firstname'] = $response['firstName'];
- $data['lastname'] = $response['lastName'];
- $data['social_data'] = $response;
- $data['social_type'] = 'linkedln';
- Mage::register('oauth_customer_data', $data);
- } else {
- // request failed
- $data = array();
- $data['error'] = "Error retrieving profile information:<br /><br />RESPONSE:<br /><br /><pre>" . print_r($response) . "</pre>";
- $data['type'] = 'linkedln';
- Mage::register('oauth_customer_data', $data);
- return;
- }
- }
-
- } else {
- // bad token access
- $data = array();
- $data['error'] = "Access token retrieval failed:<br /><br />RESPONSE:<br /><br /><pre>" . print_r($response, TRUE) . "</pre><br /><br />LINKEDIN OBJ:<br /><br /><pre>" . print_r($OBJ_linkedin, TRUE) . "</pre>";
- $data['type'] = 'linkedln';
- Mage::register('oauth_customer_data', $data);
- return;
- }
- }
- break;
-
- case 'revoke':
- /**
- * Handle authorization revocation.
- */
-
- // check the session
- if(!oauth_session_exists()) {
- $data = array();
- $data['error'] = 'This script requires session support, which doesn\'t appear to be working correctly.';
- $data['error'] = 'linkedln';
- Mage::register('oauth_customer_data', $data);
- return;
- }
-
- $OBJ_linkedin = new LinkedIn($API_CONFIG);
- $OBJ_linkedin->setTokenAccess($_SESSION['oauth']['linkedin']['access']);
- $response = $OBJ_linkedin->revoke();
- if($response['success'] === TRUE) {
- // revocation successful, clear session
- session_unset();
- $_SESSION = array();
- if(session_destroy()) {
- // session destroyed
- header('Location: ' . $this->getUrl('customer/account/login',array('_secure'=>true)));
- exit;
- } else {
- // session not destroyed
-
- $data = array();
- $data['error'] = "Error clearing user's session";
- $data['error'] = 'linkedln';
- Mage::register('oauth_customer_data', $data);
- return;
-
- }
- } else {
- // revocation failed
- $data = array();
- $data['error'] = "Error revoking user's token:<br /><br />RESPONSE:<br /><br /><pre>" . print_r($response, TRUE) . "</pre><br /><br />LINKEDIN OBJ:<br /><br /><pre>" . print_r($OBJ_linkedin, TRUE) . "</pre>";
- $data['error'] = 'linkedln';
- Mage::register('oauth_customer_data', $data);
- return;
- }
- break;
- }
- }
- }