[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