

Ciao, ho Contao 2.11.16 in cui è installato Catalog 2.0.0 Beta2.
Ho configurato un gruppo utenti chiamato "Editori", questi non creano cataloghi ma gestiscono gli elementi in due cataloghi predefiniti: "Categorie" e "Prodotti". I prodotti hanno un campo di selezione multipla (checkbox), per assegnare 1 o più categorie.
Funziona tutto ad eccezione di due cose:
1) In elenco Prodotti, ho il filtro di ricerca in back end, per le categorie quindi in alto a destra ho (cerca categoria = ""). Il valore non posso darlo usando il titolo, altrimenti non escono risultati. Devo cercare per ID categoria, che si scopre dalla tabella Categorie. A parte questo piccolo fastidio, il problema è la ricerca non precisa, mi chiarisco con un esempio.
Orsetti ID 3
Cuori ID 13
Tartarughe ID 1
Se cerco categoria = 3. Escono sia Orsetti che Cuori, facendo confusione. Dopo alcuni test ne deduco che appaiono insieme perché la ricerca considera il 3 dentro a 13. Meglio sarebbe se considerasse il valore esatto e non parziale della striga. Oppure sarebbe meglio "Orsetti" anziché il numero ID.
2) Funzione "modifica tutti i record", e poi tasto "Sposta". Come amministratore è funzionante, ma con l'utente "Editori" no. Appare nel suo caso un errore generico in rosso: "Si è verificato un errore!". E' come se non avesse il permesso a spostare tutti i record, però può spostare singolarmente ogni elemento con il drag&drop.
Da cosa dipende questo blocco? Tra i permessi mi sembra tutto in ordine.
Avete qualche idea? Grazie.
Ho configurato un gruppo utenti chiamato "Editori", questi non creano cataloghi ma gestiscono gli elementi in due cataloghi predefiniti: "Categorie" e "Prodotti". I prodotti hanno un campo di selezione multipla (checkbox), per assegnare 1 o più categorie.
Funziona tutto ad eccezione di due cose:
1) In elenco Prodotti, ho il filtro di ricerca in back end, per le categorie quindi in alto a destra ho (cerca categoria = ""). Il valore non posso darlo usando il titolo, altrimenti non escono risultati. Devo cercare per ID categoria, che si scopre dalla tabella Categorie. A parte questo piccolo fastidio, il problema è la ricerca non precisa, mi chiarisco con un esempio.
Orsetti ID 3
Cuori ID 13
Tartarughe ID 1
Se cerco categoria = 3. Escono sia Orsetti che Cuori, facendo confusione. Dopo alcuni test ne deduco che appaiono insieme perché la ricerca considera il 3 dentro a 13. Meglio sarebbe se considerasse il valore esatto e non parziale della striga. Oppure sarebbe meglio "Orsetti" anziché il numero ID.
2) Funzione "modifica tutti i record", e poi tasto "Sposta". Come amministratore è funzionante, ma con l'utente "Editori" no. Appare nel suo caso un errore generico in rosso: "Si è verificato un errore!". E' come se non avesse il permesso a spostare tutti i record, però può spostare singolarmente ogni elemento con il drag&drop.
Da cosa dipende questo blocco? Tra i permessi mi sembra tutto in ordine.
Avete qualche idea? Grazie.
Marco Damian
www.zod.it
www.zod.it
22/04/2015 12:08
Per il primo problema, in effetti Catalog, memorizza il campo ID della tabella collegata, per cui non è possibile fare una ricerca.
Invece il secondo problema non sono riuscito a ricrearlo.
Io non vedo io comando sposta.... ne come amministratore ne come utente...
Invece il secondo problema non sono riuscito a ricrearlo.
Io non vedo io comando sposta.... ne come amministratore ne come utente...
Paolo B.
paolob@contaocms.it
paolob@contaocms.it
22/04/2015 23:49
Strana differenza, stiamo usando lo stesso Catalog, probabilmente facendo upgrade ho pezzi diversi?
Ad ogni modo io ho in ogni catalogo il solito pulsante "Modifica tutti i record" ed usandolo appaiono le seguenti funzioni: Cancella la selezione, Move, Copy, Override, Modifica la selezione.
Vero è che alcune stringhe sono in inglese, quindi forse qualcosa di strano c'è.
Poi, oggi ho risolto il secondo punto, ho provato a smanettare in "/system/modules/catalog/Catalog.php"
Precisamente la funzione: checkPermission();
Proprio all'inizio c'è un controllo sull'utente admin. Ho commentato la if, quindi ora funzionano le operazioni di massa anche per gli utenti Editori.
So che non è un metodo ortodosso, però nel mio caso sembra funzionare.
Copio la funzione di Catalog per mostrarvela per intero, fatemi sapere se notate problemi in ciò che ho fatto. O se esiste soluzione migliore affinché il gruppo Editori possa finalmente compiere azioni di massa.
Riguardo il primo punto invece devo ancora indagare, mi serve sapere dove viene fatta la query di ricerca, quindi probabilmente cambiare operatore... magari è un "Like" e io voglio una corrispondenza esatta.
Ad ogni modo io ho in ogni catalogo il solito pulsante "Modifica tutti i record" ed usandolo appaiono le seguenti funzioni: Cancella la selezione, Move, Copy, Override, Modifica la selezione.
Vero è che alcune stringhe sono in inglese, quindi forse qualcosa di strano c'è.
Poi, oggi ho risolto il secondo punto, ho provato a smanettare in "/system/modules/catalog/Catalog.php"
Precisamente la funzione: checkPermission();
Proprio all'inizio c'è un controllo sull'utente admin. Ho commentato la if, quindi ora funzionano le operazioni di massa anche per gli utenti Editori.
php:
//if ($this->User->isAdmin) //{ return; //}
So che non è un metodo ortodosso, però nel mio caso sembra funzionare.
Copio la funzione di Catalog per mostrarvela per intero, fatemi sapere se notate problemi in ciò che ho fatto. O se esiste soluzione migliore affinché il gruppo Editori possa finalmente compiere azioni di massa.
php:
public function checkPermission(DataContainer $dc) { $this->import('BackendUser', 'User'); //if ($this->User->isAdmin) //{ return; //} // Set root IDs if (!is_array($this->User->catalogs) || count($this->User->catalogs) < 1) { $root = array(0); } else { $root = $this->User->catalogs; } $id = strlen($this->Input->get('id')) ? $this->Input->get('id') : CURRENT_ID; $urlError = ((version_compare(VERSION.'.'.BUILD, '2.9.0', '>='))?'contao':'typolight').'/main.php?act=error'; // Check current action switch ($this->Input->get('act')) { case 'select': case 'paste': // Allow break; case 'create': $checkid = $this->Input->get('id'); if ($this->Input->get('mode') == 2 && strlen($this->Input->get('pid')) && !strlen($this->Input->get('id'))) { // sorted mode $checkid = $this->Input->get('pid'); } if (!strlen($checkid) || !in_array($checkid, $root)) { $this->log('Not enough permissions to create catalog items in catalog type ID "'.$checkid.'"', 'Catalog checkPermission', 5); $this->redirect($urlError); } break; case 'edit': case 'show': case 'create': case 'copy': case 'cut': case 'delete': $rows = 0; $objTable = $this->Database->prepare("SELECT tableName FROM tl_catalog_types WHERE id=?") ->limit(1) ->execute(CURRENT_ID); if ($objTable->numRows) { $tableName = $objTable->tableName; $objType = $this->Database->prepare("SELECT pid FROM ".$tableName." WHERE id=?") ->limit(1) ->execute($id); $rows = $objType->numRows; } if ($rows < 1) { $this->log('Invalid catalog item ID "'.$id.'"', 'Catalog checkPermission', 5); $this->redirect($urlError); } if (!in_array($objType->pid, $root)) { $this->log('Not enough permissions to '.$this->Input->get('act').' catalog item ID "'.$id.'" of catalog type ID "'.$objType->pid.'"', 'Catalog checkPermission', 5); $this->redirect($urlError); } break; case 'editAll': case 'deleteAll': if (!in_array($id, $root)) { $this->log('Not enough permissions to access catalog type ID "'.$id.'"', 'Catalog checkPermission', 5); $this->redirect($urlError); } $rows = 0; $objTable = $this->Database->prepare("SELECT tableName FROM tl_catalog_types WHERE id=?") ->limit(1) ->execute(CURRENT_ID); if ($objTable->numRows) { $tableName = $objTable->tableName; $objType = $this->Database->prepare("SELECT id FROM ".$tableName." WHERE pid=?") ->execute($id); $rows = $objType->numRows; } if ($rows < 1) { $this->log('Invalid catalog type ID "'.$id.'"', 'Catalog checkPermission', 5); $this->redirect($urlError); } $session = $this->Session->getData(); $session['CURRENT']['IDS'] = array_intersect($session['CURRENT']['IDS'], $objType->fetchEach('id')); $this->Session->setData($session); break; default: if (strlen($this->Input->get('act'))) { $this->log('Invalid command "'.$this->Input->get('act').'"', 'Catalog checkPermission', 5); $this->redirect($urlError); } if (!in_array($id, $root)) { $this->log('Not enough permissions to access catalog type ID "'.$id.'"', 'Catalog checkPermission', 5); $this->redirect($urlError); } break; } }
Riguardo il primo punto invece devo ancora indagare, mi serve sapere dove viene fatta la query di ricerca, quindi probabilmente cambiare operatore... magari è un "Like" e io voglio una corrispondenza esatta.
Marco Damian
www.zod.it
www.zod.it
23/04/2015 10:53
zod:
Riguardo il primo punto invece devo ancora indagare, mi serve sapere dove viene fatta la query di ricerca, quindi probabilmente cambiare operatore... magari è un "Like" e io voglio una corrispondenza esatta.
Si, però comunque ricercherà tra i valori che sono gli id.
Paolo B.
paolob@contaocms.it
paolob@contaocms.it
23/04/2015 13:29
si, ma deve restituire solo le categorie giuste, se cerco i prodotti della categoria "13", deve darmi solo quelli e non anche i prodotti "1" e "3". Adesso sono su un altro lavoro, questo l'ho sospeso per ora

Marco Damian
www.zod.it
www.zod.it
29/05/2015 17:04
