customer->isLogged()) { $data['client_id'] = $this->config->get('module_pp_login_client_id'); $data['return_url'] = $this->url->link('extension/module/pp_login/login', '', true); if ($this->config->get('module_pp_login_sandbox')) { $data['sandbox'] = 'sandbox'; } else { $data['sandbox'] = ''; } if ($this->config->get('module_pp_login_button_colour') == 'grey') { $data['button_colour'] = 'neutral'; } else { $data['button_colour'] = ''; } $locale = $this->config->get('module_pp_login_locale'); $this->load->model('localisation/language'); $languages = $this->model_localisation_language->getLanguages(); foreach ($languages as $language) { if ($language['status'] && ($language['code'] == $this->session->data['language']) && isset($locale[$language['language_id']])) { $data['locale'] = $locale[$language['language_id']]; } } if (!isset($data['locale'])) { $data['locale'] = 'en-gb'; } $scopes = array( 'profile', 'email', 'address', 'phone' ); if ($this->config->get('module_pp_login_seamless')) { $scopes[] = 'https://uri.paypal.com/services/expresscheckout'; } $data['scopes'] = implode(' ', $scopes); return $this->load->view('extension/module/pp_login', $data); } } public function login() { $this->load->model('extension/module/pp_login'); $this->load->model('account/customer'); $this->load->model('account/customer_group'); if ($this->customer->isLogged()) { echo ''; } if (!isset($this->request->get['code'])) { if (isset($this->request->get['error']) && isset($this->request->get['error_description'])) { $this->model_extension_module_pp_login->log('No code returned. Error: ' . $this->request->get['error'] . ', Error Description: ' . $this->request->get['error_description']); } echo ''; } else { $tokens = $this->model_extension_module_pp_login->getTokens($this->request->get['code']); } if (isset($tokens->access_token) && !isset($tokens->error)) { $user = $this->model_extension_module_pp_login->getUserInfo($tokens->access_token); } if (isset($user)) { $customer_info = $this->model_account_customer->getCustomerByEmail($user->email); if ($customer_info) { if ($this->validate($user->email)) { $this->completeLogin($customer_info['customer_id'], $customer_info['email'], $tokens->access_token); } else { $this->model_extension_module_pp_login->log('Could not login to - ID: ' . $customer_info['customer_id'] . ', Email: ' . $customer_info['email']); echo ''; } } else { $country = $this->db->query("SELECT `country_id` FROM `" . DB_PREFIX . "country` WHERE iso_code_2 = '" . $this->db->escape($user->address->country) . "'"); if ($country->num_rows) { $country_id = $country->row['country_id']; $zone = $this->db->query("SELECT `zone_id` FROM `" . DB_PREFIX . "zone` WHERE country_id = '" . (int)$country_id . "' AND name = '" . $this->db->escape($user->address->region) . "'"); if ($zone->num_rows) { $zone_id = $zone->row['zone_id']; } else { $zone_id = 0; } } else { $country_id = 0; $zone_id = 0; } if ($this->config->get('module_pp_login_customer_group_id')) { $customer_group_id = $this->config->get('module_pp_login_customer_group_id'); } else { $customer_group_id = $this->config->get('config_customer_group_id'); } $data = array( 'customer_group_id' => (int)$customer_group_id, 'firstname' => $user->given_name, 'lastname' => $user->family_name, 'email' => $user->email, 'telephone' => $user->phone_number, 'password' => uniqid(rand(), true), 'company' => '', 'address_1' => $user->address->street_address, 'address_2' => '', 'city' => $user->address->locality, 'postcode' => $user->address->postal_code, 'country_id' => (int)$country_id, 'zone_id' => (int)$zone_id, ); $customer_id = $this->model_account_customer->addCustomer($data); $this->model_extension_module_pp_login->log('Customer ID date_added: ' . $customer_id); if ($this->validate($user->email)) { $this->completeLogin($customer_id, $user->email, $tokens->access_token); } else { $this->model_extension_module_pp_login->log('Could not login to - ID: ' . $customer_id . ', Email: ' . $user->email); echo ''; } } } } public function logout() { if (isset($this->session->data['pp_login'])) { unset($this->session->data['pp_login']); } } protected function completeLogin($customer_id, $email, $access_token) { unset($this->session->data['guest']); // Default Shipping Address $this->load->model('account/address'); if ($this->config->get('config_tax_customer') == 'payment') { $this->session->data['payment_address'] = $this->model_account_address->getAddress($this->customer->getAddressId()); } if ($this->config->get('config_tax_customer') == 'shipping') { $this->session->data['shipping_address'] = $this->model_account_address->getAddress($this->customer->getAddressId()); } if ($this->config->get('module_pp_login_seamless')) { $this->session->data['pp_login']['seamless']['customer_id'] = $this->customer->getId(); $this->session->data['pp_login']['seamless']['access_token'] = $access_token; } else { if (isset($this->session->data['pp_login']['seamless'])) { unset($this->session->data['pp_login']['seamless']); } } $this->model_extension_module_pp_login->log('Customer logged in - ID: ' . $customer_id . ', Email: ' . $email); echo ''; } protected function validate($email) { // Check how many login attempts have been made. $login_info = $this->model_account_customer->getLoginAttempts($email); if ($login_info && ($login_info['total'] >= $this->config->get('config_login_attempts')) && strtotime('-1 hour') < strtotime($login_info['date_modified'])) { $this->error['warning'] = $this->language->get('error_attempts'); } // Check if customer has been approved. $customer_info = $this->model_account_customer->getCustomerByEmail($email); if ($customer_info && !$customer_info['status']) { $this->error['warning'] = $this->language->get('error_approved'); } if (!$this->error) { if (!$this->customer->login($email, '', true)) { $this->error['warning'] = $this->language->get('error_login'); $this->model_account_customer->addLoginAttempt($email); } else { $this->model_account_customer->deleteLoginAttempts($email); } } return !$this->error; } }