/** * 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(); } } }