/** * Requests AppEngine to validate the given email and product registration number. * * If the validation was successful, several account options are saved. * * @param string $email An e-mail address. * @param string $reg_num A Nelio A/B Testing's product registration number. * * @return void * * @throws Exception `INVALID_MAIL` * If the e-mail is not registered to Nelio's servers, an * `INVALID_MAIL` exception is thrown. * @throws Exception `INVALID_PRODUCT_REG_NUM` * If the product registration number is not valid, an * `INVALID_PRODUCT_REG_NUM` exception is thrown. * * @since 2.1.0 */ public static function validate_email_and_reg_num($email, $reg_num) { if (!self::is_using_free_trial()) { self::update_nelioab_option('email', $email); self::update_nelioab_option('reg_num', $reg_num); } $json_data = null; try { $params = array('body' => array('mail' => $email, 'registrationNumber' => $reg_num)); if ($email == NULL || strlen($email) == 0) { $err = NelioABErrCodes::INVALID_MAIL; throw new Exception(NelioABErrCodes::to_string($err), $err); } if ($reg_num == NULL || strlen($reg_num) == 0) { $err = NelioABErrCodes::INVALID_PRODUCT_REG_NUM; throw new Exception(NelioABErrCodes::to_string($err), $err); } $json_data = NelioABBackend::remote_post_raw(NELIOAB_BACKEND_URL . '/customer/validate', $params, true); $json_data = json_decode($json_data['body']); } catch (Exception $e) { $error = $e->getCode(); if (!self::is_using_free_trial()) { if ($error == NelioABErrCodes::INVALID_MAIL) { self::update_nelioab_option('is_email_valid', false); } if ($error == NelioABErrCodes::INVALID_PRODUCT_REG_NUM) { self::update_nelioab_option('is_reg_num_valid', false); } } throw $e; } $new_customer_id = $json_data->key->id; if (self::is_using_free_trial()) { try { // Transfer domain $url = sprintf(NELIOAB_BACKEND_URL . '/customer/%s/site/%s/transfer', $new_customer_id, self::get_site_id()); NelioABBackend::remote_get($url); $was_site_transferred = true; } catch (Exception $e) { // Nothing to be done $was_site_transferred = false; } // Update information self::update_nelioab_option('customer_id', $new_customer_id); self::update_nelioab_option('email', $email); self::update_nelioab_option('reg_num', $reg_num); self::update_nelioab_option('is_email_valid', true); self::update_nelioab_option('is_reg_num_valid', true); self::check_terms_and_conditions(true); if (!$was_site_transferred) { try { self::register_this_site('undefined', 'undefined'); } catch (Exception $e) { // Site could not be automatically registered } } self::disable_free_trial(); $registered = true; } else { // E-mail and Registration number are the first thing that's saved // when we're not in a free trial. self::update_nelioab_option('is_email_valid', true); self::update_nelioab_option('is_reg_num_valid', true); self::update_nelioab_option('customer_id', $new_customer_id); // Check if the current site is already registered for this account $registered = false; if (NelioABAccountSettings::has_a_configured_site()) { /** @var NelioABSitesInfo $sites_info */ $sites_info = NelioABAccountSettings::get_registered_sites_information(); $this_id = NelioABAccountSettings::get_site_id(); $sites = $sites_info->get_registered_sites(); foreach ($sites as $s) { /** @var NelioABSite $s **/ if ($s->get_id() == $this_id) { $registered = true; } } } self::disable_free_trial(); } self::update_nelioab_option('has_a_configured_site', $registered); }
public static function generate_html_content() { require_once NELIOAB_ADMIN_DIR . '/views/account-page.php'; // Check data against APPENGINE $email = NelioABAccountSettings::get_email(); $reg_num = NelioABAccountSettings::get_reg_num(); if (NelioABAccountSettings::is_using_free_trial()) { $email = ''; $reg_num = ''; } $sites = array(); $max_sites = 1; try { NelioABAccountSettings::check_account_status('now'); } catch (Exception $e) { } $current_site_status = NelioABSite::NOT_REGISTERED; $error_retrieving_registered_sites = false; try { $sites_info = NelioABAccountSettings::get_registered_sites_information(); $max_sites = $sites_info->get_max_sites(); $sites = $sites_info->get_registered_sites(); // CHECKING WHETHER WE HAVE INFORMATION ABOUT THIS SITE BEING REGISTERED, // EITHER BY ID OR BY URL // 1. We check if this user has a registered site whose URL is this site's url $registered_site_based_on_url = false; foreach ($sites as $site) { if ($site->get_url() == get_option('siteurl')) { $registered_site_based_on_url = $site->get_id(); } } // 2. We check if the WP installation has a SITE_ID // If it does, but it's none of the user's regitered sites, // we have a problem, and we'll say the status is INVALID_ID. if (NelioABAccountSettings::has_a_configured_site()) { $site_id = NelioABAccountSettings::get_site_id(); $current_site_status = NelioABSite::INVALID_ID; foreach ($sites as $site) { if ($site->get_id() == $site_id) { $current_site_status = NelioABSite::ACTIVE; } } } // POSSIBLE RESULTS OF THE PREVIOUS CHECKS: // (a) The site is properly registered (== it has a valid ID) //if ( NelioABSite::ACTIVE == $current_site_status ) // Nothing to do here // (b) We have information about an ID that the user, in AE, does not have if (NelioABSite::INVALID_ID == $current_site_status) { $current_site_status = NelioABSite::NOT_REGISTERED; NelioABAccountSettings::fix_registration_info('not-registered'); } // (c) The site is not registered if (NelioABSite::NOT_REGISTERED == $current_site_status) { if ($registered_site_based_on_url) { $current_site_status = NelioABSite::ACTIVE; NelioABAccountSettings::fix_registration_info('registered', $registered_site_based_on_url); } } // (d) Other scenarios are: // - INACTIVE. We don't care. // - NON_MATCHING_URLS. We no longer use it. } catch (Exception $e) { $error_retrieving_registered_sites = true; } // Querying account information $user_info = array(); try { $customer_id = NelioABAccountSettings::get_customer_id(); if (strlen($customer_id) > 0) { $url = sprintf(NELIOAB_BACKEND_URL . '/customer/%s', $customer_id); $json = NelioABBackend::remote_get($url, true); $json = json_decode($json['body']); if (isset($user_info['firstname'])) { $user_info['firstname'] = $json->firstname; } else { $user_info['firstname'] = ''; } $user_info['subscription_url'] = $json->subscriptionUrl; $user_info['subscription_plan'] = $json->subscriptionPlan; $user_info['status'] = $json->status; $user_info['total_quota'] = intval($json->quotaPerMonth); $user_info['quota'] = intval($json->quota + $json->quotaExtra); } // Agency stuff if (isset($json->hasAgency) && $json->hasAgency) { $user_info['agency'] = true; $user_info['agencyname'] = $json->agencyName; $user_info['agencymail'] = $json->agencyEmail; } else { $user_info['agency'] = false; $user_info['agencyname'] = 'Agency Name'; $user_info['agencymail'] = '*****@*****.**'; } } catch (Exception $e) { } // Render content $title = __('My Account', 'nelioab'); $view = new NelioABAccountPage($title); $view->set_email($email); $view->set_email_validity(NelioABAccountSettings::is_email_valid()); $view->set_reg_num($reg_num); $view->set_reg_num_validity(NelioABAccountSettings::is_reg_num_valid()); $view->set_tac_checked(NelioABAccountSettings::are_terms_and_conditions_accepted()); $view->set_registered_sites($sites); $view->set_max_sites($max_sites); $view->set_current_site_status($current_site_status); $view->set_user_info($user_info); if ($error_retrieving_registered_sites) { $view->set_error_retrieving_registered_sites(); } $view->render_content(); die; }