italia / design-scuole-wordpress-theme

Tema Wordpress dedicato al progetto per i siti delle scuole
GNU Affero General Public License v3.0
93 stars 215 forks source link

Errore linea 524 circolare.php dopo aggiornamento versione tema 2.6.0 #508

Closed Simsimus closed 1 year ago

Simsimus commented 1 year ago

Prerequisiti

Descrivi il problema

Buongiorno, volevo segnalare un errore causato dalla nuova versione del tema 2.6.0 e più precisamente dal file circolare.php.

Di seguito il messaggio automatico inviato da wordpress che intercetta il problema: Un errore di E_ERROR è stato causato nella linea 524 del file /wp-content/themes/design-scuole-wordpress-theme-main/inc/admin/circolare.php. Messaggio di errore: Uncaught TypeError: array_merge(): Argument 2 must be of type array, null given in /wp-content/themes/design-scuole-wordpress-theme-main/inc/admin/circolare.php:524 Stack trace: 0 /wp-content/themes/design-scuole-wordpress-theme-main/inc/admin/circolare.php(524): array_merge() 1 /wp-includes/class-wp-hook.php(310): dsi_circolare_modify_list_row_actions() 2 /wp-includes/plugin.php(205): WP_Hook->apply_filters() 3 /wp-admin/includes/class-wp-posts-list-table.php(1573): apply_filters() 4 /wp-admin/includes/class-wp-posts-list-table.php(1067): WP_Posts_List_Table->handle_row_actions() 5 /wp-admin/includes/class-wp-list-table.php(1757): WP_Posts_List_Table->_column_title() 6 /wp-admin/includes/class-wp-posts-list-table.php(1421): WP_List_Table->single_row_columns() 7 /wp-admin/includes/class-wp-posts-list-table.php(829): WP_Posts_List_Table->single_row() 8 /wp-admin/includes/class-wp-posts-list-table.php(805): WP_Posts_List_Table->_display_rows() 9 /wp-admin/includes/class-wp-list-table.php(1676): WP_Posts_List_Table->display_rows() 10 /wp-admin/includes/class-wp-list-table.php(1603): WP_List_Table->display_rows_or_placeholder() 11 /wp-admin/edit.php(495): WP_List_Table->display() 12 {main} thrown

Questo errore causa la mancata visibilità dell'elenco delle circolari dal backend (vedere esempio screen-shot), ma non ho identificato bene quando accade perchè in alcuni casi viene causato dalle circolari in bozza (ma non tutte), in altri casi da alcune circolari riservate (ma non tutte). Questo problema non accadeva con la versione 2.5.1. Se le circolari incriminate vengono eliminate la problematica si risolve, nel senso che l'elenco dal backend torna ad essere tutto visibile e non si interrompe alla prima con errore, ma non sempre possono essere eliminate a meno che non siano solo bozze.

Spero che questo problema possa essere risolto il prima possibile perchè va ad intaccare un comparto importante come le circolari nelle quali potrebbero essere presenti delle "prese visioni" da parte dei docenti. Grazie

Includi link o screenshot

screen-errore-circoalre

Su quale sisitema operativo stai riscontrando il problema?

Windows

Su quale browser stai riscontrando il problema?

Qualsiasi

Che versione del tema stai utilizzando?

2.6.0

corrado1975 commented 1 year ago

Ciao, riscontro stesso problema, ma la cosa strana è che stiamo realizzando 2 siti per due scuole su uno ho questo problema sull'altro no, la versione del tema è la stessa 2.6.0

Simsimus commented 1 year ago

Se può essere utile, a seguito approfondimenti, ho riscontrato che per ora accade in due casi: 1) per le circolari che per qualche motivo sono finite in bozza senza il campo obbligatorio "Tipologia" (ad esempio "Circolari per alunni e famiglie") 2) per le circolari riservate i cui destinatari sono selezionati in base al ruolo, come da seguente screen: errore-ruoli

Quello che non mi è chiaro è come fare a riprodurre il problema. Forse è una combinazione di più cose che lo generano, ma al momento non saprei quali...

rcoopcsc commented 1 year ago

@Simsimus hai provato assicurandoti che tutte le circolari abbiano una tipologia (ed una sola, obbligatoria) ed al massimo un ruolo o gruppo, nel caso si voglia limitarne l'accesso ai destinatari? PS: per semplificare la vita ed evitare "errori" ho fatto questa PR facci sapere se le due cose insieme bastano a risolvere il problema. Grazie!

Simsimus commented 1 year ago

