Ejemplo n.º 1
0
    def _notifyOfCopyTo(self, container, op=0):
        """In the case of a move (op=1) we need to make sure
        references are mainained for all referencable objects within
        the one being moved.

        manage_renameObject calls _notifyOfCopyTo so that the
        object being renamed doesn't lose its references. But
        manage_renameObject calls _delObject which calls
        manage_beforeDelete on all the children of the object
        being renamed which deletes all references for children
        of the object being renamed. Here is a patch that does
        recursive calls for _notifyOfCopyTo to address that
        problem.
        """
        # XXX this doesn't appear to be necessary anymore, if it is
        # it needs to be used in BaseBTreeFolder as well, it currently
        # is not.
        BaseObject._notifyOfCopyTo(self, container, op=op)
        # keep reference info internally when op == 1 (move)
        # because in those cases we need to keep refs
        if op==1:
            self._v_cp_refs = 1
        for child in self.contentValues():
            if IReferenceable.providedBy(child):
                child._notifyOfCopyTo(self, op)
Ejemplo n.º 2
0
    def _notifyOfCopyTo(self, container, op=0):
        """In the case of a move (op=1) we need to make sure
        references are mainained for all referencable objects within
        the one being moved.

        manage_renameObject calls _notifyOfCopyTo so that the
        object being renamed doesn't lose its references. But
        manage_renameObject calls _delObject which calls
        manage_beforeDelete on all the children of the object
        being renamed which deletes all references for children
        of the object being renamed. Here is a patch that does
        recursive calls for _notifyOfCopyTo to address that
        problem.
        """
        # XXX this doesn't appear to be necessary anymore, if it is
        # it needs to be used in BaseBTreeFolder as well, it currently
        # is not.
        BaseObject._notifyOfCopyTo(self, container, op=op)
        # keep reference info internally when op == 1 (move)
        # because in those cases we need to keep refs
        if op == 1:
            self._v_cp_refs = 1
        for child in self.contentValues():
            if IReferenceable.providedBy(child):
                child._notifyOfCopyTo(self, op)
Ejemplo n.º 3
0
 def _notifyOfCopyTo(self, container, op=0):
     # OFS.CopySupport notify
     BaseObject._notifyOfCopyTo(self, container, op=op)
     # keep reference info internally when op == 1 (move)
     # because in those cases we need to keep refs
     if op == 1:
         self._v_cp_refs = 1
def __bobo_traverse__(self, REQUEST, name):
    """Transparent access to multilanguage image scales for
       content types holding an multilanguage ImageField named
       'image'

       NO BLOBS
    """
    if name.startswith('image_') or name == 'image':
        field = self.getField('image')
        if not IMultilanguageField.providedBy(field):
            return BaseObject.__bobo_traverse__(self, REQUEST, name)
        last = REQUEST.get('ACTUAL_URL', '').endswith(name)
        fieldname, scale = name, None
        if '___' in name:
            fieldname, lang, scalename = name.split('___')
            if scalename:
                scale = scalename[1:]
        else:
            if '_' in name:
                fieldname, scale = name.split('_', 1)
            if last and REQUEST.get('HTTP_USER_AGENT', False):
                _scale = scale
                if _scale is not None:
                    _scale = '_'+str(_scale)
                else:
                    _scale = ''
                REQUEST.RESPONSE.redirect(self.absolute_url()+'/'+fieldname+'___'+field._getCurrentLanguage(self)+'___'+_scale)
            lang = field._getCurrentLanguage(self)
        lang_before = field._v_lang
        try:
            field.setLanguage(lang)
            image = None
            if scale:
                if scale in field.getAvailableSizes(self):
                    image = field.getScale(self, scale=scale)
            else:
                image = field.getScale(self)
            if not image: # language fallback
                defaultLang = field.getDefaultLang(self)
                if defaultLang and not defaultLang == lang:
                    field.setLanguage(defaultLang)
                    if scale:
                        if scale in field.getAvailableSizes(self):
                            image = field.getScale(self, scale=scale)
                    else:
                        image = field.getScale(self)
                if image is not None:
                    if last and REQUEST.get('HTTP_USER_AGENT', False):
                        _scale = scale
                        if _scale is not None:
                            _scale = '_'+str(_scale)
                        else:
                            _scale = ''
                        REQUEST.RESPONSE.redirect(self.absolute_url()+'/'+fieldname+'___'+defaultLang+'___'+_scale)
        finally:
            field.setLanguage(lang_before)
        if image is not None and not isinstance(image, basestring):
            # image might be None or '' for empty images
            return image
    return BaseObject.__bobo_traverse__(self, REQUEST, name)
