--- /dev/null
+# -*- coding: utf-8 -*-
+############################################################
+# Copyright © 2008 Benoît PIN <benoit.pin@ensmp.fr> #
+# Plinn - http://plinn.org #
+# #
+# This program is free software; you can redistribute it #
+# and/or modify it under the terms of the Creative Commons #
+# "Attribution-Noncommercial 2.0 Generic" #
+# http://creativecommons.org/licenses/by-nc/2.0/ #
+############################################################
+"""
+Global utilities
+
+
+
+"""
+
+from AccessControl import ModuleSecurityInfo
+from zope.i18n import translate as i18ntranslate
+from zope.i18nmessageid import MessageFactory
+from zope.globalrequest import getRequest
+from Products.CMFCore.utils import getUtilityByInterfaceName
+from Products.Plinn.utils import _sudo
+import transaction
+
+
+security = ModuleSecurityInfo('Products.photoprint.utils')
+
+security.declarePublic('translate')
+def translate(msgid, mapping=None, default=None) :
+ """ traduction dans le domaine photoprint """
+ return i18ntranslate(msgid, domain='photoprint', mapping=mapping, context=getRequest(), default=default)
+
+security.declarePublic('Message')
+Message = _ = MessageFactory('photoprint')
+
+security.declarePublic('grantAccess')
+def grantAccess(collectionId, password, confirm, memberId) :
+ utool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IURLTool')
+ mtool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IMembershipTool')
+ portal = utool.getPortalObject()
+
+ data = portal.private_collections.data
+ lines = filter(None, [l.strip() for l in data.split('\n')])
+ assert len(lines) % 3 == 0
+ collecInfos = {}
+ for i in xrange(0, len(lines), 3) :
+ collecInfos[lines[i]] = {'pw' : lines[i+1],
+ 'path' : lines[i+2]}
+
+ if not collecInfos.has_key(collectionId) :
+ transaction.abort()
+ return _('Wrong private collection identifier.')
+ elif password != confirm :
+ transaction.abort()
+ return _("Collection's password does not match confirmation.")
+ else :
+ if collecInfos[collectionId]['pw'] != password :
+ transaction.abort()
+ return _("Wrong collection's password.")
+ else :
+ collec = portal.unrestrictedTraverse(collecInfos[collectionId]['path'])
+ def do() :
+ mtool.setLocalRoles(collec, [memberId], 'Reader')
+
+ _sudo(do)