Exemple #1
0
def convert_all(context):
    catalog = getToolByName(context, 'portal_catalog')
    portal = getSite()
    gsettings = GlobalSettings(portal)
    for brain in catalog(object_provides=OBJECT_PROVIDES):
        file_item = brain.getObject()

        if not allowedDocumentType(file_item,
                                   gsettings.auto_layout_file_types):
            continue

        # let's not switch to the document viewer view
        # until the document is converted. The conversion
        # process will check if the layout is set correctly.
        if file_item.getLayout() != 'documentviewer':
            settings = Settings(file_item)
            settings.last_updated = DateTime('1999/01/01').ISO8601()
            queueJob(file_item)
        else:
            settings = Settings(file_item)
            # also convert if there was an error.
            if settings.successfully_converted == False:
                settings.last_updated = DateTime('1999/01/01').ISO8601()
                settings.filehash = ''
                queueJob(file_item)
Exemple #2
0
def handle_file_creation(obj, event):
    if obj.portal_type == 'Image':
        return
    qi = getToolByName(obj, 'portal_quickinstaller', None)
    if not qi:
        return
    if not qi.isProductInstalled('collective.documentviewer'):
        return
    if getRequest().get('plone.app.contenttypes_migration_running', False):
        """Don't migrate while running a plone.app.contenttypes migration.
        """
        return

    site = getPortal(obj)
    gsettings = GlobalSettings(site)

    if not allowedDocumentType(obj, gsettings.auto_layout_file_types):
        return

    auto_layout = gsettings.auto_select_layout
    if auto_layout and obj.getLayout() != 'documentviewer':
        obj.setLayout('documentviewer')

    if obj.getLayout() == 'documentviewer' and gsettings.auto_convert:
        queueJob(obj)
Exemple #3
0
def convert_all(context):
    catalog = getToolByName(context, 'portal_catalog')
    portal = getSite()
    gsettings = GlobalSettings(portal)
    for brain in catalog(object_provides=IFileContent.__identifier__):
        file = brain.getObject()

        if not allowedDocumentType(file,
                gsettings.auto_layout_file_types):
            continue

        # let's not switch to the document viewer view
        # until the document is converted. The conversion
        # process will check if the layout is set correctly.
        if file.getLayout() != 'documentviewer':
            settings = Settings(file)
            settings.last_updated = DateTime('1999/01/01').ISO8601()
            queueJob(file)
        else:
            settings = Settings(file)
            # also convert if there was an error.
            if settings.successfully_converted == False:
                settings.last_updated = DateTime('1999/01/01').ISO8601()
                settings.filehash = ''
                queueJob(file)
def handle_convert_document(obj, event):
    """Convert document
    """
    site = getSite()
    gsettings = GlobalSettings(site)

    if not allowedDocumentType(obj, gsettings.auto_layout_file_types):
        return

    queueJob(obj)
Exemple #5
0
def convert_all(only_unconverted=True):
    """Convert all files.
    Defaults to convert only files, which haven't been converted yet.
    """
    site = getSite()

    qi = getToolByName(site, 'portal_quickinstaller', None)
    if not qi:
        return
    if not qi.isProductInstalled('collective.documentviewer'):
        return
    if getRequest().get('plone.app.contenttypes_migration_running', False):
        """Don't migrate while running a plone.app.contenttypes migration.
        """
        return

    cat = getToolByName(site, 'portal_catalog')
    res = cat(portal_type='File')
    length = len(res)

    async_enabled = celeryInstalled()

    for cnt, item in enumerate(res, 1):

        logger.info('processing %s/%s', cnt, length)

        obj = item.getObject()

        settings = Settings(obj)
        if only_unconverted and settings.successfully_converted:
            continue

        gsettings = GlobalSettings(site)

        if not allowedDocumentType(obj, gsettings.auto_layout_file_types):
            continue

        auto_layout = gsettings.auto_select_layout
        if auto_layout and obj.getLayout() != 'documentviewer':
            obj.setLayout('documentviewer')

        if obj.getLayout() == 'documentviewer' and gsettings.auto_convert:
            queueJob(obj)
            if not async_enabled:
                # conversion lasts an eternity. commit the results immediately.
                transaction.commit()
