public static function get_instance()
 {
     $send_method = Sendgrid_Tools::get_send_method();
     $auth_method = Sendgrid_Tools::get_auth_method();
     switch ($send_method) {
         case 'api':
             return self::api_instance($auth_method);
             break;
         case 'smtp':
             return self::smtp_instance($auth_method);
             break;
     }
     return self::api_instance($auth_method);
 }
 /**
  * Returns the appropriate header value of authorization depending on the available credentials.
  *
  * @return  mixed   string of the header value if successful, false otherwise.
  */
 private static function get_auth_header_value()
 {
     if ("false" == Sendgrid_Tools::get_mc_opt_use_transactional()) {
         $mc_api_key = Sendgrid_Tools::get_mc_api_key();
         if (false != $mc_api_key) {
             return 'Bearer ' . $mc_api_key;
         }
     }
     $auth_method = Sendgrid_Tools::get_auth_method();
     if ('credentials' == $auth_method) {
         $creds = base64_encode(Sendgrid_Tools::get_username() . ':' . Sendgrid_Tools::get_password());
         return 'Basic ' . $creds;
     } else {
         $api_key = Sendgrid_Tools::get_api_key();
         if (false == $api_key) {
             return false;
         }
         return 'Bearer ' . $api_key;
     }
 }
 /**
  * Check template
  *
  * @param   string  $template   sendgrid template
  * @return  bool
  */
 public static function check_template($template)
 {
     if ('' == $template) {
         return true;
     }
     $url = 'v3/templates/' . $template;
     $parameters['auth_method'] = Sendgrid_Tools::get_auth_method();
     $parameters['api_username'] = Sendgrid_Tools::get_username();
     $parameters['api_password'] = Sendgrid_Tools::get_password();
     $parameters['apikey'] = Sendgrid_Tools::get_api_key();
     $response = Sendgrid_Tools::do_request($url, $parameters);
     if (!$response) {
         return false;
     }
     $response = json_decode($response, true);
     if (isset($response['error']) or isset($response['errors']) && isset($response['errors'][0]['message'])) {
         return false;
     }
     return true;
 }
 /**
  * Get SendGrid stats from API and return JSON response,
  * this function work like a page and is used for ajax request by javascript functions
  *
  * @return void;
  */
 public static function get_ajax_statistics()
 {
     if (!isset($_POST['sendgrid_nonce']) || !wp_verify_nonce($_POST['sendgrid_nonce'], 'sendgrid-nonce')) {
         die('Permissions check failed');
     }
     $parameters = array();
     $parameters['api_user'] = Sendgrid_Tools::get_username();
     $parameters['api_key'] = Sendgrid_Tools::get_password();
     $api_key = Sendgrid_Tools::get_api_key();
     if ("apikey" == Sendgrid_Tools::get_auth_method()) {
         $parameters['apikey'] = $api_key;
     }
     $parameters['data_type'] = 'global';
     if (array_key_exists('days', $_POST)) {
         $parameters['days'] = $_POST['days'];
     } else {
         $parameters['start_date'] = $_POST['start_date'];
         $parameters['end_date'] = $_POST['end_date'];
     }
     $endpoint = 'v3/stats';
     if (isset($_POST['type']) && 'general' != $_POST['type']) {
         if ('wordpress' == $_POST['type']) {
             $parameters['categories'] = 'wp_sendgrid_plugin';
         } else {
             $parameters['categories'] = urlencode($_POST['type']);
         }
         $endpoint = 'v3/categories/stats';
     }
     echo Sendgrid_Tools::curl_request($endpoint, $parameters);
     die;
 }
 /**
  * Display SendGrid settings page content
  */
 public static function show_settings_page()
 {
     if ('POST' == $_SERVER['REQUEST_METHOD']) {
         if (isset($_POST['email_test']) and $_POST['email_test']) {
             $to = $_POST['sendgrid_to'];
             $subject = stripslashes($_POST['sendgrid_subj']);
             $body = stripslashes($_POST['sendgrid_body']);
             $headers = $_POST['sendgrid_headers'];
             if (preg_match("/content-type:\\s*text\\/html/i", $headers)) {
                 $body_br = nl2br($body);
             } else {
                 $body_br = $body;
             }
             $sent = wp_mail($to, $subject, $body_br, $headers);
             if ('api' == Sendgrid_Tools::get_send_method()) {
                 $sent = json_decode($sent['body']);
                 if ("success" == $sent->message) {
                     $message = 'Email sent.';
                     $status = 'updated';
                 } else {
                     $errors = $sent->errors[0] ? $sent->errors[0] : $sent;
                     $message = 'Email not sent. ' . $errors;
                     $status = 'error';
                     $error_type = 'sending';
                 }
             } elseif ('smtp' == Sendgrid_Tools::get_send_method()) {
                 if (true === $sent) {
                     $message = 'Email sent.';
                     $status = 'updated';
                 } else {
                     $message = 'Email not sent. ' . $sent;
                     $status = 'error';
                     $error_type = 'sending';
                 }
             }
         } else {
             if (isset($_POST['auth_method'])) {
                 if ($_POST['auth_method'] == 'apikey') {
                     if (!$_POST['sendgrid_api_key']) {
                         $message = 'Api key is required';
                         $status = 'error';
                     } else {
                         if (!Sendgrid_Tools::check_api_key($_POST['sendgrid_api_key'])) {
                             $message = 'Invalid or without permissions api key';
                             $status = 'error';
                         }
                     }
                 } else {
                     if (!$_POST['sendgrid_user'] or !$_POST['sendgrid_pwd']) {
                         $message = 'Username/Password are required';
                         $status = 'error';
                     } else {
                         if (!Sendgrid_Tools::check_username_password($_POST['sendgrid_user'], $_POST['sendgrid_pwd'])) {
                             $message = 'Invalid username/password';
                             $status = 'error';
                         }
                     }
                 }
             }
             if (isset($_POST['sendgrid_name'])) {
                 $name = $_POST['sendgrid_name'];
                 update_option('sendgrid_from_name', $name);
             }
             if (isset($_POST['sendgrid_email'])) {
                 $email = $_POST['sendgrid_email'];
                 update_option('sendgrid_from_email', $email);
             }
             if (isset($_POST['sendgrid_reply_to'])) {
                 $reply_to = $_POST['sendgrid_reply_to'];
                 update_option('sendgrid_reply_to', $reply_to);
             }
             if (isset($_POST['sendgrid_categories'])) {
                 $categories = $_POST['sendgrid_categories'];
                 update_option('sendgrid_categories', $categories);
             }
             if (isset($_POST['sendgrid_template'])) {
                 $template = $_POST['sendgrid_template'];
                 update_option('sendgrid_template', $template);
             }
             if (isset($_POST['sendgrid_api'])) {
                 $method = $_POST['sendgrid_api'];
                 update_option('sendgrid_api', $method);
             }
             if (isset($_POST['auth_method'])) {
                 $auth_method = $_POST['auth_method'];
                 update_option('sendgrid_auth_method', $auth_method);
             }
             if (isset($_POST['sendgrid_port'])) {
                 $port = $_POST['sendgrid_port'];
                 update_option('sendgrid_port', $port);
             }
             if (!isset($status) or isset($status) and $status != 'error') {
                 $message = 'Options saved.';
                 $status = 'updated';
                 if (isset($_POST['sendgrid_api_key'])) {
                     $user = $_POST['sendgrid_api_key'];
                     update_option('sendgrid_api_key', $user);
                 }
                 if (isset($_POST['sendgrid_user'])) {
                     $user = $_POST['sendgrid_user'];
                     update_option('sendgrid_user', $user);
                 }
                 if (isset($_POST['sendgrid_pwd'])) {
                     $password = $_POST['sendgrid_pwd'];
                     update_option('sendgrid_pwd', $password);
                 }
             }
         }
     }
     $user = Sendgrid_Tools::get_username();
     $password = Sendgrid_Tools::get_password();
     $api_key = Sendgrid_Tools::get_api_key();
     $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();
     $allowed_methods = array('smtp', 'api');
     if (!in_array($method, $allowed_methods)) {
         $message = 'Invalid send method, available methods are: "api" or "smtp".';
         $status = 'error';
     }
     if ('smtp' == $method and !class_exists('Swift')) {
         $message = 'You must have <a href="http://wordpress.org/plugins/swift-mailer/" target="_blank">' . 'Swift-mailer plugin</a> installed and activated';
         $status = 'error';
     }
     if ($api_key) {
         if (!Sendgrid_Tools::check_api_key($api_key)) {
             $message = 'Invalid api key';
             $status = 'error';
         }
     } else {
         if ($user and $password) {
             if (!Sendgrid_Tools::check_username_password($user, $password)) {
                 $message = 'Invalid username/password';
                 $status = 'error';
             }
         }
     }
     if ($template) {
         if (!Sendgrid_Tools::check_template($template)) {
             $message = 'Template not found';
             $status = 'error';
         }
     }
     $are_global_credentials = (defined('SENDGRID_USERNAME') and defined('SENDGRID_PASSWORD'));
     $is_global_api_key = defined('SENDGRID_API_KEY');
     $has_port = defined('SENDGRID_PORT');
     require_once dirname(__FILE__) . '/../view/sendgrid_settings.php';
 }
 /**
  * Uploads a contact using the parameters specified in the settings page
  *
  * @param  mixed   $params    array of parameters from $_POST
  *
  * @return mixed              response array with message and status
  */
 private static function send_contact_upload_test($params)
 {
     $email = $params['sendgrid_test_email'];
     if (!Sendgrid_Tools::is_valid_email($email)) {
         return array('message' => 'Email address provided is invalid.', 'status' => 'error', 'error_type' => 'upload');
     }
     switch (Sendgrid_Tools::get_auth_method()) {
         case 'apikey':
             $apikey = Sendgrid_Tools::get_api_key();
             if (!Sendgrid_Tools::check_api_key($apikey, true)) {
                 return array('message' => 'API Key used for mail send is invalid or without permissions.', 'status' => 'error', 'error_type' => 'upload');
             }
             break;
         case 'credentials':
             $username = Sendgrid_Tools::get_username();
             $password = Sendgrid_Tools::get_password();
             if (!Sendgrid_Tools::check_username_password($params['sendgrid_username'], $params['sendgrid_password'], true)) {
                 return array('message' => 'Credentials used for mail send are invalid.', 'status' => 'error', 'error_type' => 'upload');
             }
             break;
         default:
             return array('message' => 'An error occured when trying to check your transactional credentials. Please check that they are correct on the General Settings tab.', 'status' => 'error', 'error_type' => 'upload');
     }
     if (false == Sendgrid_OptIn_API_Endpoint::send_confirmation_email($email, '', '', true)) {
         return array('message' => 'An error occured when trying send the subscription email. Please make sure you have configured all settings properly.', 'status' => 'error', 'error_type' => 'upload');
     }
     return array('message' => 'Subscription confirmation email was sent.', 'status' => 'updated');
 }