Ejemplo n.º 5
0
 def _notifyOfCopyTo(self, container, op=0):
     # OFS.CopySupport notify
     BaseObject._notifyOfCopyTo(self, container, op=op)
     # keep reference info internally when op == 1 (move)
     # because in those cases we need to keep refs
     if op == 1:
         self._v_cp_refs = 1
def __bobo_traverse__(self, REQUEST, name):
    """ helper to access multilanguage image scales the old way during
        `unrestrictedTraverse` calls

        the method to be patched is '__bobo_traverse__'
    """
    if name.startswith('image_') or name == 'image':
        field = self.getField(name.split('_')[0])
        if not IMultilanguageField.providedBy(field) or not hasattr(REQUEST, 'get'):
            return BaseObject.__bobo_traverse__(self, REQUEST, name)
        last = REQUEST.get('ACTUAL_URL', '').endswith(name)
        fieldname, scale = name, None
        if '___' in name:
            fieldname, lang, scalename = name.split('___')
            if scalename:
                scale = scalename[1:]
        else:
            if '_' in name:
                fieldname, scale = name.split('_', 1)
            if last and REQUEST.get('HTTP_USER_AGENT', False):
                # begin own code
                if scale in field.getAvailableSizes(self):
                    # end own code
                    _scale = scale
                    if _scale is not None:
                        _scale = '_'+str(_scale)
                    else:
                        _scale = ''
                    REQUEST.RESPONSE.redirect(self.absolute_url()+'/'+fieldname+'___'+field._getCurrentLanguage(self)+'___'+_scale)
            lang = field._getCurrentLanguage(self)
        lang_before = field._v_lang
        try:
            field.setLanguage(lang)
            handler = IImageScaleHandler(field, None)
            image = None
            if handler is not None:
                try:
                    image = handler.getScale(self, scale)
                except AttributeError: # no image available, do not raise as there might be one available as a fallback
                    pass
            if not image: # language fallback
                defaultLang = field.getDefaultLang(self)
                if defaultLang and not defaultLang == lang:
                    field.setLanguage(defaultLang)
                    if handler is not None:
                        image = handler.getScale(self, scale)
                if image is not None:
                    if last and REQUEST.get('HTTP_USER_AGENT', False):
                        _scale = scale
                        if _scale is not None:
                            _scale = '_'+str(_scale)
                        else:
                            _scale = ''
                        REQUEST.RESPONSE.redirect(self.absolute_url()+'/'+fieldname+'___'+defaultLang+'___'+_scale)
        finally:
            field.setLanguage(lang_before)
        if image is not None:
            return image
    return BaseObject.__bobo_traverse__(self, REQUEST, name)
Ejemplo n.º 7
0
    def __blob__bobo_traverse__(self, REQUEST, name):
        """ helper to access multilanguage image scales the old way during
            `unrestrictedTraverse` calls

            the method to be patched is '__bobo_traverse__'
        """
        field = self.getField(name.split('_')[0])
        if not IMultilanguageField.providedBy(field) or not hasattr(REQUEST, 'get'):
            return BaseObject.__bobo_traverse__(self, REQUEST, name)
        last = REQUEST.get('ACTUAL_URL', '').endswith(name)
        fieldname, scale = name, None
        if '___' in name:
            fieldname, lang, scalename = name.split('___')
            if scalename:
                scale = scalename[1:]
        else:
            if '_' in name:
                fieldname, scale = name.split('_', 1)
            if last and REQUEST.get('HTTP_USER_AGENT', False):
                _scale = scale
                if _scale is not None:
                    _scale = '_'+str(_scale)
                else:
                    _scale = ''
                REQUEST.RESPONSE.redirect(self.absolute_url()+'/'+fieldname+'___'+field._getCurrentLanguage(self)+'___'+_scale)
            lang = field._getCurrentLanguage(self)
        lang_before = field._v_lang
        try:
            field.setLanguage(lang)
            handler = IImageScaleHandler(field, None)
            image = None
            if handler is not None:
                try:
                    image = handler.getScale(self, scale)
                except AttributeError: # no image available, do not raise as there might be one available as a fallback
                    pass
            if not image: # language fallback
                defaultLang = field.getDefaultLang(self)
                if defaultLang and not defaultLang == lang:
                    field.setLanguage(defaultLang)
                    if handler is not None:
                        image = handler.getScale(self, scale)
                if image is not None:
                    if last and REQUEST.get('HTTP_USER_AGENT', False):
                        _scale = scale
                        if _scale is not None:
                            _scale = '_'+str(_scale)
                        else:
                            _scale = ''
                        REQUEST.RESPONSE.redirect(self.absolute_url()+'/'+fieldname+'___'+defaultLang+'___'+_scale)
        finally:
            field.setLanguage(lang_before)
        if image is not None:
            return image
        return BaseObject.__bobo_traverse__(self, REQUEST, name)
