def copy_action(item, container):
    copier = IObjectCopier(item)
    try:
        copier.copyTo(container)
        return True
    except (KeyError, DuplicateIDError, InvalidItemType):
        return False
Beispiel #2
0
 def test_copyfolderfromroot2(self):
     root = self.rootFolder
     target = traverse(root, '/folder2/folder2_1/folder2_1_1')
     source = traverse(root, '/folder1')
     copier = IObjectCopier(source)
     copier.copyTo(target)
     self.failUnless('folder1' in target)
 def test_copyfolderfromroot(self):
     root = self.rootFolder
     target = traverse(root, '/folder2')
     source = traverse(root, '/folder1')
     copier = IObjectCopier(source)
     copier.copyTo(target)
     self.assertTrue('folder1' in target)
Beispiel #4
0
 def test_copyfolderfromroot2(self):
     root = self.rootFolder
     target = traverse(root, '/folder2/folder2_1/folder2_1_1')
     source = traverse(root, '/folder1')
     copier = IObjectCopier(source)
     copier.copyTo(target)
     self.failUnless('folder1' in target)
 def test_copytosame(self):
     root = self.rootFolder
     container = traverse(root, 'folder1')
     container['file1'] = File()
     file = traverse(root, 'folder1/file1')
     copier = IObjectCopier(file)
     copier.copyTo(container, 'file1')
     self.assertTrue('file1' in container)
     self.assertTrue('file1-2' in container)
Beispiel #6
0
 def test_copytosamewithnewname(self):
     root = self.rootFolder
     container = traverse(root, 'folder1')
     container['file1'] = File()
     file = traverse(root, 'folder1/file1')
     copier = IObjectCopier(file)
     copier.copyTo(container, 'file2')
     self.failUnless('file1' in container)
     self.failUnless('file2' in container)
Beispiel #7
0
 def test_copytosamewithnewname(self):
     root = self.rootFolder
     container = traverse(root, 'folder1')
     container['file1'] = File()
     file = traverse(root, 'folder1/file1')
     copier = IObjectCopier(file)
     copier.copyTo(container, 'file2')
     self.failUnless('file1' in container)
     self.failUnless('file2' in container)
 def test_copytootherwithnewname(self):
     root = self.rootFolder
     container = traverse(root, 'folder1')
     container['file1'] = File()
     target = traverse(root, 'folder2')
     file = traverse(root, 'folder1/file1')
     copier = IObjectCopier(file)
     copier.copyTo(target, 'file2')
     self.assertTrue('file1' in container)
     self.assertTrue('file2' in target)
Beispiel #9
0
 def test_copytoother(self):
     root = self.rootFolder
     container = traverse(root, 'folder1')
     container['file1'] = File()
     target = traverse(root, 'folder2')
     file = traverse(root, 'folder1/file1')
     copier = IObjectCopier(file)
     copier.copyTo(target, 'file1')
     self.failUnless('file1' in container)
     self.failUnless('file1' in target)
Beispiel #10
0
 def test_copytoother(self):
     root = self.rootFolder
     container = traverse(root, 'folder1')
     container['file1'] = File()
     target = traverse(root, 'folder2')
     file = traverse(root, 'folder1/file1')
     copier = IObjectCopier(file)
     copier.copyTo(target, 'file1')
     self.failUnless('file1' in container)
     self.failUnless('file1' in target)
Beispiel #11
0
 def test_copytootherwithnamecollision(self):
     root = self.rootFolder
     container = traverse(root, 'folder1')
     container['file1'] = File()
     target = traverse(root, 'folder2')
     target['file1'] = File()
     file = traverse(root, 'folder1/file1')
     copier = IObjectCopier(file)
     copier.copyTo(target, 'file1')
     # we do it twice, just to test auto-name generation
     copier.copyTo(target, 'file1')
     self.failUnless('file1' in container)
     self.failUnless('file1' in target)
     self.failUnless('file1-2' in target)
     self.failUnless('file1-3' in target)
Beispiel #12
0
 def test_copytootherwithnamecollision(self):
     root = self.rootFolder
     container = traverse(root, 'folder1')
     container['file1'] = File()
     target = traverse(root, 'folder2')
     target['file1'] = File()
     file = traverse(root, 'folder1/file1')
     copier = IObjectCopier(file)
     copier.copyTo(target, 'file1')
     # we do it twice, just to test auto-name generation
     copier.copyTo(target, 'file1')
     self.failUnless('file1' in container)
     self.failUnless('file1' in target)
     self.failUnless('file1-2' in target)
     self.failUnless('file1-3' in target)
Beispiel #13
0
    def handlePaste(self, action):
        items = self.clipboard.getContents()
        moved = False
        not_pasteable_ids = []
        for item in items:
            duplicated_id = False
            try:
                obj = api.traverse(self.context, item['target'])
            except TraversalError:
                pass
            else:
                if item['action'] == 'cut':
                    mover = IObjectMover(obj)
                    try:
                        mover.moveTo(self.context)
                        moved = True
                    except DuplicateIDError:
                        duplicated_id = True
                elif item['action'] == 'copy':
                    copier = IObjectCopier(obj)
                    try:
                        copier.copyTo(self.context)
                    except DuplicateIDError:
                        duplicated_id = True
                else:
                    raise

            if duplicated_id:
                not_pasteable_ids.append(api.getName(obj))

        if moved:
            # Clear the clipboard if we do a move, but not if we only do a copy
            self.clipboard.clearContents()

        if not_pasteable_ids != []:
            # Show the ids of objects that can't be pasted because
            # their ids are already taken.
            # TODO Can't we add a 'copy_of' or something as a prefix
            # instead of raising an exception ?
            transaction.doom()
            raise UserError(
                _("The given name(s) %s is / are already being used" % (
                    str(not_pasteable_ids))))
        else:
            # we need to update the table rows again, otherwise we don't
            # see the new item in the table
            self.updateAfterActionExecution()
            self.status = self.pasteSucsessMessage
