[ Index ]
 

Code source de Kupu-1.3.5

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/plone/ -> ReftextField.py (source)

   1  from AccessControl import ClassSecurityInfo
   2  from Products.CMFCore.utils import getToolByName
   3  from Products.Archetypes.public import *
   4  from Products.Archetypes.config import REFERENCE_CATALOG
   5  from Products.Archetypes.Field import TextField
   6  from Products.Archetypes.ReferenceEngine import Reference
   7  from ZPublisher.HTTPRequest import FileUpload
   8  import re
   9  
  10  # UID_PATTERN matches a UID in an anchor or image tag.
  11  UID_PATTERN = re.compile(r'''<(?:a\b[^>]+href|img\b[^>]+src)="resolveuid/(?P<uid>[^">/]+)''', re.I)
  12  
  13  class ReftextField(TextField):
  14      __implements__ = TextField.__implements__
  15  
  16      _properties = TextField._properties.copy()
  17      _properties.update({
  18          'widget': RichWidget,
  19          'default_content_type' : 'text/html',
  20          'default_output_type'  : 'text/x-html-captioned',
  21          'allowable_content_types' : ('text/html',),
  22          'relationship' : None, # defaults to field name
  23          'referenceClass' : Reference,
  24          })
  25  
  26      security = ClassSecurityInfo()
  27  
  28      security.declarePrivate('set')
  29      def set(self, instance, value, **kwargs):
  30          """ Assign input value to object. If mimetype is not specified,
  31          pass to processing method without one and add mimetype
  32          returned to kwargs. Assign kwargs to instance.
  33          """
  34          if value is None:
  35              # nothing to do
  36              return
  37  
  38          TextField.set(self, instance, value, **kwargs)
  39  
  40          if not isinstance(value, basestring):
  41              value.seek(0);
  42              value = value.read()
  43  
  44          uids = UID_PATTERN.findall(value) # XXX: build list of uids from the value here
  45          uids = dict.fromkeys(uids).keys() # Remove duplicate uids.
  46  
  47          tool = getToolByName(instance, REFERENCE_CATALOG)
  48  
  49          relationship = self.relationship
  50          if relationship is None:
  51              relationship = self.__name__
  52  
  53          targetUIDs = [ref.targetUID for ref in
  54                        tool.getReferences(instance, relationship)]
  55  
  56          add = [v for v in uids if v and v not in targetUIDs]
  57          sub = [t for t in targetUIDs if t not in uids]
  58  
  59          # tweak keyword arguments for addReference
  60          addRef_kw = kwargs.copy()
  61          addRef_kw.setdefault('referenceClass', self.referenceClass)
  62          if addRef_kw.has_key('schema'): del addRef_kw['schema']
  63  
  64          for uid in add:
  65              __traceback_info__ = (instance, uid, value, targetUIDs)
  66              try:
  67                  # throws ReferenceError if uid is invalid
  68                  tool.addReference(instance, uid, relationship, **addRef_kw)
  69              except ReferenceError:
  70                  pass
  71          for uid in sub:
  72              tool.deleteReference(instance, uid, relationship)
  73  
  74  #         print "Result was:",[ref.targetUID for ref in
  75  #                       tool.getReferences(instance, relationship)]
  76  #         print "Objects:",[ref.getTargetObject() for ref in
  77  #                       tool.getReferences(instance, relationship)]


Généré le : Sun Feb 25 15:30:41 2007 par Balluche grâce à PHPXref 0.7