/**
  * connect() method check if token is valid or not, and either redirect on Paypal interface or log the customer by creating his account if necessary
  *
  * @param array $aParams
  * @return string
  */
 public function connect(array $aParams = null)
 {
     // detect if callback requested
     if (empty($aParams['access_token'])) {
         $this->redirect();
     } else {
         // get profile data
         $oPaypalAccount = $this->getProfile($aParams);
         // set create status
         $bCreateStatus = true;
         $bCreatePs = false;
         $bCreateSocial = false;
         // set ID from email because there is no ID returned by Paypal
         $this->oUser->id = md5($oPaypalAccount->email);
         $this->oUser->email = $oPaypalAccount->email;
         $this->oUser->customerId = 0;
         // set name
         $this->oUser->first_name = $oPaypalAccount->given_name;
         $this->oUser->last_name = $oPaypalAccount->family_name;
         // set birthday
         if (!empty($oPaypalAccount->birthday)) {
             // format date for PS customer table
             $this->oUser->birthday = $oPaypalAccount->birthday;
         }
         // set customer address
         if (is_object($oPaypalAccount->address) && !empty($oPaypalAccount->address)) {
             // set address data
             $this->oUser->address->id_country = parent::getCountryID($oPaypalAccount->address->country);
             $this->oUser->address->id_state = !empty($oPaypalAccount->address->region) ? parent::getStateId($this->oUser->address->id_country, $oPaypalAccount->address->region) : parent::$aRequiredAddressFields['id_state'];
             $this->oUser->address->id_manufacturer = parent::$aRequiredAddressFields['id_manufacturer'];
             $this->oUser->address->id_supplier = parent::$aRequiredAddressFields['id_supplier'];
             $this->oUser->address->id_warehouse = parent::$aRequiredAddressFields['id_warehouse'];
             $this->oUser->address->alias = FacebookPsConnect::$oModule->l('My address', 'paypal-connect_class');
             $this->oUser->address->company = '';
             $this->oUser->address->lastname = $this->oUser->last_name;
             $this->oUser->address->firstname = $this->oUser->first_name;
             // get explode street address
             $aStreet = parent::concatAddress($oPaypalAccount->address->street_address);
             $this->oUser->address->address1 = $aStreet['line1'];
             $this->oUser->address->address2 = $aStreet['line2'];
             $this->oUser->address->postcode = $oPaypalAccount->address->postal_code;
             $this->oUser->address->city = $oPaypalAccount->address->locality;
             $this->oUser->address->other = parent::$aRequiredAddressFields['other'];
             $this->oUser->address->phone = !empty($oPaypalAccount->phone_number) ? $oPaypalAccount->phone_number : parent::$aRequiredAddressFields['phone'];
             $this->oUser->address->phone_mobile = !empty($oPaypalAccount->phone_number) ? $oPaypalAccount->phone_number : parent::$aRequiredAddressFields['phone_mobile'];
             $this->oUser->address->vat_number = parent::$aRequiredAddressFields['vat_number'];
             $this->oUser->address->dni = parent::$aRequiredAddressFields['dni'];
             $this->oUser->address->date_add = date('Y-m-d H:i:s', time());
             $this->oUser->address->date_upd = date('Y-m-d H:i:s', time());
             $this->oUser->address->active = parent::$aRequiredAddressFields['active'];
             $this->oUser->address->deleted = parent::$aRequiredAddressFields['deleted'];
             unset($sStreetLine1);
             unset($sStreetLine2);
         }
         // test if user already exist in social table
         $bCreateSocial = !parent::existSocialAccount($this->oUser->id);
         // test if user already exist in PS table
         $bCreatePs = !parent::existPsAccount($this->oUser->email);
         // use case - social account exist
         if (!$bCreateSocial) {
             // use case - create new PS account and have to delete old social account
             if (!empty($bCreatePs)) {
                 parent::deleteSocialAccount($this->oUser->id);
                 $bCreateSocial = true;
             }
         } elseif (empty($bCreatePs)) {
             $this->oUser->customerId = parent::getCustomerIdByMail($this->oUser->email);
         }
         // use case - if one of 2 accounts has to be created at least
         if (!empty($bCreatePs) || !empty($bCreateSocial)) {
             // create customer in 1 or 2 tables
             $bCreateStatus = parent::createCustomer($bCreatePs, $bCreateSocial);
         }
         // use case  - create status valid
         if ($bCreateStatus) {
             // load customer
             parent::loadCustomer($this->oUser->id);
             return $this->login();
         }
     }
 }