Ciao @rcoopcsc, ho già testato la PR indicata, ma non risolve il problema perchè sia con il checkbox (che comunque per quasi il 100% delle scuole è preferibile al radio button) che con il radio button, la circolare può essere memorizzata in bozza senza il campo obbligatorio "Tipologia". Per essere più preciso anche nella versione checkbox, se si prova a salvare senza aver indicato almeno una tipologia, il salvataggio non prosegue e l'utente viene avvisato che ne deve selezionare almeno una, ma il problema lo causa wordpress stesso quando un utente digita il titolo della circolare e poi clicca altrove uscendo dal form delle circolari. In questo caso wordpress salva automaticamente in bozza la circolare con il solo titolo, senza la tipologia, di conseguenza viene generato il problema. A parità di condizioni, questa problematica non si verificava con la versione 2.5.1, pertanto il problema è stato introdotto da alcune modifiche apportate al file circolare.php (e correlati) nella versione 2.6.0 che probabilmente da' per scontata la presenza della tipologia non prevedendo che potrebbe essere anche null.

Riporto di seguito un riepilogo delle lamentele manifestate da alcune scuole a seguito della versione 2.6.0: 1) gli errori sopra segnalati; 2) la mancata visualizzazione del titolo della circolare quando è riservata, preferivano che ad essere riservato fosse solo il contenuto e non il titolo e a tal proposito consiglierei di introdurre un radio button SI/NO nella configurazione per far scegliere alla scuola se rendere il titolo visibile o meno per le circolari riservate; 3) se la circolare è riservata, allo stato attuale, non solo non viene mostrato il titolo, ma neppure il numero della circolare stessa (vedere screen allegato), è questo crea lamentele. Mi sembra di capire che il numero non si veda se la circolare viene resa riservata dal plugin Members.

Auspico si possa ritornare alla gestione delle circolari come era nella versione 2.5.1, magari con qualche miglioria come sopra segnalata. Grazie

Screen con titolo riservato: circolare-no-numero

rcoopcsc commented 1 year ago

Grazie @Simsimus per il prezioso lavoro di debugging che hai fatto. Ho corretto gli errori che avevo fatto e generavano il problema: ora mi sembra scorrere tutto liscio. Riguardo le tue considerazioni su cosa mostrare nelle card delle circolari riservate (se anche il titolo o solo il numero) possiamo certamente aprire la discussione per re-includerlo, anche in modo opzionale, come suggerivi tu. Invece la tipologia, secondo me, dovrebbe restare con il radio button (ovvero con la possibilità di sceglierne solo una) essenzialmente per due motivi:

  1. nel documento di architettura dell'informazione delle scuole c'è scritto "Indicare se la circolare è destinata agli alunni e alle famiglie OPPURE ai docenti e al personale ATA". Sembra quindi che la interpretazione ufficiale sia che le tipologie debbano essere solo due, e mutualmente esclusive.
  2. il breadcrumb della pagina - ove ci fossero due tipologie per la stessa circolare - diventerebbe molto problematico se non impossibile. Mentre con una è tutto più chiaro e pulito. Cosa ne pensi?
Simsimus commented 1 year ago

Grazie @rcoopcsc per l'intervento che ha risolto il problema del salvataggio in bozza senza "tipologia", infatti ora anche per quelle circolari salvate automaticamente da wordpress senza la tipologia fila tutto liscio, ma non è stato risolto il problema di quando una circolare viene salvata come riservata in base al ruolo: ruolo

Quest'ultimo errore causa un problema ancora più grave, perchè nel backend la circolare non è più modificabile, nel form scompare il bottone pubblica/aggiorna, pertanto la si può solo eliminare dalla lista attraverso le "Azioni di gruppo", invece nel frontend il sito va in blocco non appena si tenta di visualizzare la schermata delle circolari.

La segnalazione che genera wordpress è la seguente: Fatal error: Uncaught TypeError: array_intersect(): Argument 1 ($array) must be of type array, string given in /wp-content/themes/design-scuole-wordpress-theme-main/functions.php:346 Stack trace: 0 /wp-content/themes/design-scuole-wordpress-theme-main/functions.php(346): array_intersect('', Array) 1 /wp-content/themes/design-scuole-wordpress-theme-main/inc/admin/circolare.php(521): circolare_access(744) 2 /wp-includes/class-wp-hook.php(310): dsi_circolare_modify_list_row_actions(Array, Object(WP_Post)) 3 /wp-includes/plugin.php(205): WP_Hook->apply_filters(Array, Array) 4 /wp-admin/includes/class-wp-posts-list-table.php(1573): apply_filters('post_row_action...', Array, Object(WP_Post)) 5 /wp-admin/includes/class-wp-posts-list-table.php(1067): WP_Posts_List_Table->handle_row_actions(Object(WP_Post), 'title', 'title') 6 /wp-admin/includes/class-wp-list-table.php(1757): WP_Posts_List_Table->_column_title(Object(WP_Post), 'title column-ti...', 'data-colname="T...', 'title') 7 /wp-admin/includes/class-wp-posts-list-table.php(1421): WP_List_Table->single_row_columns(Object(WP_Post)) 8 /wp-admin/includes/class-wp-posts-list-table.php(829): WP_Posts_List_Table->single_row(Object(WP_Post), 0) 9 /wp-admin/includes/class-wp-posts-list-table.php(805): WP_Posts_List_Table->_display_rows(Array, 0) 10 /wp-admin/includes/class-wp-list-table.php(1676): WP_Posts_List_Table->display_rows() 11 /wp-admin/includes/class-wp-list-table.php(1603): WP_List_Table->display_rows_or_placeholder() 12 /wp-admin/edit.php(495): WP_List_Table->display() 13 {main} thrown in /wp-content/themes/design-scuole-wordpress-theme-main/functions.php on line 346

