Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

more intuitive ui #18

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
9 changes: 9 additions & 0 deletions .editorconfig
@@ -0,0 +1,9 @@
root = true

[*]
indent_style = space
indent_size = 2
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
end_of_line = lf
Binary file added assets/icons/famfamfam/cross.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
22 changes: 22 additions & 0 deletions assets/icons/famfamfam/readme.txt
@@ -0,0 +1,22 @@
Silk icon set 1.3

_________________________________________
Mark James
http://www.famfamfam.com/lab/icons/silk/
_________________________________________

This work is licensed under a
Creative Commons Attribution 2.5 License.
[ http://creativecommons.org/licenses/by/2.5/ ]

This means you may use it for any purpose,
and make any changes you like.
All I ask is that you include a link back
to this page in your credits.

Are you using this icon set? Send me an email
(including a link or picture if available) to
mjames@gmail.com

Any other questions about this icon set please
contact mjames@gmail.com
Binary file added assets/icons/famfamfam/tick.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/icons/loading.gif
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
140 changes: 127 additions & 13 deletions lib/WP_Communibase_SettingsPage.php
Expand Up @@ -48,18 +48,74 @@ public function create_admin_page()
?>
<div>
<a target="_blank" rel="noopener" href="https://www.communibase.nl">
<img src="<?php echo plugins_url('communibase/assets/siteLogo.png') ?>" />
<img src="<?php echo plugins_url('communibase/assets/siteLogo.png') ?>"/>
</a>
</div>
<div class="communibase-unknown-info">
<a href="https://www.communibase.nl" target="_blank" rel="noopener">Communibase</a> is a paid service for community/association/club/society membership administration.
<ul>
<li><a href="https://www.communibase.nl/#openLogin" target="_blank" rel="noopener">Request a demo account</a></li>
<li><a href="https://www.communibase.nl" target="_blank" rel="noopener">More information</a></li>
</ul>
</div>
<div class="wrap">
<form method="post" action="options.php">
<?php
// This prints out all hidden setting fields
settings_fields('communibase');
do_settings_sections('communibase');
?>
<input type="button" name="validateConnection" id="comunibase-validateConnection" class="button button-primary" value="Validate connection">
<?php
submit_button();
?>
</form>
<script>
var $apiKeyInputEl = jQuery('#communibase_api_key');
var currentCommunibaseApiKey = null;
var $apiKeyCheckStatusEl = jQuery('.communibase-api-key-check');

function communibase_validateKey() {
return;
if ($apiKeyInputEl.val() === '') {
return;
}
currentCommunibaseApiKey = $apiKeyInputEl.val();
$apiKeyCheckStatusEl
.html('<img src="<?php echo plugins_url('communibase/assets/icons/loading.gif') ?>" />');
jQuery.post('/wp-json/communibase/0.1/validateKey', {
key: jQuery(this).val()
}).then(function (res) {
var statusIcon = '<?php echo plugins_url('communibase/assets/icons/famfamfam/tick.png') ?>';
if (!res) {
statusIcon = '<?php echo plugins_url('communibase/assets/icons/famfamfam/cross.png') ?>';
}
$apiKeyCheckStatusEl.find('img').attr('src', statusIcon);
}).fail(function (res) {
console.log(res);
var statusIcon = '<?php echo plugins_url('communibase/assets/icons/famfamfam/cross.png') ?>';
$apiKeyCheckStatusEl.addClass('danger').find('img').attr('src', statusIcon).after('<div>' + res.responseJSON.message + '</div>');
});
}

jQuery('#comunibase-validateConnection').on('click', communibase_validateKey).trigger('click');
jQuery('#communibase_api_url, #communibase_api_custom_url, #communibase_api_custom_host').parent().parent().hide();
</script>
<style>
.communibase-api-key-check {
display: inline-block;
vertical-align: middle;
}

.communibase-api-key-check img,
.communibase-api-key-check div {
display: inline-block;
}
.communibase-api-key-check.danger {
color: red;
}

</style>
</div>
<?php
}
Expand All @@ -75,8 +131,8 @@ public function page_init()

add_settings_section(
'communibase_section_id', // ID
'Settings', // Title
array($this, 'print_section_info'), // Callback
'', // Title
'', // Callback
'communibase' // Page
);

Expand All @@ -88,20 +144,43 @@ public function page_init()
'communibase_section_id' // Section
);

add_settings_section(
'communibase_section_deviant', // ID
'', // Title
array($this, 'print_deviant_section_info'), // Callback
'communibase' // Page
);

add_settings_field(
'api_custom_url',
'Use deviant API',
array($this, 'renderFieldUseProdApi'), // Callback
'communibase',
'communibase_section_deviant'
);

add_settings_field(
'api_url',
'API URL',
array($this, 'renderFieldApiUrl'), // Callback
'communibase',
'communibase_section_id'
'communibase_section_deviant'
);

add_settings_field(
'api_url_custom',
'Custom API URL',
array($this, 'renderFieldCustomApiUrl'), // Callback
'communibase',
'communibase_section_deviant'
);

add_settings_field(
'api_host',
'API URL Host',
array($this, 'renderFieldApiHost'), // Callback
'Custom API URL Host',
array($this, 'renderFieldCustomApiHost'), // Callback
'communibase',
'communibase_section_id'
'communibase_section_deviant'
);
}

