From 7204ea052d276b487505d60de54e0b2e873b9eb8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com>
Date: Fri, 7 May 2010 11:49:41 +0000
Subject: [PATCH] API to create a preference for any user

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@35105 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5Form/PreferenceTool.py | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/product/ERP5Form/PreferenceTool.py b/product/ERP5Form/PreferenceTool.py
index a25e26fd90..8292ccf13b 100644
--- a/product/ERP5Form/PreferenceTool.py
+++ b/product/ERP5Form/PreferenceTool.py
@@ -27,7 +27,9 @@
 #
 ##############################################################################
 
-from AccessControl import ClassSecurityInfo, getSecurityManager
+from AccessControl import ClassSecurityInfo
+from AccessControl.SecurityManagement import getSecurityManager,\
+                          setSecurityManager, newSecurityManager
 from MethodObject import Method
 from Products.ERP5Type.Globals import InitializeClass, DTMLFile
 from zLOG import LOG, PROBLEM
@@ -274,5 +276,21 @@ class PreferenceTool(BaseTool):
           template_list.append(template)
     return template_list
 
+  security.declareProtected(Permissions.ManagePortal,
+                            'createPreferenceForUser')
+  def createPreferenceForUser(self, username):
+    """Creates a preference for a given user.
+    """
+    security_manager = getSecurityManager()
+    try:
+      user_folder = self.getPortalObject().acl_users
+      user = user_folder.getUserById(username)
+      if user is None:
+        raise TypeError("User %r not found" % (username, ))
+      newSecurityManager(None, user.__of__(user_folder))
+      return self.newContent(portal_type='Preference')
+    finally:
+      setSecurityManager(security_manager)
+
 InitializeClass(PreferenceTool)
 
-- 
2.30.9