Exemple #6
0
def handle_file_creation(object, event):
    qi = getToolByName(object, 'portal_quickinstaller')
    if not qi.isProductInstalled('collective.documentviewer'):
        return

    site = getPortal(object)
    gsettings = GlobalSettings(site)

    if not allowedDocumentType(object, gsettings.auto_layout_file_types):
        return

    auto_layout = gsettings.auto_select_layout
    if auto_layout and object.getLayout() != 'documentviewer':
        object.setLayout('documentviewer')

    if object.getLayout() == 'documentviewer' and gsettings.auto_convert:
        queueJob(object)
def convert_all(only_unconverted=True):
    """Convert all files.
    Defaults to convert only files, which haven't been converted yet.
    """
    site = getSite()

    qi = getToolByName(site, 'portal_quickinstaller', None)
    if not qi:
        return
    if not qi.isProductInstalled('collective.documentviewer'):
        return
    if getRequest().get('plone.app.contenttypes_migration_running', False):
        """Don't migrate while running a plone.app.contenttypes migration.
        """
        return

    cat = getToolByName(site, 'portal_catalog')
    res = cat(portal_type='File')
    length = len(res)

    async_enabled = celeryInstalled()

    for cnt, item in enumerate(res, 1):

        logger.info('processing %s/%s', cnt, length)

        obj = item.getObject()

        settings = Settings(obj)
        if only_unconverted and settings.successfully_converted:
            continue

        gsettings = GlobalSettings(site)

        if not allowedDocumentType(obj, gsettings.auto_layout_file_types):
            continue

        auto_layout = gsettings.auto_select_layout
        if auto_layout and obj.getLayout() != 'documentviewer':
            obj.setLayout('documentviewer')

        if obj.getLayout() == 'documentviewer' and gsettings.auto_convert:
            queueJob(obj)
            if not async_enabled:
                # conversion lasts an eternity. commit the results immediately.
                transaction.commit()
def handle_file_creation(obj, event):
    qi = getToolByName(obj, 'portal_quickinstaller')
    if not qi.isProductInstalled('collective.documentviewer'):
        return

    site = getPortal(obj)
    gsettings = GlobalSettings(site)

    if not allowedDocumentType(obj, gsettings.auto_layout_file_types):
        return

    auto_layout = gsettings.auto_select_layout
    if auto_layout and obj.getLayout() != 'documentviewer':
        obj.setLayout('documentviewer')

    if obj.getLayout() == 'documentviewer' and gsettings.auto_convert:
        queueJob(obj)
def handle_file_creation(obj, event):
    if _should_skip_handler(obj):
        return
    qi = getToolByName(obj, 'portal_quickinstaller', None)
    if not qi:
        return
    if not qi.isProductInstalled('collective.documentviewer'):
        return

    gsettings = GlobalSettings(api.portal.get())

    if not allowedDocumentType(obj, gsettings.auto_layout_file_types):
        return

    auto_layout = gsettings.auto_select_layout
    if auto_layout and obj.getLayout() != 'documentviewer':
        obj.setLayout('documentviewer')

    if obj.getLayout() == 'documentviewer' and gsettings.auto_convert:
        queueJob(obj)
