// FINE CORS CONFIGURATION // ENDPOINT PERSONALIZZATO PER ELIMINAZIONE UTENTI - WORDPRESS MULTISITE add_action('rest_api_init', function() { register_rest_route('api/v1', '/users/delete', array( 'methods' => 'DELETE', 'callback' => 'api_delete_user_multisite', 'permission_callback' => 'api_delete_user_permission_check' )); }); /** * Controlla i permessi per l'eliminazione utente */ function api_delete_user_permission_check($request) { // Verifica che ci sia un token JWT valido $token = $request->get_header('Authorization'); if (!$token) { return new WP_Error('no_auth', 'Token di autorizzazione mancante', array('status' => 401)); } // Rimuove "Bearer " dal token $token = str_replace('Bearer ', '', $token); // Verifica JWT usando JWT Auth plugin try { // Verifica che JWT Auth plugin sia attivo if (!class_exists('Jwt_Auth_Public')) { return new WP_Error('jwt_plugin_missing', 'JWT Auth plugin non trovato', array('status' => 500)); } // Decodifica e valida il JWT token $jwt_parts = explode('.', $token); if (count($jwt_parts) !== 3) { return new WP_Error('invalid_token', 'Formato token non valido', array('status' => 401)); } // Decodifica il payload $payload = json_decode(base64_decode($jwt_parts[1]), true); if (!$payload) { return new WP_Error('invalid_token', 'Payload token non valido', array('status' => 401)); } // Verifica struttura JWT Auth plugin if (!isset($payload['data']['user']['id'])) { return new WP_Error('invalid_token', 'Struttura token non valida', array('status' => 401)); } // Verifica scadenza token if (isset($payload['exp']) && time() > $payload['exp']) { return new WP_Error('token_expired', 'Token scaduto', array('status' => 401)); } $user_id = intval($payload['data']['user']['id']); } catch (Exception $e) { return new WP_Error('token_validation_error', 'Errore validazione token: ' . $e->getMessage(), array('status' => 401)); } // Verifica che l'utente esista $user = get_user_by('id', $user_id); if (!$user) { return new WP_Error('user_not_found', 'Utente non trovato', array('status' => 404)); } // Verifica che l'utente possa eliminare il proprio account // Nota: in REST API context, get_current_user_id() potrebbe non funzionare, // quindi ci basiamo sull'ID nel JWT token validato // Super Admin può eliminare qualunque utente if (is_super_admin($user_id)) { // Un super admin può eliminare altri utenti, ma non se stesso tramite questo endpoint // (per sicurezza, un super admin dovrebbe usare wp-admin) return new WP_Error('super_admin_restriction', 'I Super Admin devono usare wp-admin per eliminare account', array('status' => 403)); } // Verifica che l'utente esista nella rete multisite if (is_multisite() && !is_user_member_of_blog($user_id, get_current_blog_id())) { // Controlla se è membro di almeno un sito nella rete $user_blogs = get_blogs_of_user($user_id); if (empty($user_blogs)) { return new WP_Error('user_not_in_network', 'Utente non trovato nella rete', array('status' => 404)); } } // Salva l'ID utente nella request per usarlo nel callback $request->set_param('validated_user_id', $user_id); // Log per debug (rimuovere in produzione se non necessario) error_log("API Delete User: Validazione completata per utente ID: " . $user_id); return true; } /** * Elimina un utente da tutta la rete WordPress Multisite */ function api_delete_user_multisite($request) { $user_id = $request->get_param('validated_user_id'); if (!$user_id) { return new WP_Error('missing_user_id', 'ID utente mancante', array('status' => 400)); } // Verifica che sia WordPress Multisite if (!is_multisite()) { // WordPress singolo - elimina normalmente $result = wp_delete_user($user_id, 1); // Riassegna contenuti all'admin (ID 1) if ($result) { return array( 'success' => true, 'message' => 'Utente eliminato con successo', 'user_id' => $user_id ); } else { return new WP_Error('delete_failed', 'Errore durante l\'eliminazione', array('status' => 500)); } } // WordPress Multisite - elimina da tutti i siti try { // Ottieni tutti i siti dove l'utente è membro $user_blogs = get_blogs_of_user($user_id); // Rimuovi l'utente da ogni sito foreach ($user_blogs as $blog) { switch_to_blog($blog->userblog_id); // Riassegna tutti i contenuti all'admin del sito (di solito ID 1) $admin_users = get_users(array('role' => 'administrator', 'number' => 1)); $reassign_id = !empty($admin_users) ? $admin_users[0]->ID : 1; // Rimuovi l'utente dal sito remove_user_from_blog($user_id, $blog->userblog_id, $reassign_id); restore_current_blog(); } // Elimina l'utente dalla rete (solo se è Super Admin o l'utente stesso) if (is_super_admin() || $user_id === get_current_user_id()) { wpmu_delete_user($user_id); } return array( 'success' => true, 'message' => 'Utente eliminato con successo da tutta la rete', 'user_id' => $user_id, 'sites_removed' => count($user_blogs) ); } catch (Exception $e) { return new WP_Error('multisite_delete_failed', 'Errore durante l\'eliminazione Multisite: ' . $e->getMessage(), array('status' => 500)); } } // FINE ENDPOINT ELIMINAZIONE UTENTI $subRole = get_role( 'subscriber' ); Giovannini imprendibile, "Chorno" potente: Petrucci l'avversario migliore - Youtvrs

