[ Index ] |
|
Code source de Kupu-1.3.5 |
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)]
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sun Feb 25 15:30:41 2007 | par Balluche grâce à PHPXref 0.7 |