Skip to content

Commit

Permalink
Merge 1caf329 into fc9a7e1
Browse files Browse the repository at this point in the history
  • Loading branch information
rajumsys committed Jun 27, 2017
2 parents fc9a7e1 + 1caf329 commit 36cea0a
Show file tree
Hide file tree
Showing 4 changed files with 188 additions and 67 deletions.
244 changes: 178 additions & 66 deletions admin.widget.class.php
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<?php

namespace WPSparkPost;
// If ABSPATH is defined, we assume WP is calling us.
// Otherwise, this could be an illicit direct request.
Expand All @@ -17,18 +18,29 @@ public function __construct()
$this->settings = SparkPost::get_settings(false);
add_action('admin_menu', array($this, 'add_plugin_page'));
add_action('admin_init', array($this, 'admin_page_init'));
}

public function asset_url($relative_asset_path)
{
return plugins_url($relative_asset_path, __FILE__);
}

public function add_assets()
{
wp_enqueue_style('sp-admin-css', $this->asset_url('assets/styles.css'));
}

public function add_plugin_page()
{
add_options_page(
$page = add_options_page(
'SparkPost Settings',
'SparkPost',
'manage_options',
'wpsp-setting-admin',
array($this, 'wpsp_admin_page')
);

add_action("admin_print_styles-{$page}", array($this, 'add_assets'));
}

protected function render_message($msg, $msg_type = 'error')
Expand Down Expand Up @@ -73,7 +85,7 @@ public function test_email_sending($recipient, $debug = false, $include_attachme
}


if($include_attachment) {
if ($include_attachment) {
$attachments = array(__DIR__ . '/sample.txt');
} else {
$attachments = array();
Expand All @@ -100,81 +112,154 @@ public function test_email_sending($recipient, $debug = false, $include_attachme
}
}

public function wpsp_admin_page()
function render_tabs($active = '')
{
$tabs = array(
'0' => array(
'slug' => 'basic',
'href' => admin_url(add_query_arg(array('page' => 'wpsp-setting-admin', 'tab' => 'basic'), 'admin.php')),
'name' => 'Basic Settings'
),
'1' => array(
'slug' => 'overrides',
'href' => admin_url(add_query_arg(array('page' => 'wpsp-setting-admin', 'tab' => 'overrides'), 'admin.php')),
'name' => 'Overrides'
),
'2' => array(
'slug' => 'test',
'href' => admin_url(add_query_arg(array('page' => 'wpsp-setting-admin', 'tab' => 'test'), 'admin.php')),
'name' => 'Test'
),
);

$inactive_class = 'nav-tab';
$active_class = 'nav-tab nav-tab-active';
$markups = '<h2 class="nav-tab-wrapper">';
foreach (array_values($tabs) as $tab_data) {
$is_current = (bool)($tab_data['slug'] == $active);
$tab_class = $is_current ? $active_class : $inactive_class;
$markups .= '<a href="' . esc_url($tab_data['href']) . '" class="' . esc_attr($tab_class) . '">' . esc_html($tab_data['name']) . '</a>';
}

$markups .= '</h2>';
echo $markups;


}


function render_basic_settings()
{
?>
<div class="wrap">
<form method="post" action="options.php">
<?php
settings_fields('sp_settings_group');
do_settings_sections('sp-options');
do_settings_sections('sp-overrides');
submit_button();
?>
</form>
<hr/>
<form method="post" action="options.php">
<?php
settings_fields('sp_settings_group_basic');
do_settings_sections('sp-options-basic');
submit_button();
?>
</form>
<?php
}

function render_overrides()
{
?>
<form method="post" action="options.php">
<?php
settings_fields('sp_settings_group_overrides');
do_settings_sections('sp-options-overrides');
submit_button();
?>
</form>
<hr/>
<?php
}


protected function render_test_section()
{
if (isset($_POST['sp_test_email'])) {
$this->test_email_sending($_POST['to_email'], !empty($_POST['enable_debugging']), !empty($_POST['include_attachment']));
}
?>
<form method="post" action="admin.php?page=wpsp-setting-admin&tab=test">
<input type="hidden" name="sp_test_email" value=""/>

<div>
<h3>Test Email</h3>
<?php
if (isset($_POST['sp_test_email'])) {
$this->test_email_sending($_POST['to_email'], !empty($_POST['enable_debugging']), !empty($_POST['include_attachment']));
}
do_settings_sections('sp-test-email');
submit_button('Send Test Email');
?>

<form method="post" action="">
<input type="hidden" name="sp_test_email" value=""/>
<?php
do_settings_sections('sp-test-email');
submit_button('Send Test Email', 'secondary');
?>
</form>
</div>
</form>
<?php
}

public function wpsp_admin_page()
{
$image_url = $this->asset_url('assets/logo-40.png');
$active_tab = isset($_GET['tab']) ? $_GET['tab'] : 'basic';


?>
<div class="sp-heading"><img src="<?php echo $image_url ?>" alt="SparkPost"> &nbsp;&nbsp;
<h2>SparkPost</h2>
</div>
<div class="wrap">

<?php

$this->render_tabs($active_tab);

if ($active_tab == 'overrides') {
$this->render_overrides();
} else if ($active_tab == 'test') {
$this->render_test_section();
} else {
$this->render_basic_settings();
}
?>
</div>
<?php
}


public function admin_page_init()
{
register_setting('sp_settings_group', 'sp_settings', array($this, 'sanitize'));
add_settings_section('general', 'SparkPost Settings', null, 'sp-options');
add_settings_field('enable_sparkpost', '', array($this, 'render_enable_sparkpost_field'), 'sp-options', 'general');
add_settings_field('sending_method', 'Method*', array($this, 'render_sending_method_field'), 'sp-options', 'general');
add_settings_field('password', 'API Key*', array($this, 'render_password_field'), 'sp-options', 'general');
add_settings_field('enable_tracking', 'Enable tracking*', array($this, 'render_enable_tracking_field'), 'sp-options', 'general');
add_settings_field('template', 'Template', array($this, 'render_template_field'), 'sp-options', 'general');
add_settings_field('transactional', 'Transactional', array($this, 'render_transactional_field'), 'sp-options', 'general');

add_settings_section('overrides', 'Overrides', null, 'sp-overrides');
add_settings_field('from_name', 'From name', array($this, 'render_from_name_field'), 'sp-overrides', 'overrides');
add_settings_field('from_email', 'From email', array($this, 'render_from_email_field'), 'sp-overrides', 'overrides');
register_setting('sp_settings_group_basic', 'sp_settings_basic', array($this, 'sanitize_basic'));
register_setting('sp_settings_group_overrides', 'sp_settings_overrides', array($this, 'sanitize_overrides'));
register_setting('sp-test-email', 'sp_settings_test', array($this, 'sanitize_test'));

add_settings_section('general', 'Basic settings', null, 'sp-options-basic');
add_settings_field('enable_sparkpost', 'Enable*', array($this, 'render_enable_sparkpost_field'), 'sp-options-basic', 'general');
add_settings_field('sending_method', 'Method*', array($this, 'render_sending_method_field'), 'sp-options-basic', 'general');
add_settings_field('password', 'API Key*', array($this, 'render_password_field'), 'sp-options-basic', 'general');
add_settings_field('template', 'Template', array($this, 'render_template_field'), 'sp-options-basic', 'general');

add_settings_section('overrides', 'Overrides', null, 'sp-options-overrides');
add_settings_field('from_name', 'From name', array($this, 'render_from_name_field'), 'sp-options-overrides', 'overrides');
add_settings_field('from_email', 'From email', array($this, 'render_from_email_field'), 'sp-options-overrides', 'overrides');
add_settings_field('transactional', 'Transactional', array($this, 'render_transactional_field'), 'sp-options-overrides', 'overrides');
add_settings_field('enable_tracking', 'Enable tracking*', array($this, 'render_enable_tracking_field'), 'sp-options-overrides', 'overrides');

add_settings_section('test_email', '', null, 'sp-test-email');
add_settings_field('to_email', 'Recipient*', array($this, 'render_to_email_field'), 'sp-test-email', 'test_email');
add_settings_field('include_attachment', '', array($this, 'render_include_attachment_field'), 'sp-test-email', 'test_email');
add_settings_field('debug_messages', 'Debug', array($this, 'render_enable_debugging_field'), 'sp-test-email', 'test_email');
}

public function sanitize($input)
public function sanitize_basic($input)
{

$new_input = array();

if (!empty($input['from_email'])) {
$new_input['from_email'] = sanitize_text_field($input['from_email']);
}

if (!empty($input['from_name'])) {
$new_input['from_name'] = sanitize_text_field($input['from_name']);
}

if (!empty($input['template'])) {
$new_input['template'] = sanitize_text_field($input['template']);
}

if (empty($input['password'])) {
add_settings_error('Password', esc_attr('password'), 'API Key is required', 'error');
} else {
if(SparkPost::is_key_obfuscated(esc_attr($input['password']))) { //do not change password
if (SparkPost::is_key_obfuscated(esc_attr($input['password']))) { //do not change password
$new_input['password'] = $this->settings['password'];
} else {
$new_input['password'] = sanitize_text_field($input['password']);
Expand Down Expand Up @@ -207,16 +292,36 @@ public function sanitize($input)
break;
}

if(!empty($input['enable_tracking'])) {
return $new_input;
}


public function sanitize_overrides($input)
{
$new_input = array();

if (!empty($input['from_email'])) {
$new_input['from_email'] = sanitize_text_field($input['from_email']);
}

if (!empty($input['from_name'])) {
$new_input['from_name'] = sanitize_text_field($input['from_name']);
}

if (!empty($input['template'])) {
$new_input['template'] = sanitize_text_field($input['template']);
}

if (!empty($input['enable_tracking'])) {
$new_input['enable_tracking'] = true;
} else {
$new_input['enable_tracking'] = false;
}

if(!empty($input['transactional'])) {
$new_input['transactional'] = true;
if (!empty($input['transactional'])) {
$new_input['transactional'] = true;
} else {
$new_input['transactional'] = false;
$new_input['transactional'] = false;
}

return $new_input;
Expand All @@ -225,21 +330,21 @@ public function sanitize($input)
public function render_enable_sparkpost_field()
{
printf(
'<label><input type="checkbox" id="enable_sparkpost" name="sp_settings[enable_sparkpost]" value="1" %s />Send email using SparkPost</label>', $this->settings['enable_sparkpost'] ? 'checked' : ''
'<label><input type="checkbox" id="enable_sparkpost" name="sp_settings_basic[enable_sparkpost]" value="1" %s />Send email using SparkPost</label>', $this->settings['enable_sparkpost'] ? 'checked' : ''
);
}

public function render_username_field()
{
echo '<input type="text" id="username" name="sp_settings[username]" class="regular-text" value="SMTP_Injection" readonly />';
echo '<input type="text" id="username" name="sp_settings_basic[username]" class="regular-text" value="SMTP_Injection" readonly />';
}

public function render_password_field()
{
$api_key = SparkPost::obfuscate_api_key($this->settings['password']);

printf(
'<input type="text" id="password" name="sp_settings[password]" class="regular-text" value="%s" /><br/>
'<input type="text" id="password" name="sp_settings_basic[password]" class="regular-text" value="%s" /><br/>
<small><ul><li>For SMTP, set up an API key with the <strong>Send via SMTP</strong> permission</li>
<li>For HTTP API, set up an API Key with the <strong>Transmissions: Read/Write, Templates: Read/Write</strong> permissions</li><a href="https://support.sparkpost.com/customer/portal/articles/1933377-create-api-keys" target="_blank">Need help creating a SparkPost API key?</a></small>',
isset($api_key) ? $api_key : ''
Expand All @@ -249,37 +354,44 @@ public function render_password_field()
public function render_template_field()
{
?>
<input type="text" id="template" name="sp_settings[template]" class="regular-text"
<input type="text" id="template" name="sp_settings_basic[template]" class="regular-text"
value="<?php echo $this->settings['template']; ?>"/><br/>
<small>
<ul>
<li>- Please see <a href="https://support.sparkpost.com/customer/portal/articles/2409547-using-templates-with-the-sparkpost-wordpress-plugin" target="_blank">this article</a> for detailed information about using templates with this plugin.</li>
<li>- Please see <a
href="https://support.sparkpost.com/customer/portal/articles/2409547-using-templates-with-the-sparkpost-wordpress-plugin"
target="_blank">this article</a> for detailed information about using templates with this
plugin.
</li>
<li>- Templates can only be used with the HTTP API.</li>
<li>- Leave this field blank to disable use of a template. You can still specify it by <a href="https://github.com/SparkPost/wordpress-sparkpost/blob/master/docs/hooks.md" target="_blank">using hooks</a>.</li>
<li>- Leave this field blank to disable use of a template. You can still specify it by <a
href="https://github.com/SparkPost/wordpress-sparkpost/blob/master/docs/hooks.md"
target="_blank">using hooks</a>.
</li>
</ul>
</small>
<?php
<?php
}

public function render_from_email_field()
{
$hint = '<strong>Important:</strong> Domain must match with one of your verified sending domains.';
if(empty($this->settings['from_email'])){
if (empty($this->settings['from_email'])) {
$hostname = parse_url(get_bloginfo('url'), PHP_URL_HOST);
$hint .= sprintf(' When left blank, <strong>%s</strong> will be used as email domain', $hostname);
}

$hint = sprintf('<small>%s</small>', $hint);
printf(
'<input type="email" id="from_email" name="sp_settings[from_email]" class="regular-text" value="%s" /><br/>%s',
'<input type="email" id="from_email" name="sp_settings_overrides[from_email]" class="regular-text" value="%s" /><br/>%s',
isset($this->settings['from_email']) ? esc_attr($this->settings['from_email']) : '', $hint
);
}

public function render_from_name_field()
{
printf(
'<input type="text" id="from_name" name="sp_settings[from_name]" class="regular-text" value="%s" />',
'<input type="text" id="from_name" name="sp_settings_overrides[from_name]" class="regular-text" value="%s" />',
isset($this->settings['from_name']) ? esc_attr($this->settings['from_name']) : ''
);
}
Expand All @@ -292,7 +404,7 @@ public function render_sending_method_field()
$selected_method = !empty($method) ? $method : 'api';
$selected_port = !empty($port) ? $port : 587;

echo '<select name="sp_settings[sending_method]">
echo '<select name="sp_settings_basic[sending_method]">
<option value="api" ' . (($selected_method == 'api') ? 'selected' : '') . '>HTTP API (Default)</option>
<option value="smtp587" ' . (($selected_method == 'smtp' && $selected_port == 587) ? 'selected' : '') . '>SMTP (Port 587)</option>
<option value="smtp2525" ' . (($selected_method == 'smtp' && $selected_port == 2525) ? 'selected' : '') . '>SMTP (Port 2525)</option>
Expand All @@ -302,7 +414,7 @@ public function render_sending_method_field()
public function render_enable_tracking_field()
{
printf(
'<label><input type="checkbox" id="enable_tracking" name="sp_settings[enable_tracking]" value="1" %s />Track clicks/opens in SparkPost</label>', $this->settings['enable_tracking'] ? 'checked' : ''
'<label><input type="checkbox" id="enable_tracking" name="sp_settings_overrides[enable_tracking]" value="1" %s />Track clicks/opens in SparkPost</label>', $this->settings['enable_tracking'] ? 'checked' : ''
);
}

Expand All @@ -318,9 +430,9 @@ public function render_enable_debugging_field()

public function render_transactional_field()
{
printf('<label><input type="checkbox" id="transactional" name="sp_settings[transactional]" value="1" %s />Mark emails as transactional</label>
printf('<label><input type="checkbox" id="transactional" name="sp_settings_overrides[transactional]" value="1" %s />Mark emails as transactional</label>
<br/><small>Upon checked, by default, it\'ll set mark all emails as transactional. It should be set false (using hooks) for non-transactional emails.</small>',
$this->settings['transactional'] ? 'checked' : '');
$this->settings['transactional'] ? 'checked' : '');

}

Expand Down
Binary file added assets/logo-40.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions assets/styles.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
.sp-heading {
display: flex;
align-items: center;
}
Loading

0 comments on commit 36cea0a

Please sign in to comment.