Editeur Editez un fichier

Edition d'un fichier

Editez le fichier applications/nuasix/api_table-management.php
<?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-->

Conseils et liens

Liens vers des ressources utiles pour l'édition de fichier