Skip to content
Snippets Groups Projects
Commit bc5d0452 authored by Lucas García's avatar Lucas García
Browse files

feat: add api endpoints on options page

parent 853229c1
No related branches found
No related tags found
No related merge requests found
<?php
/**
* Define menu page.
*/
add_action('admin_menu', 'wpct_erp_forms_add_admin_menu');
function wpct_erp_forms_add_admin_menu()
{
add_options_page(
'WPCT ERP Forms',
'WPCT ERP Forms',
'manage_options',
'wpct_erp_forms',
'wpct_erp_forms_render'
);
}
/**
* Paint the settings page
*/
function wpct_erp_forms_render()
{
echo '<div class="wrap">';
echo '<h1>WPCT ERP Forms</h1>';
echo '<form action="options.php" method="post">';
settings_fields('wpct_erp_forms');
do_settings_sections('wpct_erp_forms');
submit_button();
echo '</form>';
echo '</div>';
}
/**
* Define settings.
*/
add_action('admin_init', 'wpct_erp_forms_init_settings', 50);
function wpct_erp_forms_init_settings()
{
register_setting(
'wpct_erp_forms',
'wpct_erp_forms_general',
array(
'type' => 'array',
'description' => __('Configuració global dels formularis', 'wpct-erp-forms'),
'show_in_rest' => false,
'default' => array(
'coord_id' => 0,
'notification_receiver' => 'admin@example.com'
)
)
);
// Secció general
add_settings_section(
'wpct_erp_forms_general_section',
__('Global', 'wpct-erp-forms'),
'wpct_erp_forms_general_section_render',
'wpct_erp_forms'
);
add_settings_field(
'notification_receiver',
__('Error notification receiver', 'wpct-erp-forms'),
fn () => wpct_erp_forms_option_render('notification_receiver'),
'wpct_erp_forms',
'wpct_erp_forms_general_section'
);
add_settings_field(
'coord_id',
__('ID de la coordinadora', 'wpct-erp-forms'),
fn () => wpct_erp_forms_option_render('coord_id'),
'wpct_erp_forms',
'wpct_erp_forms_general_section'
);
}
function wpct_erp_forms_option_getter($group, $option)
{
$options = get_option($group) ? get_option($group) : [];
return key_exists($option, $options) ? $options[$option] : '';
}
function wpct_erp_forms_option_render($option)
{
echo '<input type="text" name="wpct_erp_forms_general[' . $option . ']" value="' . wpct_erp_forms_option_getter('wpct_erp_forms_general', $option) . '">';
}
/**
* Callbacks for the settings sections
*/
function wpct_erp_forms_general_section_render()
{
echo __('General settings', 'wpct-erp-forms');
}
<?php
namespace WPCT_ERP_FORMS\Settings;
class Menu
{
private $setting = null;
public function __construct($setting)
{
$this->setting = $setting;
}
public function register()
{
add_options_page(
'WPCT ERP Forms',
'WPCT ERP Forms',
'manage_options',
$this->setting->getName(),
function () {
$this->render_page();
}
);
}
private function render_page()
{
ob_start();
?>
<div class="wrap">
<h1>WPCT ERP Forms</h1>
<form action="options.php" method="post">
<?php
settings_fields($this->setting->getName());
do_settings_sections($this->setting->getName());
submit_button();
?>
</form>
</div>
<?php
echo ob_get_clean();
}
}
<?php
namespace WPCT_ERP_FORMS\Settings;
class Setting
{
private $_name = 'wpct_erp_forms';
private $_default_endpoint = '/api/private/crm-lead';
public function getName()
{
return $this->_name;
}
public function register()
{
/* General group */
register_setting(
$this->_name,
'wpct_erp_forms_general',
[
'type' => 'array',
'description' => __('Configuració global dels formularis', 'wpct-erp-forms'),
'show_in_rest' => false,
'default' => [
'coord_id' => 0,
'notification_receiver' => 'admin@example.com',
],
]
);
/* General section */
add_settings_section(
'wpct_erp_forms_general_section',
__('General', 'wpct-erp-forms'),
function () {
echo '<p>' . __('General settings', 'wpct-erp-forms') . '</p>';
},
$this->_name,
);
/* General fields */
add_settings_field(
'notification_receiver',
__('Error notification receiver', 'wpct-erp-forms'),
function () {
echo $this->field_render('wpct_erp_forms_general', 'notification_receiver');
},
$this->_name,
'wpct_erp_forms_general_section'
);
add_settings_field(
'coord_id',
__('ID de la coordinadora', 'wpct-erp-forms'),
function () {
echo $this->field_render('wpct_erp_forms_general', 'coord_id');
},
$this->_name,
'wpct_erp_forms_general_section'
);
/* API group */
register_setting(
$this->_name,
'wpct_erp_forms_api',
[
'type' => 'array',
'description' => __('Configuració de la API dels formularis', 'wpct-erp-forms'),
'show_in_rest' => false,
'default' => [
'endpoints' => [
[
'form_id' => 0,
'endpoint' => $this->_default_endpoint
],
],
]
]
);
/* API section */
add_settings_section(
'wpct_erp_forms_api_section',
__('API', 'wpct-erp-forms'),
function () {
echo '<p>' . __('API settings', 'wpct-erp-forms') . '</p>';
},
$this->_name,
);
/* API fields */
add_settings_field(
'api_endpoints',
__('Endpoints', 'wpct-erp-forms'),
function () {
echo $this->field_render('wpct_erp_forms_api', 'endpoints');
echo $this->control_render('wpct_erp_forms_api', 'endpoints');
},
$this->_name,
'wpct_erp_forms_api_section',
[
'class' => 'wpct_erp_forms_api_endpoints'
]
);
}
private function field_render($setting, $field, $value = null)
{
if ($value === null) $value = $this->option_getter($setting, $field);
if (!is_array($value)) {
return $this->input_render($setting, $field, $value);
} else {
return $this->fieldset_render($setting, $field, $value);
}
}
private function input_render($setting, $field, $value)
{
return "<input type='text' name='{$setting}[{$field}]' value='{$value}' />";
}
private function fieldset_render($setting, $field, $data)
{
$fieldset = "<table id='{$setting}[{$field}]'>";
$is_list = is_list($data);
foreach (array_keys($data) as $key) {
$fieldset .= '<tr>';
if (!$is_list) $fieldset .= "<th>{$key}</th>";
$_field = $field . '][' . $key;
$fieldset .= "<td>{$this->field_render($setting,$_field,$data[$key])}</td>";
$fieldset .= '</tr>';
}
$fieldset .= '</table>';
return $fieldset;
}
private function control_render($setting, $field)
{
ob_start();
?>
<div class="<?= $setting; ?>[<?= $field ?>]--controls">
<button class="button button-primary" data-action="add">Add</button>
<button class="button button-secondary" data-action="remove">Remove</button>
</div>
<script>
<?php include 'fieldsetControl.js' ?>
</script>
<?php
return ob_get_clean();
}
private function option_getter($setting, $option)
{
$setting = get_option($setting) ? get_option($setting) : [];
if (!key_exists($option, $setting)) return null;
return $setting[$option];
}
}
function is_list($arr)
{
if (!is_array($arr)) return false;
if (sizeof($arr) === 0) return true;
return array_keys($arr) === range(0, count($arr) - 1);
}
// Script to be buffered from settings class
(function () {
function renderRowContent(key) {
return `<table id="<?= $setting ?>[<?= $field ?>][${key}]">
<tr>
<th>form_id</th>
<td><input type="text" name="<?= $setting ?>[<?= $field ?>][${key}][form_id]" value="0"></td>
</tr>
<tr>
<th>endpoint</th>
<td><input type="text" name="<?= $setting ?>[<?= $field ?>][${key}][endpoint]" value="<?= $this->_default_endpoint ?>"></td>
</tr>
</table>`;
}
function addItem(ev) {
ev.preventDefault();
const table = document.getElementById("<?= $setting ?>[<?= $field ?>]")
.children[0];
const tr = document.createElement("tr");
tr.innerHTML =
"<td>" + renderRowContent(table.children.length) + "</td>";
table.appendChild(tr);
}
function removeItem(ev) {
ev.preventDefault();
const table = document.getElementById("<?= $setting ?>[<?= $field ?>]")
.children[0];
const rows = table.children;
table.removeChild(rows[rows.length - 1]);
}
const buttons =
document.currentScript.previousElementSibling.querySelectorAll(
"button"
);
buttons.forEach((btn) => {
const callback = btn.dataset.action === "add" ? addItem : removeItem;
btn.addEventListener("click", callback);
});
})();
<?php
use WPCT_ERP_FORMS\Settings\Setting;
use WPCT_ERP_FORMS\Settings\Menu;
require_once 'Setting.php';
require_once 'Menu.php';
$wpct_erp_forms_setting = new Setting();
$wpct_erp_forms_menu = new Menu($wpct_erp_forms_setting);
add_action('admin_menu', function () use ($wpct_erp_forms_menu) {
$wpct_erp_forms_menu->register();
});
add_action('admin_init', function () use ($wpct_erp_forms_setting) {
$wpct_erp_forms_setting->register();
});
<?php
add_action('gform_after_submission', 'wpct_erp_forms_api_submissions', 10, 2);
function wpct_erp_forms_api_submissions($entry, $form)
add_action('wpct_erp_after_submission', 'wpct_erp_forms_do_submissions', 10, 2);
function wpct_erp_forms_do_submissions($entry, $form)
{
$form_vals = wpct_erp_forms_parse_form_entry($entry, $form);
......
......@@ -8,13 +8,13 @@
* Author URI: https://www.codeccoop.org
* Text Domain: wpct-erp-forms
* Domain Path: /languages
* Version: 1.0.3
* Version: 1.0.0
*
* @package WPCT_ERP_Forms
*/
/* Options Page */
require_once "includes/options-page.php";
/* Settings */
require_once "includes/settings/index.php";
/* Webhooks */
require_once "includes/webhooks.php";
......@@ -29,6 +29,7 @@ require_once "includes/fields/iban/index.php";
/* Dependencies */
add_filter('wpct_dependencies_check', function ($dependencies) {
$dependencies['Gravity Forms'] = '<a href="https://www.gravityforms.com/">Gravity Forms</a>';
$dependencies['Wpct Odoo Connect'] = '<a href="https://git.coopdevs.org/coopdevs/website/wp/wp-plugins/wpct-odoo-connect">Wpct Odoo Connect</a>';
return $dependencies;
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment