/** 
  * Handle Requests
  * This is where compute the email from the token and subscribe the user_error()
  *
  * @return void 
  */
 protected function handle_request()
 {
     global $wp;
     $token = $wp->query_vars['token'];
     if (!$token) {
         wp_redirect('sg-subscription-missing-token');
         exit;
     }
     $transient = get_transient($token);
     if (!$transient || !is_array($transient) || !isset($transient['email']) || !isset($transient['first_name']) || !isset($transient['last_name'])) {
         wp_redirect('sg-subscription-invalid-token');
         exit;
     }
     $subscribed = Sendgrid_NLVX::create_and_add_recipient_to_list($transient['email'], $transient['first_name'], $transient['last_name']);
     if ($subscribed) {
         $page = Sendgrid_Tools::get_mc_signup_confirmation_page_url();
         if ($page == false) {
             set_transient($token, null);
             wp_redirect('sg-subscription-success');
             exit;
         } else {
             $page = add_query_arg('sg_token', $token, $page);
             wp_redirect($page);
             exit;
         }
         return;
     } else {
         wp_redirect('sg-error');
         exit;
     }
 }
 /**
  * Adds a recipient in the SendGrid MC contact db and adds it to the list
  *
  * @param   string $email          The email of the recipient
  * @param   string $first_name     The first name of the recipient
  * @param   string $last_name      The last name of the recipient
  *
  * @return  bool   True if successful, false otherwise.
  */
 public static function create_and_add_recipient_to_list($email, $first_name = '', $last_name = '')
 {
     $list_id = Sendgrid_Tools::get_mc_list_id();
     if (false == $list_id) {
         return false;
     }
     $recipient_id = Sendgrid_NLVX::add_recipient($email, $first_name, $last_name);
     if (false == $recipient_id) {
         return false;
     }
     return Sendgrid_NLVX::add_recipient_to_list($recipient_id, $list_id);
 }
 /**
  * Display SendGrid settings page content
  *
  * @return void
  */
 public static function show_settings_page()
 {
     $response = null;
     $error_from_update = false;
     if ('POST' == $_SERVER['REQUEST_METHOD'] and !isset($_POST['sg_dismiss_widget_notice'])) {
         $response = self::do_post($_POST);
         if (isset($response['status']) and $response['status'] == 'error') {
             $error_from_update = true;
         }
     }
     $status = '';
     $message = '';
     $user = Sendgrid_Tools::get_username();
     $password = Sendgrid_Tools::get_password();
     $api_key = Sendgrid_Tools::get_api_key();
     $send_method = Sendgrid_Tools::get_send_method();
     $auth_method = Sendgrid_Tools::get_auth_method();
     $name = stripslashes(Sendgrid_Tools::get_from_name());
     $email = Sendgrid_Tools::get_from_email();
     $reply_to = Sendgrid_Tools::get_reply_to();
     $categories = stripslashes(Sendgrid_Tools::get_categories());
     $template = stripslashes(Sendgrid_Tools::get_template());
     $port = Sendgrid_Tools::get_port();
     $content_type = Sendgrid_Tools::get_content_type();
     $unsubscribe_group_id = Sendgrid_Tools::get_unsubscribe_group();
     $stats_categories = stripslashes(Sendgrid_Tools::get_stats_categories());
     $mc_api_key = Sendgrid_Tools::get_mc_api_key();
     $mc_list_id = Sendgrid_Tools::get_mc_list_id();
     $mc_opt_use_transactional = Sendgrid_Tools::get_mc_opt_use_transactional();
     $mc_opt_incl_fname_lname = Sendgrid_Tools::get_mc_opt_incl_fname_lname();
     $mc_opt_req_fname_lname = Sendgrid_Tools::get_mc_opt_req_fname_lname();
     $mc_signup_confirmation_page = Sendgrid_Tools::get_mc_signup_confirmation_page();
     $mc_signup_email_subject = Sendgrid_Tools::get_mc_signup_email_subject();
     if (false == $mc_signup_email_subject) {
         $mc_signup_email_subject = self::DEFAULT_SIGNUP_EMAIL_SUBJECT . get_bloginfo('name');
     }
     $mc_signup_email_content = Sendgrid_Tools::get_mc_signup_email_content();
     if (false == $mc_signup_email_content) {
         $mc_signup_email_content = self::DEFAULT_SIGNUP_EMAIL_CONTENT . get_bloginfo('name') . '</p>';
     }
     $mc_signup_email_content = stripslashes($mc_signup_email_content);
     $mc_signup_email_content_text = Sendgrid_Tools::get_mc_signup_email_content_text();
     if (false == $mc_signup_email_content_text) {
         $mc_signup_email_content_text = self::DEFAULT_SIGNUP_EMAIL_CONTENT_TEXT . get_bloginfo('name');
     }
     $mc_signup_email_content_text = stripslashes($mc_signup_email_content_text);
     $confirmation_pages = get_pages(array('parent' => 0));
     $checked_use_transactional = '';
     if ('true' == $mc_opt_use_transactional) {
         $checked_use_transactional = 'checked';
     }
     $checked_incl_fname_lname = '';
     if ('true' == $mc_opt_incl_fname_lname) {
         $checked_incl_fname_lname = 'checked';
     }
     $checked_req_fname_lname = '';
     if ('true' == $mc_opt_req_fname_lname) {
         $checked_req_fname_lname = 'checked';
     }
     $contact_lists = Sendgrid_NLVX::get_all_lists();
     $contact_list_id_is_valid = false;
     if (false != $contact_lists) {
         foreach ($contact_lists as $key => $list) {
             if ($mc_list_id == $list['id']) {
                 $contact_list_id_is_valid = true;
                 break;
             }
         }
     }
     $allowed_send_methods = array('API');
     if (class_exists('Swift')) {
         $allowed_send_methods[] = 'SMTP';
     }
     $is_mc_api_key_valid = true;
     if ('true' == $mc_opt_use_transactional and 'apikey' == $auth_method and !empty($api_key)) {
         if (!Sendgrid_Tools::check_api_key_mc($api_key)) {
             $is_mc_api_key_valid = false;
         }
     } else {
         if ('true' != $mc_opt_use_transactional) {
             if (!Sendgrid_Tools::check_api_key_mc($mc_api_key)) {
                 $is_mc_api_key_valid = false;
             }
         }
     }
     if ($is_mc_api_key_valid) {
         Sendgrid_Tools::set_mc_auth_valid('true');
     } else {
         Sendgrid_Tools::set_mc_auth_valid('false');
     }
     if (!$error_from_update) {
         if (!in_array(strtoupper($send_method), $allowed_send_methods)) {
             $message = 'Invalid send method configured in the config file, available methods are: ' . join(", ", $allowed_send_methods);
             $status = 'error';
         }
         if ('apikey' == $auth_method and !empty($api_key)) {
             if (!Sendgrid_Tools::check_api_key($api_key, true)) {
                 $message = 'API Key is invalid or without permissions.';
                 $status = 'error';
             } elseif ('true' == $mc_opt_use_transactional and !$is_mc_api_key_valid) {
                 $message = 'The configured API Key for subscription widget is invalid, empty or without permissions.';
                 $status = 'error';
             } elseif ('error' != $status) {
                 $status = 'valid_auth';
             }
         } elseif ('credentials' == $auth_method and !empty($user) and !empty($password)) {
             if (!Sendgrid_Tools::check_username_password($user, $password, true)) {
                 $message = 'Username and password are invalid.';
                 $status = 'error';
             } elseif ('error' != $status) {
                 $status = 'valid_auth';
             }
         }
         if ($template and !Sendgrid_Tools::check_template($template)) {
             $message = 'Template not found.';
             $status = 'error';
         }
         if (!in_array($port, Sendgrid_Tools::$allowed_ports)) {
             $message = 'Invalid port configured in the config file, available ports are: ' . join(",", Sendgrid_Tools::$allowed_ports);
             $status = 'error';
         }
         if (!in_array($auth_method, Sendgrid_Tools::$allowed_auth_methods)) {
             $message = 'Invalid authentication method configured in the config file, available options are: ' . join(", ", Sendgrid_Tools::$allowed_auth_methods);
             $status = 'error';
         }
         if (defined('SENDGRID_CONTENT_TYPE')) {
             if (!in_array(SENDGRID_CONTENT_TYPE, Sendgrid_Tools::$allowed_content_type)) {
                 $message = 'Invalid content type, available content types are: "plaintext" or "html".';
                 $status = 'error';
             }
         }
         if (defined('SENDGRID_FROM_EMAIL')) {
             if (!Sendgrid_Tools::is_valid_email(SENDGRID_FROM_EMAIL)) {
                 $message = 'Sending email address is not valid in config file.';
                 $status = 'error';
             }
         }
         if (defined('SENDGRID_REPLY_TO')) {
             if (!Sendgrid_Tools::is_valid_email(SENDGRID_REPLY_TO)) {
                 $message = 'Reply email address is not valid in config file.';
                 $status = 'error';
             }
         }
     }
     // get unsubscribe groups
     $unsubscribe_groups = Sendgrid_Tools::get_all_unsubscribe_groups();
     $no_permission_on_unsubscribe_groups = false;
     if ('apikey' == $auth_method and 'true' != Sendgrid_Tools::get_asm_permission()) {
         $no_permission_on_unsubscribe_groups = true;
     }
     $is_env_auth_method = defined('SENDGRID_AUTH_METHOD');
     $is_env_send_method = defined('SENDGRID_SEND_METHOD');
     $is_env_username = defined('SENDGRID_USERNAME');
     $is_env_password = defined('SENDGRID_PASSWORD');
     $is_env_api_key = defined('SENDGRID_API_KEY');
     $is_env_port = defined('SENDGRID_PORT');
     $is_env_content_type = defined('SENDGRID_CONTENT_TYPE');
     $is_env_unsubscribe_group = defined('SENDGRID_UNSUBSCRIBE_GROUP');
     $is_env_mc_api_key = defined('SENDGRID_MC_API_KEY');
     $is_env_mc_list_id = defined('SENDGRID_MC_LIST_ID');
     $is_env_mc_opt_use_transactional = defined('SENDGRID_MC_OPT_USE_TRANSACTIONAL');
     $is_env_mc_opt_incl_fname_lname = defined('SENDGRID_MC_OPT_INCL_FNAME_LNAME');
     $is_env_mc_opt_req_fname_lname = defined('SENDGRID_MC_OPT_REQ_FNAME_LNAME');
     $is_env_mc_signup_email_subject = defined('SENDGRID_MC_SIGNUP_EMAIL_SUBJECT');
     $is_env_mc_signup_email_content = defined('SENDGRID_MC_SIGNUP_EMAIL_CONTENT');
     $is_env_mc_signup_email_content_text = defined('SENDGRID_MC_SIGNUP_EMAIL_CONTENT_TEXT');
     $is_env_mc_signup_confirmation_page = defined('SENDGRID_MC_SIGNUP_CONFIRMATION_PAGE');
     if ($response and $status != 'error') {
         $message = $response['message'];
         $status = $response['status'];
         if (array_key_exists('error_type', $response)) {
             $error_type = $response['error_type'];
         }
     }
     require_once dirname(__FILE__) . '/../view/sendgrid_settings.php';
 }