Non sono tanto preoccupato per lo spreco di spazio, ma ho trovato un’altra “questione” nel tuo codice JS, che per il resto è molto buono. Forse puoi darci un’occhiata?
Abbiamo gruppi di tag “solo per lo staff” (ad esempio tag nascosti e tag di sistema) e gruppi di tag obbligatori per gli utenti per categoria. Entrambi sono collegati tramite “Ristretta questi gruppi di tag a questa categoria”.
Ora, questo codice controlla solo se una categoria consente tag o se tag_groups.length > 0 o allowed_tags > 0, ma sfortunatamente questo è sempre vero poiché abbiamo anche quei gruppi di tag solo per lo staff nei gruppi di tag ristretti.
Il codice potrebbe essere modificato per tenere conto del contesto dell’utente e verificare se ci sono davvero tag disponibili per questo specifico utente?
if(category != null) {
if (
category.allow_global_tags == true ||
category.allowed_tag_groups.length > 0 ||
category.allowed_tags.length > 0
) {
toggleTagChooser("visible");
}
}
Dovrebbe essere possibile contare solo i tag pubblici nell’array category.allowed_tag_groups.length per gli utenti non staff (o sono disponibili solo i nomi e non gli stati nell’array?):
public_category.allowed_tag_groups = [public_tag_group.name, staff_only_tag_group.name]
private_category.allowed_tag_groups = [private_tag_group.name, staff_only_tag_group.name]
Ok, aggiornamento:
Nel nostro caso, esamineremo i nomi in allowed_tag_groups e li escluderemo dall’array se currentUser non è staff. Ma è un workaround sporco, poiché non so come aggiungere il contesto dell’utente qui (o se ciò sia possibile dato il codice core attuale, non credo di sì).
var non_staff_tag_groups = category.allowed_tag_groups.filter(filterHidden);
function filterHidden(value) {
if(value.toLowerCase().indexOf("hidden") === -1 && value.toLowerCase().indexOf("system") === -1) return value;
}
if (
category.allow_global_tags == true ||
(category.allowed_tag_groups.length > 0 && this.currentUser.staff) ||
(non_staff_tag_groups.length > 0 && !this.currentUser.staff) ||
category.allowed_tags.length > 0
) {
toggleTagChooser("visible");
}
}
Ma questo è un hack sporco; l’intera dropdown dei tag nel composer dovrebbe essere più contestuale tramite il core e dovrebbe considerare tutti i casi sopra menzionati.