Per quanto riguarda il radio button o checkbox, personalmente sono dell'idea sia meglio lasciare il checkbox, non perchè lo preferisca, ma perchè so' per certo che le scuole si lamenteranno in quanto spessissimo devono inserire circolari che sono afferenti sia al personale che alle famiglie e se viene messo il radio button avranno problemi la cui soluzione non credo possa essere il caricare due volte la stessa circolare solo per associarla alle due tipologie. Il breadcrumb attualmente, quando si accede ad una circolare specifica, non riporta la tipologia di appartenenza ecco perchè suggerirei di inserire, al check della tipologia (magari sotto forma di domanda: "vuoi riportare la tipologia nell'abstract Si/No"), la relativa descrizione nell'abstract; tale soluzione risolverebbe il problema alla scuola ed eviterebbe la segnalazione dell'asseveratore che vuole che tale dato si evinca nella pubblicazione. Allego lo screen di come potrebbe essere:

Visualizzazione nella lista: tipologia circolare nella lista

Visualizzazione nel dettaglio: tipologia circolare nel dettaglio

Infine, circa la reintroduzione della visualizzazione del titolo in forma opzionale, per le circolari riservate, credo sia una necessità, almeno sarà ogni scuola a decidere in base alle proprie esigenze.

Grazie per il tempo che vorrai dedicare a queste osservazioni...

rcoopcsc commented 1 year ago

@Simsimus dovremmo essere a posto. In pratica, il tema consente di selezionare ruoli e/o gruppi tra i destinatari ma anche lasciare poi il campo di selezione corrispondente vuoto. Era in quel caso limite in cui, tecnicamente, la funzione che cercava di intersecare gli arrays non funzionava perchè giustamente ne mancava uno, e quindi il flusso veniva interrotto. Incidentalmente, è stata corretta la stessa problematica anche nella funzione dsi_user_can_sign_circolare() in utils.php così siamo sicuri che non dia problemi neanche lì. Il bug dovrebbe essere finalmente risolto! Grazie ancora per la tua utile segnalazione.

Per quanto riguarda la dinamica di gestione delle tipologie di circolari: nulla vieta di creare una tipologia "personale e famiglie" ed utilizzare quella. Il fatto di non poter attribuire più di una tipologia a ciascuna circolare non impedisce di avere più di due tipologie tra cui scegliere. Secondo me la scelta obbligatoria e mutualmente esclusiva assicurata dal radio button è la più coerente con il resto del tema (vedi i filtri dell'archivio, anch'essi radio buttons), i requisiti per l'asseverazione - soprattutto ora che, con le PR #514 e #515 funziona il discorso breadcrumb e visibilità della tipologia della circolare in frontend come richiesto dagli asseveratori.

Comunque. comprendo i tuoi dubbi sul titolo: se i bug sono risolti, magari spostiamo su Slack la discussione sull'opportunità di re-inserire il titolo nelle circolari riservate, così sentiamo community e team mantainers ed intanto possiamo chiudere la issue?

Simsimus commented 1 year ago

Ciao @rcoopcsc e grazie per l'ottimo lavoro svolto!!! Ora i due problemi segnalati in precedenza sono stati risolti e questo era l'aspetto più importante ;) Se può essere utile volevo segnalare tre cose: 1) se una circolare viene riservata in base al ruolo o in base al gruppo (ad esempio ai docenti) anche se accede l'amministratore o il Dirigente Scolastico, nel frontend resta lo stesso riservata...in pratica può essere visualizzata solo dai quei ruoli/gruppi e non anche da chi ha un livello superiore (magari è corretto così, la mia è solo una osservazione che ovviamente verrebbe meno se il titolo venisse mostrato a prescindere); 2) sono presenti due warning (visibili solo se su PHP.INI display-error è su SI) Warning: Undefined array key "csv" in /wp-content/themes/design-scuole-wordpress-theme-main/inc/admin/circolare.php on line 550 Warning: Undefined array key "pdf" in /wp-content/themes/design-scuole-wordpress-theme-main/inc/dompdf.php on line 16 3) se possibile, e soprattutto se sei d'accordo, suggerirei di inserire la tipologia della circolare sopra, sotto o a destra nel numero della circolare o sotto al titolo (vedere screen) in modo da rendere graficamente più gradevole la presentazione ed occupare meno spazio in verticale circolare riservata

Circa l'opportunità di re-inserire il titolo nelle circolari riservate, possiamo tranquillamente spostare la discussione altrove e quindi chiudere questa issue.

Grazie per il tuo prezioso aiuto e la competenza dimostrata