Aller au contenu. | Aller à la navigation

Outils personnels

Navigation
Vous êtes ici : Accueil / Aide pour les responsables / Homepage pour les connectés / Script python pour générer un dossier par discipline

Script python pour générer un dossier par discipline

Ajouter dans parameter list : path = '', agenda = ''

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.