Compare commits

..

4 Commits

Author SHA1 Message Date
Fred
8d4b6efe34 added examples shortcode 2020-12-07 06:37:19 +08:00
Fred
92f6e190dc separated modifiers, added standard 2020-12-07 06:21:31 +08:00
Fred
5c11fc0552 update new api 2020-11-02 08:14:51 +08:00
Fred
8c3c022f0c update production 2020-10-27 08:06:31 +08:00
6 changed files with 128 additions and 31 deletions

View File

@@ -8,7 +8,7 @@ It produce a shortcode to fetch and format content from a APIgoat project API.
It is based on DevinVinson/WordPress-Plugin-Boilerplate(https://github.com/DevinVinson/WordPress-Plugin-Boilerplate)
## Details
* classes/APIgoatList.php is the main shortcode definition
* classes/APIgoatListModifiers.php is the main shortcode definition
* classes/APIgoatFetchAPI.php contains the authentication and query
* classes/APIgoatDoc.php is a formater

View File

@@ -3,23 +3,65 @@
class APIgoatDoc extends APIgoatTemplate
{
static function getExamples(array $data, array $headers)
{
$content = '';
$menu = '';
foreach ($data as $row) {
if (!empty($row['name'])) {
$menu .= li(href($row['name'], '#' . $row['name']), "class='page_item wd-state-closed'");
$content .= div(
anchor($row['name'])
. h2($row['name'], "class='entry-title'")
. p(trim($row['text']))
. ((!empty($row['json'])) ? div(span("Example:") . $row['json']) : ''),
"",
"class='doc-item'"
);
}
}
foreach ($headers as $name => $header) {
$menu = h3($header) . $menu;
}
return div(
div(
ul($menu, "class='doc-nav-list'"),
'',
"class='wedocs-sidebar wedocs-hide-mobile'"
) . div(
$content,
'',
"class='wedocs-single-content'"
),
'',
"class='wedocs-single-wrap'"
);
}
static function getDocs(array $data, array $headers)
{
$content = '';
$menu = '';
//preprint($data);
foreach ($data as $row) {
$menu .= li(href($row['name'], '#' . $row['title']), "class='page_item current_page_item'");
$content .= div(
anchor($row['title']) . h3($row['name'])
. h2($row['title'], "class='entry-title'")
. p($row['type'] . " " . $row['value'])
. ((!empty($row['example'])) ? pre(htmlentities($row['example'])) : '')
. p(trim($row['text']))
);
if (!empty($row['name'])) {
$menu .= li(href($row['name'], '#' . $row['title']), "class='page_item wd-state-closed'");
$content .= div(
anchor($row['title'])
. h2($row['title'], "class='entry-title'")
. h3($row['name'])
. h4($row['group'])
. span($row['type'] . " " . $row['value'])
. p(trim($row['text']))
. ((!empty($row['example'])) ? div(span("Example:") . pre(htmlentities($row['example']))) : ''),
"",
"class='doc-item'"
);
}
}
foreach ($headers as $name => $header) {

View File

@@ -9,8 +9,8 @@ include_once plugin_dir_path(dirname(__FILE__)) . 'includes/html_helper.php';
class APIgoatFetchAPI
{
private $username = 'wp-behavior@apigoat.com';
private $password = '0sKtegdSSk';
private $username = 'sysadmin';
private $password = 'vezvez';
private $baseURI = 'https://goat.local/p/goatcheese/api/v1/';
private $jwt_pubkey = '9sKjdjuue8sSjwh6';
private $jwt_alg = ['HS256'];
@@ -23,9 +23,13 @@ class APIgoatFetchAPI
$this->clientOptions = [
'verify' => false,
'content-Type' => 'application/json',
'accept' => 'application/json'
'accept' => 'application/json',
'debug' => false,
'timeout' => 10
];
//unset($_SESSION['APIgoat']);
if (!$this->authenticationValid()) {
$this->authenticate();
$this->saveCredentials();
@@ -40,26 +44,47 @@ class APIgoatFetchAPI
{
$clientOptions = $this->clientOptions;
$clientOptions['query'] = [
"Query" => [
"query" => [
"select" => [
["behavior.name", "name"], ["code", "title"], ["description", "text"], "value", "example", "type", ["behavior_category.name", "category_name"]
["behavior.name", "name"], ["code", "title"], ["description", "text"], "value", "example", "type", ["behavior_category.name", "category_name"], "group"
],
"filter" => [
"behavior" => [
0 => ["group", "Free"],
1 => ["status", "Active"]
]
["status", "Active"]
],
"join" => ["behavior_category"],
"limit" => 20
],
"debug" => true
"join" => ["behavior_category"]
]
];
//$clientOptions['debug'] = true;
$response = $this->client->get('Behavior', $clientOptions);
$body = json_decode($response->getBody()->getContents(), true);
//$body['debug'][] = $clientOptions['query'];
if ($response->getStatusCode() == 200) {
return $body;
} else {
$body = json_decode($response->getBody(), true);
return $body;
}
}
public function fetchExamples()
{
$clientOptions = $this->clientOptions;
$clientOptions['query'] = [
"query" => [
"select" => [
"name", ["description", "text"], ["example_category.name", "category_name"], "json"
],
"join" => ["example_category"]
]
];
//$clientOptions['debug'] = true;
$response = $this->client->get('Example', $clientOptions);
$body = json_decode($response->getBody()->getContents(), true);
//$body['debug'][] = $clientOptions['query'];
if ($response->getStatusCode() == 200) {
return $body;
} else {
@@ -85,11 +110,14 @@ class APIgoatFetchAPI
'u' => $this->username,
'pw' => md5($this->password)
],
'debug' => false
'debug' => false,
'timeout' => 10
];
// authenticate on API to get token
$response = $this->client->post('Authy/auth', $options);
$loginResponseDecoded = json_decode($response->getBody()->getContents(), true);
/*print_r($loginResponseDecoded);
die();*/
$this->credentials = new AccessTokenCredentials($loginResponseDecoded['token']);
}

View File

@@ -0,0 +1,25 @@
<?php
class APIgoatListExamples
{
static function init($atts, $content = null)
{
$APIgoatFetchAPI = new APIgoatFetchAPI();
$Behaviors = $APIgoatFetchAPI->fetchExamples();
if (isset($Behaviors['debug'])) {
echo "<br>" . preprint($Behaviors['debug']) . "<br>";
}
if (isset($Behaviors['messages'])) {
echo "<br>" . preprint($Behaviors['messages']) . "<br>";
}
if ($Behaviors['data']) {
$table = APIgoatDoc::getExamples($Behaviors['data'], ['Code' => 'Examples']);
return $content . div($table, '', "class='site-main'");
} else {
return $content . "<br>Error" . preprint($Behaviors);
}
}
}

View File

@@ -1,6 +1,6 @@
<?php
class APIgoatList
class APIgoatListModifiers
{
static function init($atts, $content = null)
@@ -15,7 +15,7 @@ class APIgoatList
echo "<br>" . preprint($Behaviors['messages']) . "<br>";
}*/
if ($Behaviors['data']) {
$table = APIgoatDoc::getDocs($Behaviors['data'], ['Code' => 'Parameters']);
$table = APIgoatDoc::getDocs($Behaviors['data'], ['Code' => 'Modifiers']);
return $content . div($table, '', "class='site-main'");
} else {

View File

@@ -124,7 +124,8 @@ class apigoat_doc
*/
require_once plugin_dir_path(dirname(__FILE__)) . 'public/class-apigoat_doc-public.php';
require plugin_dir_path(dirname(__FILE__)) . 'classes/APIgoatList.php';
require plugin_dir_path(dirname(__FILE__)) . 'classes/APIgoatListModifiers.php';
require plugin_dir_path(dirname(__FILE__)) . 'classes/APIgoatListExamples.php';
$this->loader = new apigoat_doc_Loader();
}
@@ -174,7 +175,8 @@ class apigoat_doc
$this->loader->add_action('init', $plugin_public, 'register_session', 1);
$this->loader->add_action('wp_enqueue_scripts', $plugin_public, 'enqueue_styles');
$this->loader->add_action('wp_enqueue_scripts', $plugin_public, 'enqueue_scripts');
$this->loader->add_shortcode('APIgoat_list', $plugin_public, array('APIgoatList', 'init'));
$this->loader->add_shortcode('APIgoat_list_modifiers', $plugin_public, array('APIgoatListModifiers', 'init'));
$this->loader->add_shortcode('APIgoat_list_examples', $plugin_public, array('APIgoatListExamples', 'init'));
}
/**