Giovannini imprendibile, “Chorno” potente: Petrucci l’avversario migliore

PROMOZIONE – Le pagelle del posticipo tra Trodica e Monticelli vinto dai padroni di casa

di Lorenzo Accattoli

TRODICA

Edoardo Febbo: 6. Sicuro tra i pali e puntuale nelle uscite sui palloni alti in area.

Sebastian Greco: 6,5. Preciso negli interventi, concede molto poco dalla sua parte del campo.

Luca Ciaramitaro: 6. Guida con sicurezza la linea difensiva, con interventi puntuali sugli attaccanti avversari. Pesante l’ammonizione ricevuta al 20’ del primo tempo.

Diego Ciccalè: 6. Si comporta bene in fase difensiva, e aiuta talvolta anche l’attacco con cross interessanti. Riceve un cartellino giallo nel secondo tempo.

Daniele Gobbi: 7. Ottima prestazione sulla fascia destra: sostiene la squadra in ripiegamento difensivo ed è un costante pericolo in attacco con cross, inserimenti e tiri in porta.

Paride Marcaccio: 6. Protegge bene la sua retroguardia, aiutando nell’impostazione della manovra e tentando anche un paio di conclusioni troppo alte. Viene ammonito ad inizio ripresa.

Mattia Emiliozzi: 6,5. Importante la sua presenza a centrocampo, e il suo contributo in fase offensiva, con qualche inserimento interessante. Riceve un cartellino giallo ad inizio secondo tempo.

Lion Giovannini: 7. Da lui partono i principali pericoli creati dal Trodica, con continue sovrapposizioni e scambi in zona offensiva, a cui si aggiunge la generosità nei ripiegamenti difensivi.

Pablo Panichelli: 6,5. Sempre prezioso il suo lavoro di equilibratore a tutto campo: in mezzo aiuta i suoi compagni a recuperare la palla, mentre in avanti offre cross e inserimenti ma con poca incisività rispetto al solito.

Roman Chornopyshchuk: 7,5. Costantemente al centro dell’attacco del Trodica, segna di voglia e potenza la rete che decide l’incontro ed ha anche l’occasione per raddoppiare, nella ripresa.

Santino Bonvin: 6. Nonostante la marcatura continua, lotta, pressa e riesce a creare qualcosa di utile per i compagni, come un bel pallone non sfruttato per Chornopyshchuk.

SUBENTRATI

Abd Rahman Merzoug: 6,5. Veloce nelle ripartenze dei suoi, è protagonista di un buono spunto offensivo che avrebbe potuto portare al 2 a 0.

Fernando Candia: 6. Dà maggiore stabilità al centrocampo, non facendo errori particolari.