示例#7
0
 private static function save_settings($params)
 {
     if (!isset($params['auth_method'])) {
         $params['auth_method'] = Sendgrid_Tools::get_auth_method();
     }
     switch ($params['auth_method']) {
         case 'apikey':
             if (!isset($params['sendgrid_apikey']) or empty($params['sendgrid_apikey'])) {
                 $response = array('message' => 'API Key is empty.', 'status' => 'error');
                 Sendgrid_Tools::set_api_key('');
                 break;
             }
             if (!Sendgrid_Tools::check_api_key($params['sendgrid_apikey'], true)) {
                 $response = array('message' => 'API Key is invalid or without permissions.', 'status' => 'error');
                 break;
             }
             Sendgrid_Tools::set_api_key($params['sendgrid_apikey']);
             break;
         case 'credentials':
             if (!isset($params['sendgrid_username']) and !isset($params['sendgrid_password'])) {
                 break;
             }
             $save_username = true;
             $save_password = true;
             if (!isset($params['sendgrid_username'])) {
                 $save_username = false;
                 $params['sendgrid_username'] = Sendgrid_Tools::get_username();
             }
             if (!isset($params['sendgrid_password'])) {
                 $save_password = false;
                 $params['sendgrid_password'] = Sendgrid_Tools::get_username();
             }
             if (isset($params['sendgrid_username']) and !$params['sendgrid_username'] or isset($params['sendgrid_password']) and !$params['sendgrid_password']) {
                 $response = array('message' => 'Username or password is empty.', 'status' => 'error');
             } elseif (!Sendgrid_Tools::check_username_password($params['sendgrid_username'], $params['sendgrid_password'], true)) {
                 $response = array('message' => 'Username and password are invalid.', 'status' => 'error');
                 break;
             }
             if ($save_username) {
                 Sendgrid_Tools::set_username($params['sendgrid_username']);
             }
             if ($save_password) {
                 Sendgrid_Tools::set_password($params['sendgrid_password']);
             }
             break;
     }
     if (isset($params['sendgrid_name'])) {
         update_option('sendgrid_from_name', $params['sendgrid_name']);
     }
     if (isset($params['sendgrid_email'])) {
         if (!empty($params['sendgrid_email']) and !Sendgrid_Tools::is_valid_email($params['sendgrid_email'])) {
             $response = array('message' => 'Sending email address is not valid.', 'status' => 'error');
         } else {
             update_option('sendgrid_from_email', $params['sendgrid_email']);
         }
     }
     if (isset($params['sendgrid_reply_to'])) {
         if (!empty($params['sendgrid_reply_to']) and !Sendgrid_Tools::is_valid_email($params['sendgrid_reply_to'])) {
             $response = array('message' => 'Reply email address is not valid.', 'status' => 'error');
         } else {
             update_option('sendgrid_reply_to', $params['sendgrid_reply_to']);
         }
     }
     if (isset($params['sendgrid_categories'])) {
         update_option('sendgrid_categories', $params['sendgrid_categories']);
     }
     if (isset($params['sendgrid_stats_categories'])) {
         update_option('sendgrid_stats_categories', $params['sendgrid_stats_categories']);
     }
     if (isset($params['sendgrid_template'])) {
         if (!Sendgrid_Tools::check_template($params['sendgrid_template'])) {
             $response = array('message' => 'Template not found.', 'status' => 'error');
         } else {
             update_option('sendgrid_template', $params['sendgrid_template']);
         }
     }
     if (isset($params['send_method'])) {
         update_option('sendgrid_api', $params['send_method']);
     }
     if (isset($params['auth_method']) && in_array($params['auth_method'], Sendgrid_Tools::$allowed_auth_methods)) {
         update_option('sendgrid_auth_method', $params['auth_method']);
     }
     if (isset($params['sendgrid_port'])) {
         update_option('sendgrid_port', $params['sendgrid_port']);
     }
     if (isset($params['content_type'])) {
         update_option('sendgrid_content_type', $params['content_type']);
     }
     if (isset($response) and $response['status'] == 'error') {
         return $response;
     }
     return array('message' => 'Options are saved.', 'status' => 'updated');
 }
 /**
  * Returns the unsubscribe groups from SendGrid
  *
  * @return  mixed   an array of groups if the request is successful, false otherwise.
  */
 public static function get_all_unsubscribe_groups()
 {
     $url = 'v3/asm/groups';
     $parameters['auth_method'] = Sendgrid_Tools::get_auth_method();
     $parameters['api_username'] = Sendgrid_Tools::get_username();
     $parameters['api_password'] = Sendgrid_Tools::get_password();
     $parameters['apikey'] = Sendgrid_Tools::get_api_key();
     if ('apikey' == $parameters['auth_method'] and 'true' != self::get_asm_permission()) {
         return false;
     }
     $response = Sendgrid_Tools::do_request($url, $parameters);
     if (!$response) {
         return false;
     }
     $response = json_decode($response, true);
     if (isset($response['error']) or isset($response['errors']) and isset($response['errors'][0]['message'])) {
         return false;
     }
     return $response;
 }