<?php
//_________________________________________________________________________________
//Récupération des ressources
$reqCrons = getQueries("api_crons LEFT JOIN api_commands ON api_crons.command_uniqid = api_commands.command_uniqid", array('api_crons.application_uniqid' => $_SESSION['current_application_uniqid']));
$crons = $reqCrons['result'];
//_________________________________________________________________________________
//_________________________________________________________________________________
//Récupération des tokens
$reqTokens = getQueries("api_tokens", array('application_uniqid' => $_SESSION['current_application_uniqid'],
'token_status' => 1));
$tokens = $reqTokens['result'];
//_________________________________________________________________________________
//_________________________________________________________________________________
//Récupération des commandes API de type fonction
$reqCommands = getQueries("api_commands", array('application_uniqid' => $_SESSION['current_application_uniqid'],
'command_type' => 'function',
'ORDER BY' => 'command_name'));
$commands = $reqCommands['result'];
//_________________________________________________________________________________
//_________________________________________________________________________________
//Création d'un cron
if(isset($_POST['add-cron'])) {
//Données du formulaire
$form = array('cron_name' => htmlspecialchars($_POST['cron_name']),
'cron_uniqid' => uniqid(),
'cron_start' => htmlspecialchars($_POST['cron_start']),
'cron_end' => htmlspecialchars($_POST['cron_end']),
'cron_every_year' => htmlspecialchars($_POST['cron_every_year']),
'cron_every_month' => htmlspecialchars($_POST['cron_every_month']),
'cron_every_day' => htmlspecialchars($_POST['cron_every_day']),
'cron_every_hour' => htmlspecialchars($_POST['cron_every_hour']),
'cron_every_minute' => htmlspecialchars($_POST['cron_every_minute']),
'cron_status' => htmlspecialchars($_POST['cron_status']),
'cron_max_counter' => htmlspecialchars($_POST['cron_max_counter']),
'cron_token' => htmlspecialchars($_POST['cron_token']),
'command_uniqid' => htmlspecialchars($_POST['command_uniqid']),
'application_uniqid' => $_SESSION['current_application_uniqid'],
'user_id' => $user -> getUserId());
$flag = dbRowInsert2("api_crons", $form);
if($flag) {
itsLog(array('log_table' => "api_crons",
'log_operation' => "Création du cron",
'log_request' => json_encode($form),
'log_response' => json_encode($flag),
'log_color' => "success",
'log_display' => 1,
'log_timeout' => 5000,
'id_log' => getLastId("api_crons", 'idCron'),
'user_id' => $user -> getUserId()
));
} else {
itsLog(array('log_table' => "api_crons",
'log_operation' => "Erreur durant la création du cron",
'log_request' => json_encode($form),
'log_response' => json_encode($flag),
'log_color' => "danger",
'log_display' => 1,
'log_timeout' => 5000,
'id_log' => $page['idPage'],
'user_id' => $user -> getUserId()
));
}
//Refresh
redirect($_SERVER['REQUEST_URI']);
}
//_________________________________________________________________________________
?>
<div class="content d-flex flex-column flex-column-fluid" id="kt_content">
<!--begin::Container-->
<div class="container-xxl" id="kt_content_container">
<!--begin::Card-->
<div class="card">
<!--begin::Card header-->
<div class="card-header border-0 pt-6">
<!--begin::Card toolbar-->
<div class="card-toolbar">
<!--begin::Toolbar-->
<div class="d-flex justify-content-end" data-kt-user-table-toolbar="base">
<!--begin::Add user-->
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#add-cron">
<!--begin::Svg Icon | path: icons/duotune/arrows/arr075.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">
<rect opacity="0.5" x="11.364" y="20.364" width="16" height="2" rx="1" transform="rotate(-90 11.364 20.364)" fill="black" />
<rect x="4.36396" y="11.364" width="16" height="2" rx="1" fill="black" />
</svg>
</span>
<!--end::Svg Icon-->Ajouter</button>
<!--end::Add user-->
</div>
<!--end::Toolbar-->
</div>
<!--end::Card toolbar-->
</div>
<!--end::Card header-->
<!--begin::Card body-->
<div class="card-body pt-0">
<!--begin::Table-->
<table id="datatable_nuasix_default" class="table table-row-bordered gy-5">
<thead>
<tr class="fw-bold fs-6 text-muted">
<th class="min-w-125px">Nom</th>
<th class="min-w-125px">Commande</th>
<th class="min-w-125px">Dernière exécution</th>
<th class="min-w-125px">Compteur</th>
<th class="text-end min-w-70px">Actions</th>
</tr>
</thead>
<tbody>
<?php
foreach($crons as $cron) {
$reqFunction = getQueries('api_info_functions', array('idInfoFunction' => $cron['function_id']));
$function = $reqFunction['result'][0];
?>
<tr data-id="<?= encrypt_decrypt("encrypt", $cron['idCron'], $key_user, $iv_user)?>" data-method="custom" data-element="<?= encrypt_decrypt("encrypt", "cron", $key_user, $iv_user)?>">
<!--begin::Nom resource-->
<td><span class="badge badge-secondary position-relative me-5"><?= $cron['cron_name']?><span class="position-absolute top-0 start-100 translate-middle badge badge-circle badge-<?= ( $cron['cron_status'] == 1 ? 'success':'warning' )?>"></span></span></td>
<!--end::Nom resource-->
<!--begin::Commande-->
<td><?= $cron['command_name']?></td>
<!--end::Commande-->
<!--begin::Dernière exécution-->
<td><?= ( !empty($cron['cron_last_executed_date']) ? dateToFrench($cron['cron_last_executed_date'], 'd-m-y à h:i') : 'Aucune exécution')?></td>
<!--end::Dernière exécution-->
<!--begin::Compteur-->
<td><?= ($cron['cron_counter'] ? $cron['cron_counter'] : 0) .'/'. $cron['cron_max_counter']?></td>
<!--end::Compteur-->
<!--begin::Action-->
<td class="text-end">
<a href="index.php?page_slug=cron-single&element=<?= rawurlencode(encrypt_decrypt("encrypt", $cron['idCron'], $key_user, $iv_user))?>" class="btn btn-sm btn-icon btn-bg-light btn-active-color-primary">
<!--begin::Svg Icon | path: assets/media/icons/duotune/general/gen055.svg-->
<span class="svg-icon svg-icon-muted svg-icon-2hx"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
<path opacity="0.3" fill-rule="evenodd" clip-rule="evenodd" d="M2 4.63158C2 3.1782 3.1782 2 4.63158 2H13.47C14.0155 2 14.278 2.66919 13.8778 3.04006L12.4556 4.35821C11.9009 4.87228 11.1726 5.15789 10.4163 5.15789H7.1579C6.05333 5.15789 5.15789 6.05333 5.15789 7.1579V16.8421C5.15789 17.9467 6.05333 18.8421 7.1579 18.8421H16.8421C17.9467 18.8421 18.8421 17.9467 18.8421 16.8421V13.7518C18.8421 12.927 19.1817 12.1387 19.7809 11.572L20.9878 10.4308C21.3703 10.0691 22 10.3403 22 10.8668V19.3684C22 20.8218 20.8218 22 19.3684 22H4.63158C3.1782 22 2 20.8218 2 19.3684V4.63158Z" fill="black"/>
<path d="M10.9256 11.1882C10.5351 10.7977 10.5351 10.1645 10.9256 9.77397L18.0669 2.6327C18.8479 1.85165 20.1143 1.85165 20.8953 2.6327L21.3665 3.10391C22.1476 3.88496 22.1476 5.15129 21.3665 5.93234L14.2252 13.0736C13.8347 13.4641 13.2016 13.4641 12.811 13.0736L10.9256 11.1882Z" fill="black"/>
<path d="M8.82343 12.0064L8.08852 14.3348C7.8655 15.0414 8.46151 15.7366 9.19388 15.6242L11.8974 15.2092C12.4642 15.1222 12.6916 14.4278 12.2861 14.0223L9.98595 11.7221C9.61452 11.3507 8.98154 11.5055 8.82343 12.0064Z" fill="black"/>
</svg></span>
<!--end::Svg Icon-->
</a>
<a href="#" class="btn btn-sm btn-icon btn-bg-light btn-active-color-primary" data-action="delete">
<!--begin::Svg Icon | path: assets/media/icons/duotune/general/gen027.svg-->
<span class="svg-icon svg-icon-muted svg-icon-2hx"><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="black"/>
<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="black"/>
<path opacity="0.5" d="M9 4C9 3.44772 9.44772 3 10 3H14C14.5523 3 15 3.44772 15 4V4H9V4Z" fill="black"/>
</svg></span>
<!--end::Svg Icon-->
</a>
</td>
<!--end::Action-->
</tr>
<?php
}
?>
</tbody>
</table>
<!--end::Table-->
</div>
<!--end::Card body-->
</div>
<!--end::Card-->
<div class="modal fade" tabindex="-1" id="add-cron">
<div class="modal-dialog">
<form method="post" action="">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Créer une tâche planifiée</h5>
<!--begin::Close-->
<div class="btn btn-icon btn-sm btn-active-light-primary ms-2" data-bs-dismiss="modal" aria-label="Close">
<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>
</div>
<!--end::Close-->
</div>
<div class="modal-body">
<!--begin::Input group-->
<div class="form-floating mb-7">
<input type="text" class="form-control" id="cron_name" name="cron_name"/>
<label for="cron_name">Nom</label>
</div>
<!--end::Input group-->
<!--begin::Input group-->
<div class="form-floating mb-7">
<input type="number" class="form-control" id="cron_max_counter" name="cron_max_counter"/>
<label for="cron_max_counter">Nombre d'exécution maximum</label>
</div>
<!--end::Input group-->
<!--begin::Input group-->
<div class="form-floating mb-7">
<input type="datetime" id="kt_datepicker_1" name="cron_start" class="form-control" placeholder="dd-mm-yyyy"/>
<label for="kt_datepicker_1">Date début</label>
</div>
<!--end::Input group-->
<!--begin::Input group-->
<div class="form-floating mb-7">
<input type="datetime" id="kt_datepicker_2" name="cron_end" class="form-control" placeholder="dd-mm-yyyy"/>
<label for="kt_datepicker_2">Date fin</label>
</div>
<!--end::Input group-->
<!--begin::Input group-->
<div class="form-floating mb-7">
<select class="form-select" id="cron_every_minute" name="cron_every_minute">
<option value="0" selected>0</option>
<option value="15">15</option>
<option value="30">30</option>
</select>
<label for="cron_every_minute">Répétition toutes les .. minutes</label>
</div>
<!--end::Input group-->
<!--begin::Input group-->
<div class="form-floating mb-7">
<select class="form-select" id="cron_every_hour" name="cron_every_hour">
<option value="0" selected>0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
</select>
<label for="cron_every_hour">Répétition toutes les .. heures</label>
</div>
<!--end::Input group-->
<!--begin::Input group-->
<div class="form-floating mb-7">
<select class="form-select" id="cron_every_day" name="cron_every_day">
<option value="0" selected>0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>
<label for="cron_every_day">Répétition tout les .. jours</label>
</div>
<!--end::Input group-->
<!--begin::Input group-->
<div class="form-floating mb-7">
<select class="form-select" id="cron_every_month" name="cron_every_month">
<option value="0" selected>0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
</select>
<label for="cron_every_month">Répétition tout les .. mois</label>
</div>
<!--end::Input group-->
<!--begin::Input group-->
<div class="form-floating mb-7">
<select class="form-select" id="cron_every_year" name="cron_every_year">
<option value="0" selected>0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<label for="cron_every_year">Répétition toutes les .. années</label>
</div>
<!--end::Input group-->
<!--begin::Input group-->
<div class="form-floating mb-7">
<select class="form-select" id="command_uniqid" name="command_uniqid">
<?php
foreach($commands as $command)
echo '<option value="'.$command['command_uniqid'].'">'.$command['command_name'].'</option>';
?>
</select>
<label for="command_uniqid">Commande API</label>
</div>
<!--end::Input group-->
<!--begin::Input group-->
<div class="form-floating mb-7">
<select class="form-select" id="cron_token" name="cron_token">
<?php
foreach($tokens as $token)
echo '<option value="'.$token['token_value'].'">'.$token['token_name'].'</option>';
?>
</select>
<label for="cron_token">Token d'authentification</label>
</div>
<!--end::Input group-->
<!--begin::Input group-->
<div class="form-floating mb-7">
<select class="form-select" id="cron_status" name="cron_status">
<option value="0" selected>Inactif</option>
<option value="1">Actif</option>
</select>
<label for="cron_status">Statut</label>
</div>
<!--end::Input group-->
</div>
<div class="modal-footer">
<button type="button" class="btn btn-light" data-bs-dismiss="modal">Fermer</button>
<button type="submit" class="btn btn-primary" name="add-cron">Ajouter</button>
</div>
</div>
</form>
</div>
</div>
</div>
<!--end::Container-->
</div>