Exemple #10
0
    def __call__(self):
        """
        - handle queuing
        - csrf protection
        - async
            - queue position
        """
        mtool = getToolByName(self.context, 'portal_membership')
        self.manager = mtool.checkPermission('cmf.ManagePortal',
                                             self.context)
        self.async_installed = asyncInstalled()
        self.converting = False
        if self.enabled():
            req = self.request
            if req.get('REQUEST_METHOD', 'POST') and \
               'form.action.queue' in req.form.keys():
                authenticator = getMultiAdapter((self.context, self.request),
                                                name=u"authenticator")
                if not authenticator.verify():
                    raise Unauthorized

                settings = Settings(self.context)
                settings.last_updated = DateTime('1999/01/01').ISO8601()
                settings.filehash = '--foobar--'
                queueJob(self.context)
                self.converting = True
                if self.async_installed:
                    self.position = JobRunner(self.context).find_position()
                    queueJob(self.context)
                else:
                    return self.request.response.redirect(
                        self.context.absolute_url() + '/view')
            else:
                if self.async_installed:
                    self.position = JobRunner(self.context).find_position()
                    if self.position > -1:
                        self.converting = True

            return super(Convert, self).__call__()

        self.request.response.redirect(self.context.absolute_url() + '/view')
    def __call__(self):
        """
        - handle queuing
        - csrf protection
        - async
            - queue position
        """
        mtool = getToolByName(self.context, 'portal_membership')
        self.manager = mtool.checkPermission('cmf.ManagePortal',
                                             self.context)
        self.async_installed = asyncInstalled()
        self.converting = False
        if self.enabled():
            req = self.request
            if req.get('REQUEST_METHOD', 'POST') and \
               'form.action.queue' in req.form.keys():
                authenticator = getMultiAdapter((self.context, self.request),
                                                name=u"authenticator")
                if not authenticator.verify():
                    raise Unauthorized

                settings = Settings(self.context)
                settings.last_updated = DateTime('1999/01/01').ISO8601()
                settings.filehash = '--foobar--'
                queueJob(self.context)
                self.converting = True
                if self.async_installed:
                    self.position = JobRunner(self.context).find_position()
                    queueJob(self.context)
                else:
                    return self.request.response.redirect(
                        self.context.absolute_url() + '/view')
            else:
                if self.async_installed:
                    self.position = JobRunner(self.context).find_position()
                    if self.position > -1:
                        self.converting = True

            return super(Convert, self).__call__()

        self.request.response.redirect(self.context.absolute_url() + '/view')
    def processFiles(self, data, folder, title=None):
        """
            Prepara os arquivos após o upload, adiciona um novo tipo ArquivoBiblioteca

            @param data: Arquivo tipo NamedFile
            @param folter: Objeto folder onde o arquivo será criado

            @return: retorna o objeto ArquivoBiblioteca criado
        """

        filename = data.filename
        blob = data.data
        ctype = data.contentType
        size = data.getSize()
        id = self.generateIdForContext(folder, idnormalizer.normalize(filename))

        pt = getToolByName(self.context, 'portal_types')
        type_info = pt.getTypeInfo('ArquivoBiblioteca')

        a_biblioteca = type_info._constructInstance(folder, id)

        a_biblioteca.setFile(blob)

        file = a_biblioteca.getFile()
        file.setContentType(ctype)
        file.setFilename(filename)

        titulo_arq = title or filename

        a_biblioteca.setContentType(ctype)
        a_biblioteca.setFilename(filename)
        a_biblioteca.setTitle(titulo_arq)
        a_biblioteca.setUid_pratica(folder)

        a_biblioteca.reindexObject()

        queueJob(a_biblioteca)
        return a_biblioteca
def handle_file_creation(obj, event):
    if obj.portal_type == "Image":
        return
    qi = getToolByName(obj, "portal_quickinstaller", None)
    if not qi:
        return
    if not qi:
        return
    if not qi.isProductInstalled("collective.documentviewer"):
        return

    site = getPortal(obj)
    gsettings = GlobalSettings(site)

    if not allowedDocumentType(obj, gsettings.auto_layout_file_types):
        return

    auto_layout = gsettings.auto_select_layout
    if auto_layout and obj.getLayout() != "documentviewer":
        obj.setLayout("documentviewer")

    if obj.getLayout() == "documentviewer" and gsettings.auto_convert:
        queueJob(obj)
    def test_status(self):
        obj = self.portal['file']

        preview_adapter = adapter.CategorizedObjectPreviewAdapter(obj)

        gsettings = GlobalSettings(self.portal)
        self.assertEqual(gsettings.auto_layout_file_types, ['pdf'])

        obj.file.contentType = 'application/rtf'
        self.assertEqual(preview_adapter.status, 'not_convertable')
        self.assertFalse(preview_adapter.converted)

        obj.file.contentType = 'application/pdf'
        self.assertEqual(preview_adapter.status, 'not_converted')
        self.assertFalse(preview_adapter.converted)

        ann = IAnnotations(obj)['collective.documentviewer']
        ann['filehash'] = '--foobar--'
        obj.file.contentType = 'application/pdf'
        self.assertEqual(preview_adapter.status, 'in_progress')
        self.assertFalse(preview_adapter.converted)

        queueJob(obj)
        # not a real PDF actually...
        self.assertEqual(preview_adapter.status, 'conversion_error')
        self.assertFalse(preview_adapter.converted)

        # enable every supported types including txt
        gsettings.auto_layout_file_types = CONVERTABLE_TYPES.keys()
        obj.file.contentType = 'text/plain'
        # collective.documentviewer checks if element was modified
        # or it does not convert again
        sleep(1)
        obj.notifyModified()
        queueJob(obj)
        self.assertEqual(preview_adapter.status, 'converted')
        self.assertTrue(preview_adapter.converted)