Ejemplo n.º 8
0
    def __getitem__(self, key):
        """Overwrite __getitem__.

        At first it's using the BaseObject version. If the element can't be
        retrieved from the schema it's using PortalFolder as fallback which
        should be the ObjectManager's version.
        """
        try:
            return BaseObject.__getitem__(self, key)
        except KeyError:
            return PortalFolder.__getitem__(self, key)
Ejemplo n.º 9
0
    def __getitem__(self, key):
        """Overwrite __getitem__.

        At first it's using the BaseObject version. If the element can't be
        retrieved from the schema it's using PortalFolder as fallback which
        should be the ObjectManager's version.
        """
        try:
            return BaseObject.__getitem__(self, key)
        except KeyError:
            return PortalFolder.__getitem__(self, key)
Ejemplo n.º 10
0
 def manage_afterAdd(self, item, container):
     BaseObject.manage_afterAdd(self, item, container)
Ejemplo n.º 11
0
 def __init__(self, oid, **kwargs):
     # Call skinned first cause baseobject will set new defaults on
     # those attributes anyway
     PortalFolder.__init__(self, oid, self.Title())
     BaseObject.__init__(self, oid, **kwargs)
Ejemplo n.º 12
0
 def manage_afterClone(self, item):
     BaseObject.manage_afterClone(self, item)
Ejemplo n.º 13
0
 def manage_afterAdd(self, item, container):
     BaseObject.manage_afterAdd(self, item, container)
Ejemplo n.º 14
0
 def manage_beforeDelete(self, item, container):
     BaseObject.manage_beforeDelete(self, item, container)
     #and reset the rename flag (set in Referenceable._notifyCopyOfCopyTo)
     self._v_cp_refs = None
    def manage_beforeDelete(self, item, container):
        BaseObject.manage_beforeDelete(self, item, container)
        CatalogMultiplex.manage_beforeDelete(self, item, container)

        #and reset the rename flag (set in Referenceable._notifyCopyOfCopyTo)
        self._v_cp_refs = None
 def manage_afterAdd(self, item, container):
     BaseObject.manage_afterAdd(self, item, container)
     CatalogMultiplex.manage_afterAdd(self, item, container)
Ejemplo n.º 17
0
 def __init__(self, oid, **kwargs):
     # Call skinned first cause baseobject will set new defaults on
     # those attributes anyway
     PortalFolder.__init__(self, oid, self.Title())
     BaseObject.__init__(self, oid, **kwargs)
Ejemplo n.º 18
0
 def __bobo_traverse__(self, request, name):
     # TODO: replace with IPublishTraverse or/and ITraverse
     if hasattr(self, 'documents'):
         if self.documents.has_key(name):
             return aq_inner(getattr(self.documents, name)).__of__(self)
     return BaseObject.__bobo_traverse__(self, request, name)
 def manage_afterClone(self, item):
     BaseObject.manage_afterClone(self, item)
     CatalogMultiplex.manage_afterClone(self, item)
Ejemplo n.º 20
0
 def manage_afterClone(self, item):
     BaseObject.manage_afterClone(self, item)
 def _notifyOfCopyTo(self, container, op=0):
     """OFS.CopySupport notify
     """
     BaseObject._notifyOfCopyTo(self, container, op=op)
     PortalContent._notifyOfCopyTo(self, container, op=op)
Ejemplo n.º 22
0
 def __bobo_traverse__(self, request, name):
     # TODO: replace with IPublishTraverse or/and ITraverse
     if hasattr(self, 'documents'):
         if self.documents.has_key(name):
             return aq_inner(getattr(self.documents, name)).__of__(self)
     return BaseObject.__bobo_traverse__(self, request, name)