Changeset 2e3acf5
- Timestamp:
- Nov 17, 2025, 11:47:04 AM (3 weeks ago)
- Branches:
- main
- Children:
- 65575a8
- Parents:
- 3cee05e
- Location:
- admin
- Files:
-
- 2 added
- 3 edited
-
includes/query.php (modified) (1 diff)
-
modules/elenco_utenti.php (added)
-
modules/gestione_enti_comuni.php (modified) (1 diff)
-
modules/gestione_utenti.php (modified) (5 diffs)
-
modules/salva_utente.php (added)
Legend:
- Unmodified
- Added
- Removed
-
admin/includes/query.php
r3cee05e r2e3acf5 123 123 } 124 124 125 function 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 125 135 function elenco_utenti() 126 136 { 127 137 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"; 129 139 $sth = $dbi->prepare("$sql"); 130 140 $sth->execute(); -
admin/modules/gestione_enti_comuni.php
r3cee05e r2e3acf5 221 221 } 222 222 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 }230 223 </script> -
admin/modules/gestione_utenti.php
r3cee05e r2e3acf5 3 3 4 4 $currentUserRole = $_SESSION['ruolo'] ?? 'operatore'; 5 5 $row=elenco_utenti(); 6 foreach($row as $val) 6 7 // Dati fittizi sedi e sezioni 7 8 $sedi = [ … … 114 115 <div class="card-body"> 115 116 <form id="userForm"> 116 <input type="hidden" name="user_id" id="user_id" value="">117 117 <div class="form-row"> 118 118 <div class="form-group col-md-3"> … … 128 128 <input type="email" class="form-control" id="email"> 129 129 </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> 139 134 </div> 140 135 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>174 136 175 137 <button type="button" class="btn btn-success" id="saveBtn">Aggiungi Utente</button> … … 190 152 <th>Username</th> 191 153 <th>Email</th> 192 <th>Ruolo</th> 193 <th>Sede</th> 194 <th>Sezione</th> 195 <th>Stato</th> 154 <th>Nominativo</th> 196 155 <th>Azioni</th> 197 156 </tr> 198 157 </thead> 199 <tbody id="userRows">< /tbody>158 <tbody id="userRows"><?php include('elenco_utenti.php'); ?></tbody> 200 159 </table> 201 160 </div> … … 203 162 204 163 <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 }260 164 261 165 function editUser(id) { 262 166 const u = users.find(u => u.id === id); 263 167 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 177 function 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' 279 226 } 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 346 228 </script>
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/eleonline4/chrome/common/trac_banner.png)