def submitDocumentViewer(wfStateInfo):
    originalfile = wfStateInfo.object
    if originalfile.getLayout() != 'documentviewer':
        originalfile.setLayout('documentviewer')

    queueJob(originalfile)
Exemple #16
0
    def update(self):
        #Zerando a variavel de retorno
        self.retorno = {}

        try:
            context = aq_inner(self.context)

            #TODO: Alterar os nomes das variaveis
            file_data = self.request.form.get('file', '')
            new_file = self.request.form.get('new_file', '')
            try:
                new_file = eval(new_file)
            except:
                new_file = False

            folder_path = self.request.form.get('folder_path', '')

            p_membership = getToolByName(context, "portal_membership")
            user_admin = p_membership.getMemberById('admin')

            # stash the existing security manager so we can restore it
            old_security_manager = getSecurityManager()
            # create a new context, as the owner of the folder
            newSecurityManager(self.request,user_admin)

            if file_data:

                #Mudando de contexto de acordo com o meu folder_path
                if folder_path and folder_path != '/':
                    context = create_or_set_folder_path(folder_path.split('/'), context)

                title = file_name = file_data.filename

                id_file_name = normalize_id_to_file_name(title, context)

                description = ''
                mime_type = mimetypes.guess_type(file_name)[0]
                portal_type = 'File'
                upload_with = "CLASSIC FORM POST"

                #Verifico aqui se existe o arquivo no meu contexto
                try:
                    newid = get_id_from_filename(file_name, context)
                except MissingExtension:
                    raise Exception('missingExtensionFile')

                if newid in context or id_file_name in context:
                    updated_object = context.get(newid, False) or context[id_file_name]
                    mtool = getToolByName(context, 'portal_membership')
                    if mtool.checkPermission(ModifyPortalContent, updated_object):
                        can_overwrite = True
                    else:
                        can_overwrite = False

                    if not can_overwrite:
                        logger.debug("The file id for %s already exists, upload rejected" % file_name)
                        raise Exception('serverErrorAlreadyExists')

                    overwritten_file = updated_object
                else:
                    overwritten_file = None

                if overwritten_file is not None:
                    logger.info("reuploading %s file with %s : title=%s, description=%s, mime_type=%s" % \
                            (overwritten_file.absolute_url(), upload_with, title, description, mime_type))
                    try :
                        f = vindula_file_updater(overwritten_file, file_name, title, description, mime_type, file_data)
                        if f['success'] is not None:
                            queueJob(f['success'])
                    except Exception, e:
                        logger.error("Error updating %s file : %s", file_name, str(e))
                        raise Exception("Error updating %s file : %s" % (file_name, str(e)))
                else:
                    logger.info("uploading file with %s : filename=%s, title=%s, description=%s, mime_type=%s, portal_type=%s" % \
                            (upload_with, file_name, title, description, mime_type, portal_type))
                    try :
                        f = vindula_file_factory(context, file_name, title, description, mime_type, file_data, portal_type)
                    except Exception, e:
                        logger.error("Error creating %s file : %s", file_name, str(e))
                        raise  Exception("Error updating %s file : %s" % (file_name, str(e)))

                if f['success'] is not None :
                    o = f['success']
                    self.retorno['uid'] = o.UID()
                    logger.info("file url: %s" % o.absolute_url())
def submitDocumentViewer(wfStateInfo):
    originalfile = wfStateInfo.object
    if originalfile.getLayout() != 'documentviewer':
        originalfile.setLayout('documentviewer')

    queueJob(originalfile)