EduploneExamPersistence ExamPersistentFolder.py,1.3,1.4

Nils Haagen <[email protected]> Sun, 15 May 2005 12:43:50 +0000
Newsgroups gmane.comp.web.zope.eduplone.cvs
Message-ID <[email protected]>
Update of /cvsroot/eduplone/EduploneExamPersistence
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7993

Modified Files:
	ExamPersistentFolder.py 
Log Message:
stores PersistentResponse as content-object in the Memberfolder. this is just temporarily - and should move to memberobject...

Index: ExamPersistentFolder.py
===================================================================
RCS file: /cvsroot/eduplone/EduploneExamPersistence/ExamPersistentFolder.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** ExamPersistentFolder.py	25 Feb 2005 19:43:01 -0000	1.3
--- ExamPersistentFolder.py	15 May 2005 12:43:48 -0000	1.4
***************
*** 33,41 ****
  
  ##code-section module-header #fill in your manual code here
  
  from Products.EduploneExamPersistence import Permissions as eXamPermissions
- from Products.EduploneExam.ExamFolder import ExamFolder
  from Products.EduploneExamPersistence.userresponses.PersistentResponse import PersistentResponse
  
  ##/code-section module-header
  
--- 33,43 ----
  
  ##code-section module-header #fill in your manual code here
+ from Products.CMFCore.utils import getToolByName
  
  from Products.EduploneExamPersistence import Permissions as eXamPermissions
  from Products.EduploneExamPersistence.userresponses.PersistentResponse import PersistentResponse
  
+ from Products.EduploneExam.ExamFolder import ExamFolder
+ from Products.EduploneExam.registry import getQuestionTypes
  ##/code-section module-header
  
***************
*** 45,50 ****
      portal_type = meta_type = 'ExamPersistentFolder' 
      archetype_name = 'ExamPersistentFolder'   #this name appears in the 'add' box 
!     allowed_content_types = [] 
! 
      __implements__ = getattr(ExamFolder,'__implements__',())
  
--- 47,51 ----
      portal_type = meta_type = 'ExamPersistentFolder' 
      archetype_name = 'ExamPersistentFolder'   #this name appears in the 'add' box 
!     
      __implements__ = getattr(ExamFolder,'__implements__',())
  
***************
*** 55,83 ****
      schema=ExamFolder.schema
  
!     #Methods
  
  
-     #methods from Interface IExamContext
  
      def deliverResponse(self, question, create=False):
          '''
          <p>Returns an object that implements IExamResponse. </p>
          '''
!         #import pdb
          #pdb.set_trace()
          
          u=getSecurityManager().getUser().getId()
          if u is None: 
!             u="anonymous"
          
          q=question.UID()
          
!         if not self._examResponses.has_key(u):
!             self._examResponses[u]={}
              
!         if not self._examResponses[u].has_key(q):
!             self._examResponses[u][q]=PersistentResponse()
          
-         return self._examResponses[u][q]
          
      #manual methods
--- 56,131 ----
      schema=ExamFolder.schema
  
!     #Methods  
!     
!     #def initializeArchetype(self, **kwargs):
!     #    """ """
!     #     _examResponses={}
  
+     security.declarePublic('allowedContentTypes')
+     def allowedContentTypes(self):
+         """ use own registry to recognize allowed tpyes """
+         tt = getToolByName(self,'portal_types')
+         qtypes = getQuestionTypes()
+         allowed = [tt[tn] for tn in \
+                     [qtypes[key].meta_type \
+                      for key in qtypes]\
+                   ]
+         return allowed
  
  
+     security.declarePublic('invokeFactory')
+     def invokeFactory( self, type_name, id, RESPONSE=None, *args, **kw):
+         """ Invokes the portal_types tool """
+         try:
+             return OrderedBaseFolder.invokeFactory(self, type_name, id, RESPONSE=None, *args, **kw)
+         except:
+             self._updateRegisteredTypes()
+             return OrderedBaseFolder.invokeFactory(self, type_name, id, RESPONSE=None, *args, **kw)
+ 
+     #manually created methods
+     def _updateRegisteredTypes(self):
+         """ updates own fti based on registered containers """
+         tt = getToolByName(self,'portal_types')
+         ti = tt[self.meta_type]
+         qtypes = getQuestionTypes()
+         allowedmetatypes = [qtypes[key].meta_type for key in qtypes]
+         ti.allowed_content_types=tuple(allowedmetatypes)
+ 
+     #methods from Interface IExamContext
+     security.declarePublic('deliverResponse')
      def deliverResponse(self, question, create=False):
          '''
          <p>Returns an object that implements IExamResponse. </p>
          '''
!         import pdb
          #pdb.set_trace()
          
          u=getSecurityManager().getUser().getId()
          if u is None: 
!             raise Unauthorized, 'SecurityManager could not get your username. Are you logged in?'
          
          q=question.UID()
          
!         
!         
!         #this should move to some other product,
!         #or better, an eduploneMemberObject
!         #
!         mfolder=getToolByName(self, 'portal_membership').getHomeFolder(u)
!         if not 'eduploneExams' in mfolder.objectIds():
!             mfolder.invokeFactory('Folder', 'eduploneExams')
!             mfolder.eduploneExams.setTitle('eduplone Exam Answers')
!         
!         if self.UID() not in mfolder.eduploneExams.objectIds():
!             mfolder.eduploneExams.invokeFactory('Folder', self.UID())
!             mfolder.eduploneExams[self.UID()].setTitle('Answers for %s' % self.Title())
!         
!         examRFolder=mfolder.eduploneExams[self.UID()]
              
!         if question.UID() not in examRFolder.objectIds():
!             examRFolder.invokeFactory('PersistentResponse', question.UID())
!             
!         return examRFolder[question.UID()]
          
          
      #manual methods
***************
*** 86,90 ****
          '''returns a list of userIds for this eXam
          '''
!         return self._userResponses.keys()
      
      security.declareProtected(eXamPermissions.manageExam, 'getUserResponses')
--- 134,138 ----
          '''returns a list of userIds for this eXam
          '''
!         return self._examResponses.keys()
      
      security.declareProtected(eXamPermissions.manageExam, 'getUserResponses')
***************
*** 93,106 ****
          '''
          if userId:
!             if self._userResponses.has_key(userId):
!                 return self._userResponses[userId]
              else: 
                  return None
          else:
!             return self._userResponses
  
      # uncomment lines below when you need
      factory_type_information={
!         'allowed_content_types':allowed_content_types,
          'allow_discussion': 0,
          #'content_icon':'ExamPersistentFolder.gif',
--- 141,154 ----
          '''
          if userId:
!             if self._examResponses.has_key(userId):
!                 return self._examResponses[userId]
              else: 
                  return None
          else:
!             return self._examResponses
  
      # uncomment lines below when you need
      factory_type_information={
!         'allowed_content_types':[],
          'allow_discussion': 0,
          #'content_icon':'ExamPersistentFolder.gif',



-------------------------------------------------------
This SF.Net email is sponsored by Oracle Space Sweepstakes
Want to be the first software developer in space?
Enter now for the Oracle Space Sweepstakes!
http://ads.osdn.com/?ad_id=7393&alloc_id=16281&op=click