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 cours

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

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

# ce script crée pour chaque cours existant dans l'annuaire LDAP un dossier;
# il paramètre le partage pour que tous les profs qui enseignent dans ce cours cette année soient copropriétaires de ce dossier et de ses contenus par héritage
# il paramètre le partage pour que tous les élèves de ce cours soient lecteurs de ce dossier et de ses contenus par héritage
# le paramètre path contient le chemin où on veut créer tous ces dossiers (en principe qqch du genre /espacepedagogique/cours
# on peut avoir préparé un dossier qqpart qui contient un agenda standard avec vue solgema : ce sera un agenda partagé par ce seul cours pour les événements du cours
# cette gestion de ces agendas avec les bons partages déjà là permet d'avoir une vue consolidée par élève et par prof avec uniquement les événements qui les concernent

if not path:
    path = '/'.join(context.getPhysicalPath())

## Script (Python) "gen_subfolders.py"
##bind container=container
##bind context=context
##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
#   quoi : 'COURS' or 'CLASSES' => a name that discriminates the obj_list in the groups
#   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()

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)

    # Get a reference to the newly created portal_type object.
    obj = getattr(parent,newid)
    obj.manage_setLocalRoles(item, ['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 group:
        members = group.getGroupMembers()
        #print members
        for member in members:
            if member.hasProperty('memberOf'):
                gr_info = str(member.getProperty('memberOf'))
                #print gr_info
                if 'ENSEIGNANTS' in gr_info:
                    obj.manage_setLocalRoles(member.id, ['Contributor', 'Editor', 'Moderator', 'Reader'])
                    print 'Partage pour %s' % member.id
            else:
                print "No memberOf for %s" % member.id
    else:
        print "no group '%s' found!" % 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.