[Plone-IT] visualizzare e poi modificare il proprietario di un oggetto (da script)

Giacomo Zanobini g.zanobini a arpat.toscana.it
Mer 24 Mar 2010 09:52:14 UTC


Il 23/03/2010 16.10, Yuri ha scritto:
> Se a te interessa solo cambiare la scritta e non il reale possessore, 
> puoi fare un .setCreator(value='pippo') sull'oggetto. Il proprietario 
> "Zope" rimane sempre lo stesso.
> Quindi se sei sicuro che Creator corrisponde al proprietario zope, 
> usalo, altrimenti usa la chiamata per determinare il possessore, la 
> trovi sempre nel template ownership_form.
no no, volevo proprio cambiare il proprietario a livello di zope. Alla 
fine ho fatto lo script che mi serviva, e sembra funzionare. E' lento, 
perché faccio getObject() senza ritegno su tutti gli oggetti del datafs, 
comunque deve essere eseguito una sola volta.

Grazie per gli aiuti preziosi e sperando che possa prima o poi tornare 
utile anche ad altri (anche fosse solo a titolo di esempio fatto male), 
ecco qui il codice:

-------------------------------------------------------------------------------------------------------------------

# Questo script definisce un dizionario di utenti (dictusers) e 
successivamente per ogni elemento restituito da portal_catalog, aggiorna 
il proprietario (sulla base del dizionario).
# Questo script può essere utilizzato nel caso che un membro del portale 
debba essere rimosso, e la proprietà di tutti i suoi oggetti passata ad 
un altro membro, oppure per esempio quando una persona deve cambiare 
userid e portarsi dietro i propri documenti.
# Autore Giacomo Zanobini - g[dot]zanobini[at]arpat[dot]toscana[dot]it
# This program is free software; you can redistribuite it and/or modify 
it under the terms of the GNU/General Pubblic License as published the 
Free software Foundation; either version 3 of the License, or (at your 
opinion) any later version

# NOTA - la parte che modifica effettivamente il proprietario 
dell'oggetto è commentata e va decommentata


from Products.PythonScripts.standard import html_quote
from Products.CMFPlone import PloneMessageFactory as _
request = container.REQUEST
RESPONSE =  request.RESPONSE

#definisco il dizionario delle sostituzioni da effettuare
dictusers = {"utente1":"nuovoid-utente1",
              "utente2":"nuovoid-utente2",
              "default":"admin",}

# Return a string identifying this script.
print "Questo è lo ", script.meta_type, '"%s"' % script.getId(),
print " eseguito dal percorso ", container.absolute_url()
print


#chiedo al portal_catalog l'elenco degli oggetti catalogati
brains = context.portal_catalog( path='/', sort_on='effective', 
sort_order='reverse')

if brains:
     print "tipo,autore,proprietario,url"
else:
     print "nessun oggetto è stato restituito dal catalogo"

for brain in brains:
     oggetto = brain.getObject()
     owner = context.plone_utils.getOwnerName(oggetto)
     print "%s,%s,%s,%s" % (oggetto.portal_type , oggetto.Creator() , 
owner , oggetto.absolute_url() ),

     if (owner == None):
         newuserid = dictusers["default"]
         print ",NON HA PROPRIETARIO e quindi viene assegnato a %s" % 
(newuserid),
         #***decommentare questa riga se si vuole riassegnare gli 
oggetti senza proprietario***  
context.plone_utils.changeOwnershipOf(oggetto, newuserid, recursive=0)

     if dictusers.has_key(owner):
         olduserid = owner
         newuserid = dictusers[olduserid]
         print ",il nuovo proprietario è %s" % (newuserid),

         # aggiorno il proprietario
         #***decommentare questa riga***  
context.plone_utils.changeOwnershipOf(oggetto, newuserid, recursive=0)

         # volendo si potrebbe aggiornare anche Creator (andrebbero 
aggiornati tutti gli elementi della lista con setCreators())

     print

print "script terminato senza errori"
return printed




Maggiori informazioni sulla lista Plone-IT