Changeset 2e3acf5


Ignore:
Timestamp:
Nov 17, 2025, 11:47:04 AM (3 weeks ago)
Author:
rgigli <147847165+rgigli@…>
Branches:
main
Children:
65575a8
Parents:
3cee05e
Message:

funzioni di gestione utenti

impostazione di base delle funzioni di gestione utenti

Location:
admin
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • admin/includes/query.php

    r3cee05e r2e3acf5  
    123123}
    124124
     125function elenco_sedi()
     126{
     127        global $id_cons,$prefix,$dbi;
     128        $sql="select * from ".$prefix."_ele_sede where id_cons='$id_cons' order by indirizzo";
     129        $sth = $dbi->prepare("$sql");
     130        $sth->execute();
     131        $row = $sth->fetchAll(PDO::FETCH_ASSOC);
     132        return($row);   
     133}
     134
    125135function elenco_utenti()
    126136{
    127137        global $id_cons,$id_comune,$prefix,$dbi;
    128         $sql="select * from ".$prefix."_author where id_comune='$id_comune' order by aid";
     138        $sql="select * from ".$prefix."_authors where id_comune='$id_comune' order by aid";
    129139        $sth = $dbi->prepare("$sql");
    130140        $sth->execute();
  • admin/modules/gestione_enti_comuni.php

    r3cee05e r2e3acf5  
    221221  }
    222222 
    223   function nascondiElemento() {
    224   const elemento = document.getElementById('risultato');
    225   if (elemento) {
    226     // Imposta la proprietà CSS display su 'none'
    227     elemento.style.display = 'none';
    228   }
    229   }
    230223</script>
  • admin/modules/gestione_utenti.php

    r3cee05e r2e3acf5  
    33
    44$currentUserRole = $_SESSION['ruolo'] ?? 'operatore';
    5 
     5$row=elenco_utenti();
     6foreach($row as $val)
    67// Dati fittizi sedi e sezioni
    78$sedi = [
     
    114115  <div class="card-body">
    115116    <form id="userForm">
    116       <input type="hidden" name="user_id" id="user_id" value="">
    117117      <div class="form-row">
    118118        <div class="form-group col-md-3">
     
    128128          <input type="email" class="form-control" id="email">
    129129        </div>
    130         <div class="form-group col-md-3">
    131           <label>Ruolo*</label>
    132           <select class="form-control" id="role" required>
    133             <option value="">Seleziona...</option>
    134             <option value="admin">Admin</option>
    135             <option value="operatore">Operatore</option>
    136             <option value="operatore presidente">Operatore Presidente</option>
    137           </select>
    138         </div>
     130                <div class="form-group col-md-3">
     131                        <label>Nominativo</label>
     132                        <input type="text" class="form-control" id="nominativo">
     133                </div>
    139134      </div>
    140135
    141       <div id="presidenteFields" style="display:none">
    142         <div class="form-row">
    143           <div class="form-group col-md-4">
    144             <label>Nome</label>
    145             <input type="text" class="form-control" id="nome">
    146           </div>
    147           <div class="form-group col-md-4">
    148             <label>Cognome</label>
    149             <input type="text" class="form-control" id="cognome">
    150           </div>
    151           <div class="form-group col-md-4">
    152             <label>Telefono</label>
    153             <input type="tel" class="form-control" id="telefono">
    154           </div>
    155         </div>
    156         <div class="form-row">
    157           <div class="form-group col-md-4">
    158             <label>Sede*</label>
    159             <select id="sede" class="form-control" required></select>
    160           </div>
    161           <div class="form-group col-md-4">
    162             <label>Sezione*</label>
    163             <select id="sezione" class="form-control" required></select>
    164           </div>
    165           <div class="form-group col-md-4">
    166             <label>Stato*</label>
    167             <select id="stato" class="form-control" required>
    168               <option value="attivo">Attivo</option>
    169               <option value="disattivo">Disattivo</option>
    170             </select>
    171           </div>
    172         </div>
    173       </div>
    174136
    175137      <button type="button" class="btn btn-success" id="saveBtn">Aggiungi Utente</button>
     
    190152          <th>Username</th>
    191153          <th>Email</th>
    192           <th>Ruolo</th>
    193           <th>Sede</th>
    194           <th>Sezione</th>
    195           <th>Stato</th>
     154          <th>Nominativo</th>
    196155          <th>Azioni</th>
    197156        </tr>
    198157      </thead>
    199       <tbody id="userRows"></tbody>
     158      <tbody id="userRows"><?php include('elenco_utenti.php'); ?></tbody>
    200159    </table>
    201160  </div>
     
    203162
    204163<script>
    205 const currentUserRole = '<?php echo $currentUserRole; ?>';
    206 let users = <?php echo json_encode(array_values(array_filter($users, fn($u) => $u['role'] !== 'superuser'))); ?>;
    207 const sediData = <?php echo json_encode($sedi); ?>;
    208 
    209 const userForm = document.getElementById('userForm');
    210 const userRows = document.getElementById('userRows');
    211 const presidenteFields = document.getElementById('presidenteFields');
    212 const roleSelect = document.getElementById('role');
    213 const sedeSelect = document.getElementById('sede');
    214 const sezioneSelect = document.getElementById('sezione');
    215 const passwordField = document.getElementById('password');
    216 const formTitle = document.getElementById('form-title');
    217 const saveBtn = document.getElementById('saveBtn');
    218 
    219 roleSelect.addEventListener('change', () => {
    220   presidenteFields.style.display = roleSelect.value === 'operatore presidente' ? 'block' : 'none';
    221 });
    222 
    223 function populateSedi() {
    224   sedeSelect.innerHTML = '<option value="">Seleziona sede</option><option value="tutte">Tutte le sedi</option>';
    225   Object.keys(sediData).forEach(sede => {
    226     sedeSelect.innerHTML += `<option value="${sede}">${sede}</option>`;
    227   });
    228 }
    229 
    230 sedeSelect.addEventListener('change', () => {
    231   const sede = sedeSelect.value;
    232   if (sede === 'tutte') {
    233     sezioneSelect.innerHTML = '<option value="tutte">Tutte le sezioni</option>';
    234   } else {
    235     sezioneSelect.innerHTML = sediData[sede].map(s => `<option value="${s}">${s}</option>`).join('');
    236     sezioneSelect.innerHTML += '<option value="tutte">Tutte le sezioni</option>';
    237   }
    238 });
    239 
    240 function renderUsers() {
    241   userRows.innerHTML = '';
    242   users.forEach(user => {
    243     if (currentUserRole === 'operatore' && user.role !== 'operatore presidente') return;
    244     const tr = document.createElement('tr');
    245     tr.innerHTML = `
    246       <td>${user.username}</td>
    247       <td>${user.email || ''}</td>
    248       <td>${user.role}</td>
    249       <td>${user.sede || ''}</td>
    250       <td>${user.sezione || ''}</td>
    251       <td>${user.stato || ''}</td>
    252       <td>
    253         <button class="btn btn-sm btn-warning me-1" onclick="editUser(${user.id})">Modifica</button>
    254         ${currentUserRole !== 'operatore' ? `<button class="btn btn-sm btn-danger" onclick="deleteUser(${user.id})">Elimina</button>` : ''}
    255       </td>
    256     `;
    257     userRows.appendChild(tr);
    258   });
    259 }
    260164
    261165function editUser(id) {
    262166  const u = users.find(u => u.id === id);
    263167  if (!u) return;
    264   document.getElementById('user_id').value = u.id;
    265   document.getElementById('username').value = u.username;
    266   document.getElementById('email').value = u.email || '';
    267   passwordField.value = '';
    268   passwordField.required = false;
    269   roleSelect.value = u.role;
    270   roleSelect.dispatchEvent(new Event('change'));
    271   if (u.role === 'operatore presidente') {
    272     document.getElementById('nome').value = u.nome || '';
    273     document.getElementById('cognome').value = u.cognome || '';
    274     document.getElementById('telefono').value = u.telefono || '';
    275     sedeSelect.value = u.sede || '';
    276     sedeSelect.dispatchEvent(new Event('change'));
    277     sezioneSelect.value = u.sezione || '';
    278     document.getElementById('stato').value = u.stato || 'attivo';
     168  document.getElementById('username').value = document.getElementById('username'+id).innerText;
     169  document.getElementById('password').value = '';
     170  document.getElementById('email').value = document.getElementById('email'+id).innerText;
     171  document.getElementById('nominativo').value = document.getElementById('nominativo'+id).innerText;;
     172  document.getElementById ( "saveBtn" ).textContent = "Salva modifiche";
     173
     174}
     175
     176
     177function aggiungiUser(e) {
     178    e.preventDefault();
     179
     180        const username = document.getElementById ( "username" ).value
     181        const password = document.getElementById ( "password" ).value
     182        const email = document.getElementById ( "email" ).value
     183        const nominativo = document.getElementById ( "nominativo" ).value
     184
     185    // Crea un oggetto FormData e aggiungi il file
     186    const formData = new FormData();
     187    formData.append('funzione', 'salvaUtente');
     188    formData.append('username', username);
     189    formData.append('password', password);
     190    formData.append('email', email);
     191    formData.append('nominativo', nominativo);
     192    formData.append('op', 'salva');
     193
     194    // Invia la richiesta AJAX usando Fetch
     195    fetch('../principale.php', {
     196        method: 'POST',
     197        body: formData // FormData viene gestito automaticamente da Fetch per l'upload
     198    })
     199    .then(response => response.text()) // O .json() se il server risponde con JSON
     200    .then(data => {
     201        risultato.innerHTML = data; // Mostra la risposta del server
     202                document.getElementById ( "saveBtn" ).textContent = "Aggiungi Utente";
     203                document.getElementById ( "username" ).value = '';
     204                document.getElementById ( "password" ).value = "";
     205                document.getElementById ( "email" ).value = '';
     206                document.getElementById ( "nominativo" ).value = '';
     207    })
     208    .catch(error => {
     209        console.error('Errore durante l\'upload:', error);
     210        risultato.innerHTML = 'Si è verificato un errore durante l\'upload.';
     211    });
     212};
     213
     214  function deleteUtente(index) {
     215        var username = document.getElementById ( "username"+index ).innerText
     216    var xmlhttp = new XMLHttpRequest();
     217    xmlhttp.onreadystatechange = function() {
     218                if (this.readyState == 4 && this.status == 200) {
     219                                document.getElementById("risultato").innerHTML = this.responseText;
     220                }
     221    }
     222    xmlhttp.open("GET","../principale.php?funzione=salvaUtente&username="+username+"&op=cancella",true);
     223    xmlhttp.send();
     224
     225//      document.getElementById("riga"+index).style.display = 'none'
    279226  }
    280   formTitle.innerText = 'Modifica Utente';
    281   saveBtn.innerText = 'Modifica Utente';
    282   document.getElementById('form-title').scrollIntoView({ behavior: 'smooth', block: 'start' });
    283 
    284 }
    285 
    286 function deleteUser(id) {
    287   const u = users.find(u => u.id === id);
    288   if (!u) return;
    289   if (confirm(`Confermi l'eliminazione dell'utente "${u.username}"?`)) {
    290     users = users.filter(u => u.id !== id);
    291     renderUsers();
    292     alert('Utente eliminato con successo.');
    293   }
    294 }
    295 
    296 document.getElementById('cancelEdit').addEventListener('click', () => {
    297   userForm.reset();
    298   presidenteFields.style.display = 'none';
    299   passwordField.required = true;
    300   document.getElementById('user_id').value = '';
    301   formTitle.innerText = 'Aggiungi Utente';
    302   saveBtn.innerText = 'Salva';
    303 });
    304 
    305 saveBtn.addEventListener('click', () => {
    306   const id = parseInt(document.getElementById('user_id').value);
    307   const username = document.getElementById('username').value.trim();
    308   const password = passwordField.value.trim();
    309   const email = document.getElementById('email').value.trim();
    310   const role = roleSelect.value;
    311 
    312   if (!username || (!id && !password) || !role) return alert('Compila i campi obbligatori.');
    313 
    314   let user = { id: id || Date.now(), username, email, role };
    315   if (!id && password) user.password = password;
    316 
    317   if (role === 'operatore presidente') {
    318     user.nome = document.getElementById('nome').value.trim();
    319     user.cognome = document.getElementById('cognome').value.trim();
    320     user.telefono = document.getElementById('telefono').value.trim();
    321     user.sede = sedeSelect.value;
    322     user.sezione = sezioneSelect.value;
    323     user.stato = document.getElementById('stato').value;
    324   }
    325 
    326   const index = users.findIndex(u => u.id === id);
    327   if (index > -1) {
    328     users[index] = { ...users[index], ...user };
    329     alert('Utente aggiornato con successo.');
    330   } else {
    331     users.push(user);
    332     alert('Utente aggiunto con successo.');
    333   }
    334 
    335   userForm.reset();
    336   presidenteFields.style.display = 'none';
    337   passwordField.required = true;
    338   document.getElementById('user_id').value = '';
    339   formTitle.innerText = 'Aggiungi Utente';
    340   saveBtn.innerText = 'Aggiungi Utente';
    341   renderUsers();
    342 });
    343 
    344 populateSedi();
    345 renderUsers();
     227
    346228</script>
Note: See TracChangeset for help on using the changeset viewer.