Petrisor Voinea: 6,5. Entra per fare il riferimento in attacco, e ci riesce con una bella azione personale che però non viene premiata dal gol.

Alex Berrettoni: 6. Aiuta i suoi a gestire il pallone e si fa trovare nelle ripartenze finali del Trodica.

ALLENATORE

Roberto Buratti: 6,5. Il mister biancoceleste ha la meglio di una buonissima squadra, battendola di misura tra le mura amiche, nonostante qualche pericolo corso. Una vittoria che però premia l’atteggiamento trasmesso ai giocatori, che permette loro di riprendersi la testa della classifica.

****

MONTICELLI

Davide Marcucci: 5,5. Affidabile tra i pali, ma si fa un po’ sorprendere in occasione del gol dell’1 a 0.

Giacomo Mattei: 5,5. Va in difficoltà dalla sua parte di campo, dove concede molto a Giovannini. Riceve un’ammonizione pesante nella parte iniziale della partita.

Emanuele Padella: 6,5. Puntuale negli interventi su Bonvin, a cui concede poco in area di rigore. Ha un’occasione per pareggiare su un corner nel primo tempo.

Alessio Natalini: 6. Difende abbastanza bene la sua zona di competenza, riuscendo a volte a stoppare Gobbi, mentre in altre va più in affanno.

Cristiano Canala: 6. Cerca di spingere molto sulla fascia nelle azioni d’attacco dei suoi, e dietro offre una discreta copertura difensiva. Viene ammonito nel secondo tempo.

Lorenzo Santoni: 6. Lotta per recuperare palloni a centrocampo e dà una mano anche a chiudere in fase difensiva.

Marco Mariani Gibellieri: 6,5. Il regista del Monticelli, da cui partono le occasioni più pericolose per i suoi. Tanta personalità in mezzo al campo ma nel concreto poco da registrare in fase offensiva. Viene ammonito ad inizio ripresa.

Stefano Pietrucci: 5,5. Perde una palla sanguinosa che costa la rete ai suoi, poi gioca una discreta partita sulla fascia sinistra, compiendo un bel lavoro di copertura difensiva.

Andrea Petrucci: 7. Il migliore dell’attacco biancoazzurro, sempre presente in tutte le ripartenze offensive, con suggerimenti, cross e tiri in porta, nessuno dei quali però pericoloso.

Giorgio Galli: 6. Segna una rete che gli viene annullata, lotta con i difensori avversari e fa salire la squadra. Praticamente nulla però la sua produzione offensiva, con pochissimi tiri in porta.

Edoardo Marini: 5,5. In fase offensiva viene annullato quasi sempre, non riuscendo quasi mai a farsi vedere. Meglio in quella difensiva, dove torna spesso indietro per aiutare i compagni.

SUBENTRATI

Francesco Cannellini: 6. Cerca di rendersi pericoloso con strappi in velocità e attacchi alla profondità. Ha una sola grande occasione, in cui non riesce a segnare da buona posizione. Riceve un cartellino giallo verso la fine della partita.

Manuel Nepi: 6. Aiuta a tenere la palla e prova a proporsi in fase offensiva, ma senza successo.

Federico Maoloni: 6. Consolida la difesa dei suoi, provando anche un paio di corse sulla fascia.

Riccardo Angelini: SV. Non mostra niente degno di nota nel poco tempo in cui è in campo.

ALLENATORE

Christian Settembri: 6. L’allenatore del Monticelli esce sconfitto ma consapevole di essersela giocata fino alla fine per tentare di giungere al pareggio. Promossa la reazione dei suoi, che hanno resistito, sono rimasti in partita e hanno provato anche a creare delle azioni per segnare.

redazione
Author: redazione

Potrebbe interessarti anche

                       

Articoli correlati

                       

Dalla home
VUOI RIMANERE SEMPRE AGGIORNATO?

Iscriviti al nostro
canale telegram

Autore

I Più LETTI
DELLA SETTIMANA

I Più condivisi
DELLA SETTIMANA

 

Ultime NEWS