Script python pour générer un dossier par discipline
if not path:
path = '/'.join(context.getPhysicalPath())
## Script (Python) "gen_subfolders.py"
##bind container=container
##bind context=context
# ce script crée pour chaque discipline existant dans l'annuaire LDAP un dossier;
# il paramètre le partage pour que tous les profs qui enseignent cette discipline cette année soient copropriétaires de ce dossier et de ses contenus par héritage
# attention : un prof qui n'enseigne pas une discipline une année perd ses droits -> à ajouter si nécessaire dans le plone...
# le paramètre path contient le chemin où on veut créer tous ces dossiers (en principe qqch du genre /espacepedagogique/disciplines
# on peut avoir préparé un dossier qqpart qui contient un dossier de gestion du groupe avec ss-dossiers génériques (pv, coordonnées, décisions, ...);
# ce dossier sera créé dans chaque discipline (le paramètre s'appelle encore agenda comme dans le script de création des cours ...
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=path='', obj_list = [], agenda = ''
##title=Subject Area
##
# First, create an instance of the portal_type most like the
# one we want, to allow the instance to be persisted in the ZODB.
# parameters :
# path : where to generate the new folders
# agenda : gives a path to a folder to copy and paste in each new folder as subfolder (i.e. event folder + collection)
# if empty nothing is copied
#from plone.i18n.normalizer import idnormalizer
from Products.CMFCore.utils import getToolByName
urltool = getToolByName(context, 'portal_url')
portal = urltool.getPortalObject()
u = context.plone_utils
acl = portal.restrictedTraverse('acl_users/ldap-plugin/acl_users')
group_list = acl.getGroups()
quoi = 'DISCIPLINES'
obj_list = []
for group in group_list:
if quoi in group[1]:
obj_list.append(group[0])
parent = portal.restrictedTraverse(path)
copy_subfolder = None
pg = container.portal_groups
if agenda:
try:
subfolder_parent = portal.restrictedTraverse('/'.join(agenda.split('/')[:-1]))
copy_subfolder = subfolder_parent.manage_copyObjects(agenda.split('/')[-1])
except:
print "Agenda copy failed"
obj_list.sort()
for item in obj_list:
#newid = idnormalizer.normalize(item)
newid = u.normalizeString(item)
parent.invokeFactory(id=newid, type_name='Folder', title=item)
print 'Creation of id = %s, title = %s' % (newid, item)
# Get a reference to the newly created portal_type object.
obj = getattr(parent,newid)
obj.manage_setLocalRoles(item, ['Contributor', 'Reviewer','Editor','Reader']) # group as same id as folder
#sharing for teacher is yet to be done, so let's do it:
group = pg.getGroupById(item)
if copy_subfolder:
obj.manage_pasteObjects(copy_subfolder)
# obj.invokeFactory(id='newsitem_1', type_name='News Item')
# obj.invokeFactory(id='document_1', type_name='Document')
# obj.invokeFactory(id='image_1', type_name='Image')
# We have just populated it with 3 content objects!
# We can nest a few folders; of course nesting Populated Folder
# would do bad things
# Create folder1 inside of our Populated Folder instance
# obj.invokeFactory(id='folder1', type_name='Folder')
# Get a reference to the newly created folder ...
# folder1 = getattr(obj, 'folder1')
# ... and create a subfolder inside.
# folder1.invokeFactory(id='subfolder1', type_name='Folder')
return printed
# It is very important to hand back the object so that
# the CMF machinery can imprint some type information onto
# the instance. Up to this point, obj is just a Folder. But
# when you return it the machinery will make it a Populated
# Folder.