Expand Down Expand Up @@ -133,9 +212,17 @@ public function sanitize($input)
/**
* Print the Section text
*/
public function print_section_info()
public function print_main_section_info()
{
print 'Enter your connection settings below:';
print 'Enter your connection settings';
}

/**
* Print the Section text
*/
public function print_deviant_section_info()
{
print 'In some cases you may need to use a deviant API, in this case set the following';
}

/**
Expand All @@ -144,29 +231,56 @@ public function print_section_info()
public function renderFieldApiKey()
{
printf(
'<input type="text" id="communibase_api_key" name="communibase[api_key]" value="%s" placeholder="" />',
'<input type="text" id="communibase_api_key" name="communibase[api_key]" value="%s" placeholder="" />' .
'<div class="communibase-api-key-check"></div>',
isset($this->options['api_key']) ? esc_attr($this->options['api_key']) : ''
);
}

const API_PRODUCTION = 'https://api.communibase.nl/0.1/';

/**
*
*/
public function renderFieldUseProdApi()
{
$isProductionApi = empty($this->options['api_url']) || $this->options['api_url'] === self::API_PRODUCTION;
echo '<input type="checkbox" id="communibase_use_deviant_api" name="communibase[use_deviant_api]" ' .
($isProductionApi ? '' : 'checked="checked"') .
'/>';
}

/**
* Get the settings option array and print one of its values
*/
public function renderFieldApiUrl()
{
// <input type="text" id="communibase_api_url" name="communibase[api_url]" value="%s" placeholder="https://api.communibase.nl/0.1/"/>
printf(
'<select id="communibase_api_url" name="communibase[api_url]" >' .
'<option value="https://api.communibase.nl/0.1/">PRODUCTION (https://api.communibase.nl/0.1/)</option>' .
'<option value="https://api.staging.communibase.nl/0.1/">STAGING (https://api.staging.communibase.nl/0.1/)</option>' .
'<option value="-1">CUSTOM</option>' .
'</select>',
isset($this->options['api_url']) ? esc_attr($this->options['api_url']) : ''
);
}

public function renderFieldCustomApiUrl()
{
printf(
'<input type="text" id="communibase_api_url" name="communibase[api_url]" value="%s" placeholder="https://api.communibase.nl/0.1/"/>',
'<input type="text" id="communibase_api_custom_url" name="communibase[api_url]" value="%s" placeholder="https://api.communibase.nl/0.1/"/>',
isset($this->options['api_url']) ? esc_attr($this->options['api_url']) : ''
);
}

/**
* Get the settings option array and print one of its values
*/
public function renderFieldApiHost()
public function renderFieldCustomApiHost()
{
printf(
'<input type="text" id="communibase_api_host" name="communibase[api_host]" value="%s" />',
'<input type="text" id="communibase_api_custom_host" name="communibase[api_host]" value="%s" />',
isset($this->options['api_host']) ? esc_attr($this->options['api_host']) : ''
);
}
Expand Down
23 changes: 23 additions & 0 deletions lib/api/WP_Communibase_API.php
@@ -0,0 +1,23 @@
<?php

/**
* Class WP_Communibase_API
*/
class WP_Communibase_API
{

/**
*
*/
const NAMESPACE = 'communibase/0.1';

/**
*
*/
public static function init() {
add_action('rest_api_init', function () {
require_once __DIR__ . '/WP_Communibase_API_ValidateKey.php';
(new WP_Communibase_API_ValidateKey())->register_routes();
});
}
}
52 changes: 52 additions & 0 deletions lib/api/WP_Communibase_API_ValidateKey.php
@@ -0,0 +1,52 @@
<?php

/**
* Class WP_Communibase_API_ValidateKey
*/
class WP_Communibase_API_ValidateKey extends \WP_REST_Controller
{

/**
* Register route(s)
*/
public function register_routes()
{
register_rest_route(WP_Communibase_API::NAMESPACE, '/validateKey', array(
'methods' => 'POST',
'callback' => array( $this, 'post' ),
'args' => array(
'key' => array(
'type' => 'string',
'required' => true,
'sanitize_callback' => 'sanitize_text_field'
)
),
'permissions_callback' => array( $this, 'permissions' ),
));
}

/**
* Check request permissions
*
* @return bool
*/
public function permissions()
{
return current_user_can( 'manage_options' );
}

/**
* @param WP_REST_Request $req
*
* @return WP_Error|WP_REST_Response
*/
public function post(\WP_REST_Request $req)
{
try {
WP_Communibase_Connector::getInstance()->search('Person2', [], ['limit' => 1]);
return new \WP_REST_Response(true, 200);
} catch (\Exception $ex) {
return new \WP_Error('error', $ex->getMessage(), array('status' => 500));
}
}
}
6 changes: 6 additions & 0 deletions plugin.php
Expand Up @@ -21,8 +21,14 @@

// Add Admin Settings page
if (is_admin()) {

// Init Settings Page
require_once __DIR__ . '/lib/WP_Communibase_SettingsPage.php';
new WP_Communibase_SettingsPage();
}

// Init API endpoints
require_once __DIR__ . '/lib/api/WP_Communibase_API.php';
WP_Communibase_API::init();

// non-admin enqueues, actions, and filters