Beispiel #14
0
    def pasteObjects(self):
        """Paste ojects in the user clipboard to the container
        """
        target = self.context
        clipboard = getPrincipalClipboard(self.request)
        items = clipboard.getContents()
        moved = False
        not_pasteable_ids = []
        for item in items:
            duplicated_id = False
            try:
                obj = traverse(target, item['target'])
            except TraversalError:
                pass
            else:
                if item['action'] == 'cut':
                    mover = IObjectMover(obj)
                    try:
                        mover.moveTo(target)
                        moved = True
                    except DuplicateIDError:
                        duplicated_id = True
                elif item['action'] == 'copy':
                    copier = IObjectCopier(obj)
                    try:
                        copier.copyTo(target)
                    except DuplicateIDError:
                        duplicated_id = True
                else:
                    raise

            if duplicated_id:
                not_pasteable_ids.append(getName(obj))

        if moved:
            # Clear the clipboard if we do a move, but not if we only do a copy
            clipboard.clearContents()

        if not_pasteable_ids != []:
            # Show the ids of objects that can't be pasted because
            # their ids are already taken.
            # TODO Can't we add a 'copy_of' or something as a prefix
            # instead of raising an exception ?
            raise UserError(
                _("The given name(s) %s is / are already being used" %
                  (str(not_pasteable_ids))))
Beispiel #15
0
    def pasteObjects(self):
        """Paste ojects in the user clipboard to the container
        """
        target = self.context
        clipboard = getPrincipalClipboard(self.request)
        items = clipboard.getContents()
        moved = False
        not_pasteable_ids = []
        for item in items:
            duplicated_id = False
            try:
                obj = traverse(target, item['target'])
            except TraversalError:
                pass
            else:
                if item['action'] == 'cut':
                    mover = IObjectMover(obj)
                    try:
                        mover.moveTo(target)
                        moved = True
                    except DuplicateIDError:
                        duplicated_id = True
                elif item['action'] == 'copy':
                    copier = IObjectCopier(obj)
                    try:
                        copier.copyTo(target)
                    except DuplicateIDError:
                        duplicated_id = True
                else:
                    raise

            if duplicated_id:
                not_pasteable_ids.append(getName(obj))

        if moved:
            # Clear the clipboard if we do a move, but not if we only do a copy
            clipboard.clearContents()

        if not_pasteable_ids != []:
            # Show the ids of objects that can't be pasted because
            # their ids are already taken.
            # TODO Can't we add a 'copy_of' or something as a prefix
            # instead of raising an exception ?
            raise UserError(
                _("The given name(s) %s is / are already being used" %(
                str(not_pasteable_ids))))
Beispiel #16
0
    def pasteObjects(self):
        """Paste ojects in the user clipboard to the container """
        target = self.context
        clipboard = getPrincipalClipboard(self.request)
        items = clipboard.getContents()
        moved = False
        not_pasteable_ids = []
        for item in items:
            duplicated_id = False
            try:
                obj = traverse(target, item['target'])
            except TraversalError:
                pass
            else:
                if item['action'] == 'cut':
                    mover = IObjectMover(removeAllProxies(obj))
                    try:
                        mover.moveTo(target)
                        moved = True
                    except DuplicateIDError:
                        duplicated_id = True
                elif item['action'] == 'copy':
                    copier = IObjectCopier(removeAllProxies(obj))
                    try:
                        copier.copyTo(target)
                    except DuplicateIDError:
                        duplicated_id = True
                    except InvalidItemType:
                        pass
                else:
                    raise

            if duplicated_id:
                not_pasteable_ids.append(getName(obj))

        if moved:
            clipboard.clearContents()

        if not_pasteable_ids:
            abort()
            IStatusMessage(self.request).add(
                _("The given name(s) %s is / are already being used" % (
                    str(not_pasteable_ids))), 'error')
Beispiel #17
0
def CopyAttachments(object, obevent):
    request = getRequest()
    if request is None:
        return

    if IContentEditorPreference(request.principal).editor != 'extjs':
        return

    data = obevent.data
    if data.format != 'zope.source.html':
        return

    ids = getUtility(IIntIds)
    if ids.queryId(object) is None:
        return

    res = splitText.split(data.text)
    if len(res) <= 1:
        return

    extension = IAttachmentsExtension(object)

    for idx in range(1, len(res)-1, 2):
        try:
            content = ids.queryObject(int(res[idx][26:-1]))
            if content is None:
                continue
        except:
            continue

        if content is \
                removeAllProxies(extension.get(content.__name__)):
            continue

        copier = IObjectCopier(content)
        newName = copier.copyTo(extension)
        newContent = extension[newName]

        res[idx] = '%s%s"'%(res[idx][:26], ids.queryId(newContent))

    data.text = u''.join(res)