<?php
$table_id = isset($_GET['element']) ? encrypt_decrypt("decrypt", rawurldecode($_GET['element']), $key_user, $iv_user) : 0;
//_________________________________________________________________________________
//Récupération toutes les tables de cette application
$reqTables = getQueries("api_infos_tables", array("application_id" => $idApplication));
$tables = $reqTables['result'];
//_________________________________________________________________________________
//_________________________________________________________________________________
//Récupération toutes les permissions
$reqPermissions = getQueries("nx_permissions", array("application_id" => $idApplication));
$permissions = $reqPermissions['result'];
//_________________________________________________________________________________
//_________________________________________________________________________________
//Récupération des paramètres par défaut
$reqSetting = getQueries("nx_settings", array('setting_uniqid' => "6253e2c0c19a3"));
$settingJson = $reqSetting['result'][0];
$settings = json_decode($settingJson['setting_json'], true);
//_________________________________________________________________________________
//_________________________________________________________________________________
//Récupération des types de champ par défaut
$reqSetting2 = getQueries("nx_settings", array('setting_uniqid' => "6253e2a6e43a7"));
$settingJson2 = $reqSetting2['result'][0];
$settings2 = json_decode($settingJson2['setting_json'], true);
//_________________________________________________________________________________
//Dossiers
$reqFolders = getQueries("nx_folders", array('application_id' => $idApplication, 'entite_id' => $idEntite, 'ORDER BY' => 'folder_name'));
$folders = $reqFolders['result'];
//_________________________________________________________________________________
//Récupère des données techniques
/*
$sth = $bdd -> query('SHOW TABLE STATUS');
$dbSize = 0;
$row = $sth -> fetch(PDO::FETCH_ASSOC);
$dbSize = $row["Data_length"];
$decimals = 2;
$mbytes = round($dbSize/(1024*1024),$decimals);
*/
//Version PHP et DB
$versionPHP = phpversion();
$sth = $bdd -> query('SELECT VERSION()');
$versionDB = $sth -> fetch();
//_________________________________________________________________________________
//_________________________________________________________________________________
//Ajouter une table
if(isset($_POST['add-table'])) {
$flag = false;
$flag2 = true;
$infoTableName = remove_accents(strtolower(htmlspecialchars($_POST['info_table_name'])));
$infoTableNameSingle = remove_accents(strtolower(htmlspecialchars($_POST['info_table_name_single'])));
$infoTableNamePlural = remove_accents(strtolower(htmlspecialchars($_POST['info_table_name_plural'])));
$infoTableDescription = htmlspecialchars($selector['info_table_description']);
$columIdName = 'id'. ucfirst($infoTableNameSingle);
$tableUniqid = uniqid();
//Génère les données de bases
//Génère le nom de la table
$infoTableName = generateName(array('type' => "tableName",
'value' => $infoTableName));
//Génère la clé primaire
$primaryKey = generateName(array('type' => "primarykey",
'value' => $infoTableNameSingle));
//Génère la clé étrangère
$foreignKey = generateName(array('type' => "foreignkey",
'value' => $infoTableNameSingle));
//Formulaire
$form = array("info_table_uniqid" => $tableUniqid,
'info_table_sync' => htmlspecialchars($_POST['sync_sql']),
"info_table_db" => htmlspecialchars($_POST['sync_sql']) == 1 ? 1 : 0,
"info_table_name" => $infoTableName,
"info_table_name_single" => $infoTableNameSingle,
"info_table_name_plural" => $infoTableNamePlural,
"info_table_description" => $infoTableDescription,
'application_uniqid' => $_SESSION['current_application_uniqid'],
'user_id' => $user -> getUserId());
//_________________________________________________________________________________
//Interaction SQL ?
if(htmlspecialchars($_POST['sync_sql']) == 1) {
$response = create_table(array('table_name' => $infoTableName,
'columns' => array(array( 'column_name' => $columIdName,
'column_description' => 'Clé primaire',
'column_type' => 'INT',
'column_null' => false,
'column_index' => 'primarykey')
)));
$flag2 = $response['success'];
}
//_________________________________________________________________________________
if($flag2)
$flag = dbRowInsert2('api_infos_tables', $form);
if($flag) {
$tableId = getLastId("api_infos_tables", 'idInfoTable');
//Création colonne db
$formData = array('info_table_column_uniqid' => uniqid(),
'info_table_column_name' => $columIdName,
'info_table_column_description' => 'Clé primaire',
'info_table_column_type' => 'primarykey',
'info_table_column_length' => 0,
'info_table_column_encrypt' => 0,
'table_uniqid' => $tableUniqid,
'user_id' => $user -> getUserId() );
$flag3 = dbRowInsert2('api_infos_tables_columns', $formData);
itsLog(array('log_table' => "api_infos_tables",
'log_operation' => "Création d'une table",
'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' => $tableId,
'user_id' => $user -> getUserId()
));
if(!$flag3) {
itsLog(array('log_table' => "api_infos_tables",
'log_operation' => "Erreur dans la création de la colonne primaire",
'log_request' => json_encode($formData),
'log_response' => json_encode($flag3),
'log_selector' => json_encode(array()),
'log_color' => "warning",
'log_display' => 1,
'log_timeout' => 5000,
'id_log' => $tableId,
'user_id' => $user -> getUserId()
));
}
} else {
itsLog(array('log_table' => "api_infos_tables",
'log_operation' => "Erreur durant la création d'une table",
'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($_SERVER['REQUEST_URI']);
}
//_________________________________________________________________________________
//_________________________________________________________________________________
//Discover tables
if(isset($_POST['discover-tables'])) {
$search = remove_accents(strtolower(htmlspecialchars($_POST['discover_search'])));
$response = discover_tables(array('discover_search' => $search));
foreach($response['result'] as $table) {
$tableUniqid = uniqid();
//Formulaire
$form = array("info_table_uniqid" => $tableUniqid,
"info_table_sync" => 0,
"info_table_db" => 1,
"info_table_name" => $table['TABLE_NAME'],
"info_table_name_single" => '',
"info_table_name_plural" => '',
"info_table_description" => $table['TABLE_NAME'],
'application_uniqid' => $_SESSION['current_application_uniqid'],
'user_id' => $user -> getUserId());
//Contrôle si pas déjà existant
$reqItem = getQueries('api_infos_tables', array('info_table_name' => $table['TABLE_NAME']));
if(!$reqItem['count'])
$flag = dbRowInsert2('api_infos_tables', $form);
}
//_________________________________________________________________________________
//Refresh
redirect($_SERVER['REQUEST_URI']);
}
//_________________________________________________________________________________
//_________________________________________________________________________________
//Discover columns
if(isset($_POST['discover-columns'])) {
$tableId = htmlspecialchars($_POST['table_id']);
//Récupère info de la table
$reqTable = getQueries('api_infos_tables', array('idInfoTable' => $tableId));
$table = $reqTable['result'][0];
$response = discover_columns(array('table_id' => $tableId));
foreach($response['result'] as $column) {
$columnUniqid = uniqid();
$typeToCheck = substr($column['Type'], 0, 3);
//Identifie type de colonne
if($column['Key'] != 'PRI')
switch($typeToCheck) {
case 'var' :
$columnType = 'varchar';
break;
case 'int' :
$columnType = 'int';
break;
case 'tin' :
$columnType = 'tinyint';
break;
case 'flo' :
$columnType = 'float';
break;
case 'jso' :
$columnType = 'json';
break;
default :
$columnType = 'varchar';
}
else
$columnType = 'primarykey';
//Clé étrangère ?
if( substr($column['Field'], -3) == '_id' && $column['Key'] != 'PRI')
$columnType = 'foreignkey';
//Formulaire
$form = array("info_table_column_uniqid" => $columnUniqid,
'info_table_column_name' => $column['Field'],
"info_table_column_description" => $column['Field'],
"info_table_column_type" => $columnType,
"info_table_column_length" => 0,
"info_table_column_encrypt" => 0,
"table_uniqid" => $table['info_table_uniqid'],
'application_uniqid' => $_SESSION['current_application_uniqid'],
'user_id' => $user -> getUserId());
//Contrôle si pas déjà existant
$reqItem = getQueries('api_infos_tables_columns',
array('info_table_column_name' => $column['Field'],
'table_uniqid' => $table['info_table_uniqid']));
if(!$reqItem['count'])
$flag = dbRowInsert2('api_infos_tables_columns', $form);
}
//_________________________________________________________________________________
//Refresh
redirect('index.php?page_slug=api_table-management&element='.rawurlencode(encrypt_decrypt("encrypt", $tableId, $key_user, $iv_user)));
}
//_________________________________________________________________________________
//_________________________________________________________________________________
//Ajouter une colonne
if(isset($_POST['add-column'])) {
$flag = false;
$flag2 = true;
$tableId = htmlspecialchars($_POST['table_id']);
$columnName = remove_accents(strtolower(htmlspecialchars($_POST['info_table_column_name'])));
$columnDescription = htmlspecialchars($_POST['info_table_column_description']);
$columnFieldType = htmlspecialchars($_POST['field_type']);
$columnSqlType = switch_column_typevalue(array('column_type' => $columnFieldType));
$columnUniqid = uniqid();
//Récupère données de la table
$reqTable = getQueries('api_infos_tables', array('idInfoTable' => $tableId));
$table = $reqTable['result'][0];
$columnName = $table['info_table_name_single'] .'_'. $columnName;
//Formulaire
$form = array("info_table_column_uniqid" => $columnUniqid,
'info_table_column_name' => $columnName,
"info_table_column_description" => $columnDescription,
"info_table_column_type" => $columnSqlType['column_type'],
"info_table_column_length" => $columnSqlType['column_size'],
"info_table_column_encrypt" => 0,
"table_uniqid" => $table['info_table_uniqid'],
'application_uniqid' => $_SESSION['current_application_uniqid'],
'user_id' => $user -> getUserId());
//_________________________________________________________________________________
//Interaction SQL ?
if(htmlspecialchars($_POST['sync_sql']) == 1) {
$response = create_column(array('table_id' => $table['idInfoTable'],
'columns' => array( array('column_name' => $columnName,
'column_type' => $columnSqlType['column_type'],
'column_null' => true)
)));
$flag2 = $response['success'];
}
//_________________________________________________________________________________
if($flag2)
$flag = dbRowInsert2('api_infos_tables_columns', $form);
if($flag) {
$columnId = getLastId("api_infos_tables_columns", 'idInfoTableColumn');
itsLog(array('log_table' => "api_infos_tables_columns",
'log_operation' => "Création d'une colonne",
'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' => $columnId,
'user_id' => $user -> getUserId()
));
} else {
itsLog(array('log_table' => "api_infos_tables_columns",
'log_operation' => "Erreur durant la création d'une colonne",
'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_table-management&element='.rawurlencode(encrypt_decrypt("encrypt", $tableId, $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">
<!--begin::Inbox App - Messages -->
<div class="d-flex flex-column flex-lg-row">
<!--begin::Sidebar-->
<div class="flex-column flex-lg-row-auto w-100 w-lg-275px mb-10 mb-lg-0">
<!--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-table">Créer une table</a>
<!--end::Button-->
<!--begin::Menu-->
<div id="list-tables" class="menu menu-column menu-rounded menu-state-bg menu-state-title-primary">
</div>
<!--end::Menu-->
</div>
<!--end::Aside content-->
<div class="card-footer">
<!--begin::Actions-->
<div class="d-flex flex-wrap gap-1">
<!--begin::Discover table-->
<a href="#" class="btn btn-sm btn-icon btn-light btn-active-light-primary" data-bs-toggle="modal" data-bs-target="#discover-tables">
<!--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-binoculars-fill" viewBox="0 0 16 16">
<path d="M4.5 1A1.5 1.5 0 0 0 3 2.5V3h4v-.5A1.5 1.5 0 0 0 5.5 1h-1zM7 4v1h2V4h4v.882a.5.5 0 0 0 .276.447l.895.447A1.5 1.5 0 0 1 15 7.118V13H9v-1.5a.5.5 0 0 1 .146-.354l.854-.853V9.5a.5.5 0 0 0-.5-.5h-3a.5.5 0 0 0-.5.5v.793l.854.853A.5.5 0 0 1 7 11.5V13H1V7.118a1.5 1.5 0 0 1 .83-1.342l.894-.447A.5.5 0 0 0 3 4.882V4h4zM1 14v.5A1.5 1.5 0 0 0 2.5 16h3A1.5 1.5 0 0 0 7 14.5V14H1zm8 0v.5a1.5 1.5 0 0 0 1.5 1.5h3a1.5 1.5 0 0 0 1.5-1.5V14H9zm4-11H9v-.5A1.5 1.5 0 0 1 10.5 1h1A1.5 1.5 0 0 1 13 2.5V3z"/>
</svg>
</span>
<!--end::Svg Icon-->
</a>
<!--end::Discover table-->
</div>
<!--end::Actions-->
</div>
</div>
<!--end::Sticky aside-->
</div>
<!--end::Sidebar-->
<!--begin::Content-->
<div class="flex-lg-row-fluid ms-lg-7 ms-xl-10">
<!--begin::Card-->
<div class="card">
<div id="db_opts" class="card-header align-items-center py-5 gap-2 gap-md-5">
</div>
<div class="card-body p-0">
<!--begin::Table-->
<table class="table table-hover table-row-dashed fs-6 gy-5 my-0" id="columns_table">
<!--begin::Table head-->
<thead class="d-none">
<tr>
<th>Type</th>
<th>Nom</th>
<th>Description</th>
<th>Action</th>
</tr>
</thead>
<!--end::Table head-->
<!--begin::Table body-->
<tbody></tbody>
<!--end::Table body-->
</table>
<!--end::Table-->
</div>
<div id="column_opts" class="card-footer align-items-center py-5 gap-2 gap-md-5">
</div>
</div>
<!--end::Card-->
</div>
<!--end::Content-->
</div>
<!--end::Inbox App - Messages -->
</div>
<!--end::Container-->
</div>
<!--begin::Modal - Créer table-->
<div class="modal fade" id="add-table" 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 une table</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">Nom de la table</label>
<i class="fas fa-exclamation-circle ms-2 fs-7" data-bs-toggle="tooltip" title="Le nom ne doit pas contenir d'accent ou autre caractère spéciale et doit être en minuscule pluriel."></i>
<!--end::Label-->
<!--begin::Input-->
<div class="input-group mb-5">
<span class="input-group-text" id="current_application_prefix"><?= $_SESSION['current_application_prefix']?></span>
<input type="text" class="form-control" id="info_table_name" name="info_table_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">Nom au pluriel</label>
<i class="fas fa-exclamation-circle ms-2 fs-7" data-bs-toggle="tooltip" title="Le nom singulier ne doit pas contenir d'accent ou autre caractère spéciale et doit être en minuscule pluriel."></i>
<!--end::Label-->
<!--begin::Input-->
<input type="text" id="info_table_name_plural" name="info_table_name_plural" class="form-control form-control-solid mb-3 mb-lg-0" placeholder="Ex: Clients" />
<!--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">Nom au singulier</label>
<i class="fas fa-exclamation-circle ms-2 fs-7" data-bs-toggle="tooltip" title="Le nom singulier ne doit pas contenir d'accent ou autre caractère spéciale et doit être en minuscule singulier."></i>
<!--end::Label-->
<!--begin::Input-->
<input type="text" id="info_table_name_single" name="info_table_name_single" class="form-control form-control-solid mb-3 mb-lg-0" placeholder="Ex: Client" />
<!--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">Description</label>
<!--end::Label-->
<!--begin::Input-->
<textarea name="info_table_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-table">
<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>
<!--end::Modal body-->
<div class="modal-footer">
<!--begin::Sync-->
<a href="#" class="btn btn-sm btn-icon btn-light-success btn-active-light-primary sql-sync" data-bs-toggle="tooltip" data-bs-placement="top" title="Si bouton vert, Nuasix effectuera les requêtes SQL liées." data-sync="1">
<!--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-cpu-fill" viewBox="0 0 16 16">
<path d="M6.5 6a.5.5 0 0 0-.5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5h-3z"/>
<path d="M5.5.5a.5.5 0 0 0-1 0V2A2.5 2.5 0 0 0 2 4.5H.5a.5.5 0 0 0 0 1H2v1H.5a.5.5 0 0 0 0 1H2v1H.5a.5.5 0 0 0 0 1H2v1H.5a.5.5 0 0 0 0 1H2A2.5 2.5 0 0 0 4.5 14v1.5a.5.5 0 0 0 1 0V14h1v1.5a.5.5 0 0 0 1 0V14h1v1.5a.5.5 0 0 0 1 0V14h1v1.5a.5.5 0 0 0 1 0V14a2.5 2.5 0 0 0 2.5-2.5h1.5a.5.5 0 0 0 0-1H14v-1h1.5a.5.5 0 0 0 0-1H14v-1h1.5a.5.5 0 0 0 0-1H14v-1h1.5a.5.5 0 0 0 0-1H14A2.5 2.5 0 0 0 11.5 2V.5a.5.5 0 0 0-1 0V2h-1V.5a.5.5 0 0 0-1 0V2h-1V.5a.5.5 0 0 0-1 0V2h-1V.5zm1 4.5h3A1.5 1.5 0 0 1 11 6.5v3A1.5 1.5 0 0 1 9.5 11h-3A1.5 1.5 0 0 1 5 9.5v-3A1.5 1.5 0 0 1 6.5 5z"/>
</svg>
</span>
<!--end::Svg Icon-->
</a>
<!--end::Sync-->
</div>
</form>
</div>
<!--end::Modal content-->
</div>
<!--end::Modal dialog-->
</div>
<!--end::Modal - Créer table-->
<!--begin::Modal - Créer colonne-->
<div class="modal fade" id="add-column" 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 une colonne</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"/>
<input type="text" class="form-control table_id" name="table_id" value="<?= $table_id?>"/>
</div>
<!--end::Input-->
</div>
<!--end::Input group-->
<!--begin::Input group-->
<div class="fv-row mb-7">
<!--begin::Label-->
<label class="required form-label">Nom de la colonne</label>
<i class="fas fa-exclamation-circle ms-2 fs-7" data-bs-toggle="tooltip" title="Le nom ne doit pas contenir d'accent ou autre caractère spéciale et doit être en minuscule singulier."></i>
<!--end::Label-->
<!--begin::Input-->
<div class="input-group">
<span class="input-group-text column_prefix"></span>
<input type="text" class="form-control" name="info_table_column_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">Type</label>
<!--end::Label-->
<!--begin::Input-->
<select class="form-select" data-placeholder="Choisir un type" name="field_type" data-dropdown-parent="#add-column">
<option>Choisir</option>
<?php
foreach($settings2['field_type'] as $value => $option) {
echo '<option value="'.$value.'">'.$option.'</option>';
}
?>
</select>
<!--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">Description</label>
<!--end::Label-->
<!--begin::Input-->
<textarea name="info_table_column_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-column">
<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>
<!--end::Modal body-->
<div class="modal-footer">
<!--begin::Sync-->
<a href="#" class="btn btn-sm btn-icon btn-light-success btn-active-light-primary sql-sync" data-bs-toggle="tooltip" data-bs-placement="top" title="Si bouton vert, Nuasix effectuera les requêtes SQL liées." data-sync="1">
<!--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-cpu-fill" viewBox="0 0 16 16">
<path d="M6.5 6a.5.5 0 0 0-.5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5h-3z"/>
<path d="M5.5.5a.5.5 0 0 0-1 0V2A2.5 2.5 0 0 0 2 4.5H.5a.5.5 0 0 0 0 1H2v1H.5a.5.5 0 0 0 0 1H2v1H.5a.5.5 0 0 0 0 1H2v1H.5a.5.5 0 0 0 0 1H2A2.5 2.5 0 0 0 4.5 14v1.5a.5.5 0 0 0 1 0V14h1v1.5a.5.5 0 0 0 1 0V14h1v1.5a.5.5 0 0 0 1 0V14h1v1.5a.5.5 0 0 0 1 0V14a2.5 2.5 0 0 0 2.5-2.5h1.5a.5.5 0 0 0 0-1H14v-1h1.5a.5.5 0 0 0 0-1H14v-1h1.5a.5.5 0 0 0 0-1H14v-1h1.5a.5.5 0 0 0 0-1H14A2.5 2.5 0 0 0 11.5 2V.5a.5.5 0 0 0-1 0V2h-1V.5a.5.5 0 0 0-1 0V2h-1V.5a.5.5 0 0 0-1 0V2h-1V.5zm1 4.5h3A1.5 1.5 0 0 1 11 6.5v3A1.5 1.5 0 0 1 9.5 11h-3A1.5 1.5 0 0 1 5 9.5v-3A1.5 1.5 0 0 1 6.5 5z"/>
</svg>
</span>
<!--end::Svg Icon-->
</a>
<!--end::Sync-->
</div>
</form>
</div>
<!--end::Modal content-->
</div>
<!--end::Modal dialog-->
</div>
<!--end::Modal - Créer colonne-->
<!--begin::Modal - Discover tables-->
<div class="modal fade" id="discover-tables" 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">Découvrir des tables existantes</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-7">
<!--begin::Label-->
<label class="required form-label">Mot-clé</label>
<i class="fas fa-exclamation-circle ms-2 fs-7" data-bs-toggle="tooltip" title="La recherche s'effectue en utilisant l'opérateur LIKE"></i>
<!--end::Label-->
<!--begin::Input-->
<div class="input-group">
<span class="input-group-text">LIKE</span>
<input type="text" class="form-control" name="discover_search"/>
</div>
<!--end::Input-->
Exemple : <code>fa_%</code>
</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="discover-tables">
<span class="indicator-label">Rechercher</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>
<!--end::Modal body-->
</form>
</div>
<!--end::Modal content-->
</div>
<!--end::Modal dialog-->
</div>
<!--end::Modal - Discover tables-->
<!--begin::Modal - Discover colonnes-->
<div class="modal fade" id="discover-columns" 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">Découvrir des colonnes existantes</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 action="" method="post">
<!--begin::Modal body-->
<div class="modal-body scroll-y mx-5 mx-xl-15 my-7">
<!--begin::Input group-->
<div class="fv-row mb-10" style="display: none;">
<input type="number" name="table_id" value="<?= $table_id?>"/>
</div>
<!--end::Input group-->
<!--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="discover-columns">
<span class="indicator-label">Rechercher</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>
<!--end::Modal body-->
</form>
</div>
<!--end::Modal content-->
</div>
<!--end::Modal dialog-->
</div>
<!--end::Modal - Discover colonnes-->