<?php
$endPoint_id = isset($_GET['element']) ? encrypt_decrypt("decrypt", rawurldecode($_GET['element']), $key_user, $iv_user) : 0;
//_________________________________________________________________________________
//Commandes API
$reqCommands = getQueries("api_commands", array('application_uniqid' => $_SESSION['current_application_uniqid'],
'ORDER BY' => 'command_name'));
$commands = $reqCommands['result'];
//_________________________________________________________________________________
//Ajouter un endpoint
if(isset($_POST['add-endpoint'])) {
$endPointUniqId = uniqid();
//Formulaire
$form = array("endpoint_uniqid" => $endPointUniqId,
'endpoint_name' => htmlspecialchars($_POST['endpoint_name']),
"endpoint_method" => htmlspecialchars($_POST['endpoint_method']),
"endpoint_description" => htmlspecialchars($_POST['endpoint_description']),
"command_uniqid" => htmlspecialchars($_POST['command_uniqid']),
'application_uniqid' => $_SESSION['current_application_uniqid'],
'user_id' => $user -> getUserId());
$flag = dbRowInsert2('api_endpoints', $form);
if($flag) {
$endPointId = getLastId("api_endpoints", 'idEndpoint');
itsLog(array('log_table' => "api_endpoints",
'log_operation' => "Création d'un endPoint",
'log_request' => json_encode($form),
'log_response' => json_encode($flag),
'log_selector' => json_encode(array()),
'log_color' => "success",
'log_display' => 1,
'log_timeout' => 5000,
'id_log' => $endPointId,
'user_id' => $user -> getUserId()
));
} else {
itsLog(array('log_table' => "api_endpoints",
'log_operation' => "Erreur durant la création d'un endPoint",
'log_request' => json_encode($form),
'log_response' => json_encode($flag),
'log_selector' => json_encode(array()),
'log_color' => "danger",
'log_display' => 1,
'log_timeout' => 5000,
'user_id' => $user -> getUserId()
));
}
//_________________________________________________________________________________
//Refresh
redirect('index.php?page_slug=api_endpoint-management&element='.rawurlencode(encrypt_decrypt("encrypt", $endPointId, $key_user, $iv_user)));
}
//_________________________________________________________________________________
?>
<div class="content d-flex flex-column flex-column-fluid" id="kt_content">
<!--begin::Container-->
<div class="container-xxl" id="kt_content_container">
<div class="row">
<div class="col-3">
<!--begin::Sticky aside-->
<div class="card card-flush mb-0" data-kt-sticky="false" data-kt-sticky-name="inbox-aside-sticky" data-kt-sticky-offset="{default: false, xl: '0px'}" data-kt-sticky-width="{lg: '275px'}" data-kt-sticky-left="auto" data-kt-sticky-top="150px" data-kt-sticky-animation="false" data-kt-sticky-zindex="95">
<!--begin::Aside content-->
<div class="card-body">
<!--begin::Button-->
<a href="#" class="btn btn-primary text-uppercase w-100 mb-10" data-bs-toggle="modal" data-bs-target="#add-endpoint">Créer un endpoint</a>
<!--end::Button-->
<!--begin::Menu-->
<div id="list-endpoints" class="menu menu-column menu-rounded menu-state-bg menu-state-title-primary">
</div>
<!--end::Menu-->
</div>
<!--end::Aside content-->
</div>
<!--end::Sticky aside-->
</div>
<div class="col-9">
<!--begin::Card-->
<div class="card">
<div id="db_opts" class="card-header align-items-center py-5 gap-2 gap-md-5">
<!--begin::Actions-->
<div class="d-flex flex-wrap gap-1">
<!--begin::Delete-->
<a href="#" class="btn btn-sm btn-icon btn-light btn-active-light-primary" data-bs-toggle="tooltip" data-bs-placement="top" title="Supprimer le endpoint" data-api="delete_endpoint">
<!--begin::Svg Icon | path: icons/duotune/general/gen027.svg-->
<span class="svg-icon svg-icon-2">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
<path d="M5 9C5 8.44772 5.44772 8 6 8H18C18.5523 8 19 8.44772 19 9V18C19 19.6569 17.6569 21 16 21H8C6.34315 21 5 19.6569 5 18V9Z" fill="currentColor" />
<path opacity="0.5" d="M5 5C5 4.44772 5.44772 4 6 4H18C18.5523 4 19 4.44772 19 5V5C19 5.55228 18.5523 6 18 6H6C5.44772 6 5 5.55228 5 5V5Z" fill="currentColor" />
<path opacity="0.5" d="M9 4C9 3.44772 9.44772 3 10 3H14C14.5523 3 15 3.44772 15 4V4H9V4Z" fill="currentColor" />
</svg>
</span>
<!--end::Svg Icon-->
</a>
<!--end::Delete-->
</div>
<!--end::Actions-->
<!--begin::Pagination-->
<div class="d-flex align-items-center flex-wrap gap-2">
<!--begin::Page-->
<a href="#" class="btn btn-sm btn-icon btn-light btn-active-light-primary" data-bs-toggle="tooltip" data-bs-placement="top" title="Générer des pages" data-api="generate_pages">
<!--begin::Svg Icon | path: icons/duotune/general/gen027.svg-->
<span class="svg-icon svg-icon-2">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-window-plus" viewBox="0 0 16 16">
<path d="M2.5 5a.5.5 0 1 0 0-1 .5.5 0 0 0 0 1ZM4 5a.5.5 0 1 0 0-1 .5.5 0 0 0 0 1Zm2-.5a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0Z"/>
<path d="M0 4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v4a.5.5 0 0 1-1 0V7H1v5a1 1 0 0 0 1 1h5.5a.5.5 0 0 1 0 1H2a2 2 0 0 1-2-2V4Zm1 2h13V4a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v2Z"/>
<path d="M16 12.5a3.5 3.5 0 1 1-7 0 3.5 3.5 0 0 1 7 0Zm-3.5-2a.5.5 0 0 0-.5.5v1h-1a.5.5 0 0 0 0 1h1v1a.5.5 0 0 0 1 0v-1h1a.5.5 0 0 0 0-1h-1v-1a.5.5 0 0 0-.5-.5Z"/>
</svg>
</span>
<!--end::Svg Icon-->
</a>
<!--end::Page-->
<!--begin::Command API-->
<a href="#" class="btn btn-sm btn-icon btn-light btn-active-light-primary" data-bs-toggle="tooltip" data-bs-placement="top" title="Générer des pages" data-api="generate_pages">
<!--begin::Svg Icon | path: icons/duotune/general/gen027.svg-->
<span class="svg-icon svg-icon-2">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
<path opacity="0.3" d="M21 13H15V11H21C21.6 11 22 10.6 22 10C22 9.4 21.6 9 21 9H15V3C15 2.4 14.6 2 14 2C13.4 2 13 2.4 13 3V9H11V3C11 2.4 10.6 2 10 2C9.4 2 9 2.4 9 3V9H3C2.4 9 2 9.4 2 10C2 10.6 2.4 11 3 11H9V13H3C2.4 13 2 13.4 2 14C2 14.6 2.4 15 3 15H9V21C9 21.6 9.4 22 10 22C10.6 22 11 21.6 11 21V15H13V21C13 21.6 13.4 22 14 22C14.6 22 15 21.6 15 21V15H21C21.6 15 22 14.6 22 14C22 13.4 21.6 13 21 13Z" fill="black"/>
<path d="M16 17H8C7.4 17 7 16.6 7 16V8C7 7.4 7.4 7 8 7H16C16.6 7 17 7.4 17 8V16C17 16.6 16.6 17 16 17ZM14 10H10V14H14V10Z" fill="black"/>
</svg>
</span>
<!--end::Svg Icon-->
</a>
<!--end::Command API-->
</div>
<!--end::Pagination-->
</div>
<!--begin::Card Body-->
<div class="card-body ">
<span id="endpoint_description" class="fw-bold fs-2"></span>
<!--begin::Section-->
<div class="py-5">
<div class="rounded border p-10 text-gray-700 fs-6">
<table class="table">
<thead>
<tr class="fw-bolder fs-6 text-gray-800">
<th>URL API</th>
<th>endPoint</th>
<th>Méthode</th>
</tr>
</thead>
<tbody>
<tr>
<td><?= $url .'/rest/api.php/'?></td>
<td id="endpoint_name"></td>
<td id="endpoint_method"></td>
</tr>
</tbody>
</table>
</div>
</div>
<!--begin::Highlight-->
<div class="highlight">
<button class="highlight-copy btn" data-bs-toggle="tooltip" title="Copy code">Copier</button>
<div class="highlight-code">
</div>
</div>
<!--end::Highlight-->
<!--end::Section-->
</div>
<!--end::Card Body-->
</div>
<!--end::Card-->
</div>
</div>
</div>
<!--end::Container-->
</div>
<!--begin::Modal - Créer endpoint-->
<div class="modal fade" id="add-endpoint" tabindex="-1" aria-hidden="true">
<!--begin::Modal dialog-->
<div class="modal-dialog modal-dialog-centered mw-650px">
<!--begin::Modal content-->
<div class="modal-content">
<!--begin::Modal header-->
<div class="modal-header">
<!--begin::Modal title-->
<h2 class="fw-bolder">Créer un endPoint</h2>
<!--end::Modal title-->
<!--begin::Close-->
<div class="btn btn-icon btn-sm btn-active-icon-primary" data-bs-dismiss="modal">
<!--begin::Svg Icon | path: icons/duotune/arrows/arr061.svg-->
<span class="svg-icon svg-icon-1">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
<rect opacity="0.5" x="6" y="17.3137" width="16" height="2" rx="1" transform="rotate(-45 6 17.3137)" fill="black" />
<rect x="7.41422" y="6" width="16" height="2" rx="1" transform="rotate(45 7.41422 6)" fill="black" />
</svg>
</span>
<!--end::Svg Icon-->
</div>
<!--end::Close-->
</div>
<!--end::Modal header-->
<form class="form" action="" method="post">
<!--begin::Modal body-->
<div class="modal-body scroll-y mx-5 mx-xl-15 my-7">
<!--begin::Scroll-->
<div class="d-flex flex-column scroll-y me-n7 pe-7" id="kt_modal_add_user_scroll" data-kt-scroll="true" data-kt-scroll-activate="{default: false, lg: true}" data-kt-scroll-max-height="auto" data-kt-scroll-dependencies="#kt_modal_add_user_header" data-kt-scroll-wrappers="#kt_modal_add_user_scroll" data-kt-scroll-offset="300px">
<!--begin::Input group-->
<div class="fv-row mb-10" style="display:none;">
<!--begin::Input-->
<div class="input-group mb-5">
<input type="text" class="form-control sync_sql_input" name="sync_sql" value="1"/>
</div>
<!--end::Input-->
</div>
<!--end::Input group-->
<!--begin::Input group-->
<div class="fv-row mb-10">
<!--begin::Label-->
<label for="info_table_name" class="required form-label">Chemin</label>
<i class="fas fa-exclamation-circle ms-2 fs-7" data-bs-toggle="tooltip" title="Le chemin ne doit pas contenir d'espace, d'accent ou de caractère spéciale"></i>
<!--end::Label-->
<!--begin::Input-->
<div class="input-group mb-5">
<span class="input-group-text"><?= $url . '/rest/api.php/'?></span>
<input type="text" class="form-control" name="endpoint_name"/>
</div>
<!--end::Input-->
</div>
<!--end::Input group-->
<!--begin::Input group-->
<div class="fv-row mb-7">
<!--begin::Label-->
<label class="required fw-bold fs-6 mb-2">Commande API</label>
<!--end::Label-->
<!--begin::Input-->
<select class="form-select" data-placeholder="Choisir une commande" name="command_uniqid" data-dropdown-parent="#add-endpoint">
<option>Choisir</option>
<?php
foreach($commands as $command) {
echo '<option value="'.$command['command_uniqid'].'">'.$command['command_name'].' ['.$command['command_api_name'].']</option>';
}
?>
</select>
<!--end::Input-->
</div>
<!--end::Input group-->
<!--begin::Input group-->
<div class="mb-7">
<!--begin::Label-->
<label class="required fw-bold fs-6 mb-5">Méthode</label>
<!--end::Label-->
<!--begin::Input row-->
<div class="d-flex fv-row">
<!--begin::Radio-->
<div class="form-check form-check-custom form-check-solid">
<!--begin::Input-->
<input class="form-check-input me-3" name="endpoint_method" type="radio" value="post" id="endpoint_method_post" checked />
<!--end::Input-->
<!--begin::Label-->
<label class="form-check-label" for="endpoint_method_post">
<div class="fw-bolder text-gray-800">POST</div>
<div class="text-gray-600">endPoint pour créer un item</div>
</label>
<!--end::Label-->
</div>
<!--end::Radio-->
<div class='separator separator-dashed my-5'></div>
</div>
<!--end::Input row-->
<!--begin::Input row-->
<div class="d-flex fv-row">
<!--begin::Radio-->
<div class="form-check form-check-custom form-check-solid">
<!--begin::Input-->
<input class="form-check-input me-3" name="endpoint_method" type="radio" value="get" id="endpoint_method_get" />
<!--end::Input-->
<!--begin::Label-->
<label class="form-check-label" for="endpoint_method_get">
<div class="fw-bolder text-gray-800">GET</div>
<div class="text-gray-600">endPoint pour lire un item</div>
</label>
<!--end::Label-->
</div>
<!--end::Radio-->
<div class='separator separator-dashed my-5'></div>
</div>
<!--end::Input row-->
<!--begin::Input row-->
<div class="d-flex fv-row">
<!--begin::Radio-->
<div class="form-check form-check-custom form-check-solid">
<!--begin::Input-->
<input class="form-check-input me-3" name="endpoint_method" type="radio" value="put" id="endpoint_method_put" />
<!--end::Input-->
<!--begin::Label-->
<label class="form-check-label" for="endpoint_method_put">
<div class="fw-bolder text-gray-800">PUT</div>
<div class="text-gray-600">endPoint pour mettre à jour un item</div>
</label>
<!--end::Label-->
</div>
<!--end::Radio-->
<div class='separator separator-dashed my-5'></div>
</div>
<!--end::Input row-->
<!--begin::Input row-->
<div class="d-flex fv-row">
<!--begin::Radio-->
<div class="form-check form-check-custom form-check-solid">
<!--begin::Input-->
<input class="form-check-input me-3" name="endpoint_method" type="radio" value="delete" id="endpoint_method_delete" />
<!--end::Input-->
<!--begin::Label-->
<label class="form-check-label" for="endpoint_method_delete">
<div class="fw-bolder text-gray-800">DELETE</div>
<div class="text-gray-600">endPoint pour supprimer un item</div>
</label>
<!--end::Label-->
</div>
<!--end::Radio-->
<div class='separator separator-dashed my-5'></div>
</div>
<!--end::Input row-->
</div>
<!--end::Input group-->
<!--begin::Input group-->
<div class="fv-row mb-7">
<!--begin::Label-->
<label class="fw-bold fs-6 mb-2">Description</label>
<!--end::Label-->
<!--begin::Input-->
<textarea name="endpoint_description" class="form-control form-control-solid mb-3 mb-lg-0"></textarea>
<!--end::Input-->
</div>
<!--end::Input group-->
</div>
<!--end::Scroll-->
<!--begin::Actions-->
<div class="text-center pt-15">
<button type="reset" class="btn btn-light me-3" data-bs-dismiss="modal">Annuler</button>
<button type="submit" class="btn btn-primary" name="add-endpoint">
<span class="indicator-label">Ajouter</span>
<span class="indicator-progress">2 secondes...
<span class="spinner-border spinner-border-sm align-middle ms-2"></span></span>
</button>
</div>
<!--end::Actions-->
</div>
</form>
</div>
<!--end::Modal content-->
</div>
<!--end::Modal dialog-->
</div>
<!--end::Modal - Créer endpoint-->