def modifiedDexterity(obj, event): """ a dexterity based object was modified """ pu = getToolByName(obj, 'portal_url', None) if pu is None: # `getObjectFromLinks` is not possible without access # to `portal_url` return rc = getToolByName(obj, 'reference_catalog', None) if rc is None: # `updateReferences` is not possible without access # to `reference_catalog` return fti = getUtility(IDexterityFTI, name=obj.portal_type) fields = [] schema = fti.lookupSchema() additional_schema = getAdditionalSchemata(context=obj, portal_type=obj.portal_type) schemas = [i for i in additional_schema] + [schema] refs = set() for schema in schemas: for name,field in getFieldsInOrder(schema): if isinstance(field, RichText): # Only check for "RichText" ? value = getattr(schema(obj), name) if not value: continue links = extractLinks(value.raw) refs |= getObjectsFromLinks(obj, links) updateReferences(IReferenceable(obj), referencedRelationship, refs)
def modifiedCoverTile(obj, event): """Ensure link integrity on Rich Text tiles. Keyword arguments: obj -- Dexterity-based object that was modified event -- event fired """ pu = api.portal.get_tool('portal_url') if pu is None: # `getObjectFromLinks` is not possible without access # to `portal_url` return rc = api.portal.get_tool('reference_catalog') if rc is None: # `updateReferences` is not possible without access # to `reference_catalog` return referenceable_parent = IReferenceable(obj.context, None) if referenceable_parent is None: # `updateReferences` is not possible # if parent object isn't referenceable return refs = set() for name, value in obj.data.items(): if isinstance(value, RichTextValue): value = value.raw if not value: continue links = extractLinks(value) refs |= getObjectsFromLinks(obj.context, links) updateReferences(IReferenceable(obj.context), referencedRelationship, refs)
def modifiedArchetype(obj, event): """ an archetype based object was modified """ pu = getToolByName(obj, 'portal_url', None) if pu is None: # `getObjectFromLinks` is not possible without access # to `portal_url` return rc = getToolByName(obj, 'reference_catalog', None) if rc is None: # `updateReferences` is not possible without access # to `reference_catalog` return refs = set() for field in obj.Schema().fields(): if isinstance(field, TextField): accessor = field.getAccessor(obj) encoding = field.getRaw(obj, raw=1).original_encoding if accessor is not None: value = accessor() else: # Fields that have been added via schema extension do # not have an accessor method. value = field.get(obj) links = extractLinks(value, encoding) refs |= getObjectsFromLinks(obj, links) updateReferences(obj, referencedRelationship, refs)
def modifiedDexterity(obj, event): """ a dexterity based object was modified """ pu = getToolByName(obj, 'portal_url', None) if pu is None: # `getObjectFromLinks` is not possible without access # to `portal_url` return rc = getToolByName(obj, 'reference_catalog', None) if rc is None: # `updateReferences` is not possible without access # to `reference_catalog` return fti = getUtility(IDexterityFTI, name=obj.portal_type) schema = fti.lookupSchema() additional_schema = getAdditionalSchemata(context=obj, portal_type=obj.portal_type) schemas = [i for i in additional_schema] + [schema] refs = set() for schema in schemas: for name, field in getFieldsInOrder(schema): if isinstance(field, RichText): # Only check for "RichText" ? value = getattr(schema(obj), name) if not value: continue links = extractLinks(value.raw) refs |= getObjectsFromLinks(obj, links) updateReferences(IReferenceable(obj), referencedRelationship, refs)
def modifiedArchetype(obj, event): """ an archetype based object was modified """ refs = set() for field in obj.Schema().fields(): if isinstance(field, TextField): accessor = field.getAccessor(obj) links = extractLinks(accessor()) refs |= getObjectsFromLinks(obj, links) updateReferences(obj, referencedRelationship, refs)
def modifiedArchetype(obj, event): """ an archetype based object was modified """ rc = getToolByName(obj, 'reference_catalog', None) if rc is None: # `updateReferences` is not possible without access # to `reference_catalog` return refs = set() for field in obj.Schema().fields(): if IReferenceableVocabulary.providedBy(field.vocabulary): accessor = field.getAccessor(obj) value = accessor() refs |= field.vocabulary.getObjectsSet(obj, value) updateReferences(obj, vocabularyRelationship, refs)
def modifiedArchetype(obj, event): """ an archetype based object was modified """ pu = getToolByName(obj, 'portal_url', None) if pu is None: # `getObjectFromLinks` is not possible without access # to `portal_url` return rc = getToolByName(obj, 'reference_catalog', None) if rc is None: # `updateReferences` is not possible without access # to `reference_catalog` return refs = set() for field in obj.Schema().fields(): if isinstance(field, TextField): accessor = field.getAccessor(obj) links = extractLinks(accessor()) refs |= getObjectsFromLinks(obj, links) updateReferences(obj, referencedRelationship, refs)