Ejemplo n.º 1
0
def generate_previews(obj, event=None):
    """ Generate the previews for a content type. We need our own subscriber as
    c.dv insists on checking for its custom layout. Also we want our own async
    mechanism, it is using this method.

    :param obj: The Plone content object to get preview URLs for
    :type obj: A Plone content object
    :return: Does not return anything.
    :rtype: None
    """
    site = getPortal(obj)
    gsettings = GlobalSettings(site)
    html_types = api.portal.get_registry_record(
        'ploneintranet.docconv.html_types',
        default=[],
    )

    if obj.portal_type in html_types:
        generate_pdf(obj, event=event)

    if not allowedDocumentType(obj, gsettings.auto_layout_file_types):
        log.info('Object type is not in available file types for conversion.')
        return

    if gsettings.auto_convert:
        converter = Converter(obj)
        if not converter.can_convert:
            return
        converter()
Ejemplo n.º 2
0
    def __call__(self):
        self.site = getPortal(self.context)
        self.settings = Settings(self.context)
        self.global_settings = GlobalSettings(self.site)

        self.portal_url = getMultiAdapter(
            (self.context, self.request),
            name="plone_portal_state").portal_url()
        self.dvstatic = "%s/++resource++dv.resources" % (self.portal_url)
        resource_url = self.global_settings.override_base_resource_url
        rel_url = storage.getResourceRelURL(gsettings=self.global_settings,
                                            settings=self.settings)
        if resource_url:
            self.dvpdffiles = '%s/%s' % (resource_url.rstrip('/'), rel_url)
        else:
            self.dvpdffiles = '%s/%s' % (self.portal_url, rel_url)

        utils = getToolByName(self.context, 'plone_utils')
        msg = None
        self.enabled = True

        if allowedDocumentType(self.context,
                               self.global_settings.auto_layout_file_types):
            if not self.installed:
                msg = _(
                    "Since you do not have docsplit installed on this "
                    "system, we can not render the pages of this document.")
            if self.settings.converting is not None and \
                    self.settings.converting:
                if self.settings.successfully_converted:
                    # there is a version that is already converted, show it.
                    self.enabled = True
                else:
                    msg = _("The document is currently being converted to the "
                            "Document Viewer view.")
                    self.enabled = False
            elif self.settings.successfully_converted is not None and \
                    not self.settings.successfully_converted:
                msg = _("There was an error trying to convert the document. "
                        "Maybe the document is encrypted, corrupt or "
                        "malformed? Check log for details.")
                self.enabled = False
            elif self.settings.successfully_converted is None:
                # must have just switched to this view
                msg = _("This document is not yet converted to document "
                        "viewer. Please click the `Document Viewer Convert` "
                        "button in the actions menu to convert.")
                self.enabled = False
        else:
            self.enabled = False
            msg = _("The file is not a supported document type. "
                    "Your type may be supported. Check out the document "
                    "viewer configuration settings.")
        mtool = getToolByName(self.context, 'portal_membership')
        self.can_modify = mtool.checkPermission('cmf.ModifyPortalContent',
                                                self.context)
        if msg and self.can_modify:
            utils.addPortalMessage(_(msg))

        return self.index()
 def __init__(self, obj):
     self.object = obj
     self.objectpath = self.object.getPhysicalPath()
     self.portal = getPortal(obj)
     self.portalpath = self.portal.getPhysicalPath()
     self.async = getUtility(IAsyncService)
     self.queue = self.async.getQueues()['']
Ejemplo n.º 4
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)
Ejemplo n.º 5
0
 def __init__(self, obj):
     self.object = obj
     self.objectpath = self.object.getPhysicalPath()
     self.portal = getPortal(obj)
     self.portalpath = self.portal.getPhysicalPath()
     self. async = getUtility(IAsyncService)
     self.queue = self. async .getQueues()['']
def handle_workflow_change(obj, event):
    settings = Settings(obj)
    site = getPortal(obj)
    gsettings = GlobalSettings(site)
    if not gsettings.storage_obfuscate or \
            settings.storage_type != 'File':
        return

    for perm in obj.rolesOfPermission("View"):
        if perm['name'] == 'Anonymous' and perm["selected"] != "":
            # anon can now view, move it to normal
            storage_dir = storage_dir = storage.getResourceDirectory(
                gsettings=gsettings, settings=settings)
            secret_dir = os.path.join(storage_dir,
                                      settings.obfuscate_secret)
            if not os.path.exists(secret_dir):
                # already public, oops
                return

            for folder in os.listdir(secret_dir):
                path = os.path.join(secret_dir, folder)
                newpath = os.path.join(storage_dir, folder)
                shutil.move(path, newpath)

            shutil.rmtree(secret_dir)
            settings.obfuscated_filepath = False
            return

    # if we made it here, the item might have been switched back
    # to being unpublished. Let's just get the converter object
    # and re-move it
    converter = Converter(object)
    converter.handleFileObfuscation()
Ejemplo n.º 7
0
def handle_workflow_change(object, event):
    settings = Settings(object)
    site = getPortal(object)
    gsettings = GlobalSettings(site)
    if not gsettings.storage_obfuscate or \
            settings.storage_type != 'File':
        return
    for perm in object.rolesOfPermission("View"):
        if perm['name'] == 'Anonymous' and perm["selected"] != "":
            # anon can now view, move it to normal
            storage_dir = storage_dir = storage.getResourceDirectory(
                gsettings=gsettings, settings=settings)
            secret_dir = os.path.join(storage_dir, settings.obfuscate_secret)
            if not os.path.exists(secret_dir):
                # already public, oops
                return
            for folder in os.listdir(secret_dir):
                path = os.path.join(secret_dir, folder)
                newpath = os.path.join(storage_dir, folder)
                shutil.move(path, newpath)
            shutil.rmtree(secret_dir)
            settings.obfuscated_filepath = False
            return
    # if we made it here, the item might have been switched back
    # to being unpublished. Let's just get the converter object
    # and re-move it
    converter = Converter(object)
    converter.handleFileObfuscation()
    def __call__(self):
        self.site = getPortal(self.context)
        self.settings = Settings(self.context)
        self.global_settings = GlobalSettings(self.site)

        self.portal_url = getMultiAdapter((self.context, self.request),
            name="plone_portal_state").portal_url()
        self.dvstatic = "%s/++resource++dv.resources" % (
            self.portal_url)
        resource_url = self.global_settings.override_base_resource_url
        rel_url = storage.getResourceRelURL(gsettings=self.global_settings,
                                            settings=self.settings)
        if resource_url:
            self.dvpdffiles = '%s/%s' % (resource_url.rstrip('/'), rel_url)
        else:
            self.dvpdffiles = '%s/%s' % (self.portal_url, rel_url)

        utils = getToolByName(self.context, 'plone_utils')
        msg = None

        if allowedDocumentType(self.context,
                self.global_settings.auto_layout_file_types):
            if not self.installed:
                msg = "Since you do not have docsplit installed on this " + \
                      "system, we can not render the pages of this document."
            elif self.settings.converting is not None and \
                    self.settings.converting:
                if self.settings.successfully_converted:
                    # there is a version that is already converted, show it.
                    self.enabled = True
                else:
                    msg = "The document is currently being converted to the " + \
                          "Document Viewer view."
                    self.enabled = False
            elif self.settings.successfully_converted is not None and \
                    not self.settings.successfully_converted:
                msg = "There was an error trying to convert the document. " +\
                      "Maybe the document is encrypted, corrupt or " +\
                      "malformed? Check log for details."
                self.enabled = False
            elif self.settings.successfully_converted is None:
                # must have just switched to this view
                msg = "This document is not yet converted to document " +\
                      "viewer. Please click the `Document Viewer Convert` " +\
                      "button in the actions menu to convert."
                self.enabled = False
        else:
            self.enabled = False
            msg = "The file is not a supported document type. " + \
                  "Your type may be supported. Check out the document " + \
                  "viewer configuration settings."
        mtool = getToolByName(self.context, 'portal_membership')
        self.can_modify = mtool.checkPermission('cmf.ModifyPortalContent',
                                                self.context)
        if msg and self.can_modify:
            utils.addPortalMessage(msg)

        return self.index()
Ejemplo n.º 9
0
 def __init__(self, context):
     self.context = aq_inner(context)
     self.settings = Settings(self.context)
     self.filehash = None
     self.blob_filepath = None
     self.gsettings = GlobalSettings(getPortal(context))
     self.storage_dir = self.get_storage_dir()
     self.doc_type = getDocumentType(self.context,
                                     self.gsettings.auto_layout_file_types)
Ejemplo n.º 10
0
    def __call__(self):
        self.site = getPortal(self.context)
        self.global_settings = GlobalSettings(self.site)
        self.search_enabled = self.global_settings.show_search_on_group_view

        self.portal_url = getMultiAdapter((self.context, self.request),
            name="plone_portal_state").portal_url()
        self.static_url = '%s/++resource++dv.resources' % (self.portal_url)
        self.resource_url = self.global_settings.override_base_resource_url
        self.dump_path = DUMP_FILENAME.rsplit('.', 1)[0]
        return super(GroupView, self).__call__()
Ejemplo n.º 11
0
 def __init__(self, context):
     self.context = aq_inner(context)
     self.settings = Settings(self.context)
     fw = IFileWrapper(self.context)
     self.blob = fw.blob
     self.initialize_blob_filepath()
     self.filehash = None
     self.gsettings = GlobalSettings(getPortal(context))
     self.storage_dir = self.get_storage_dir()
     self.doc_type = getDocumentType(self.context,
                                     self.gsettings.auto_layout_file_types)
Ejemplo n.º 12
0
    def __call__(self):
        self.site = getPortal(self.context)
        self.global_settings = GlobalSettings(self.site)
        self.search_enabled = self.global_settings.show_search_on_group_view

        self.portal_url = getMultiAdapter((self.context, self.request),
            name="plone_portal_state").portal_url()
        self.static_url = '%s/++resource++dv.resources' % (self.portal_url)
        self.resource_url = self.global_settings.override_base_resource_url
        self.dump_path = DUMP_FILENAME.rsplit('.', 1)[0]
        return super(GroupView, self).__call__()
Ejemplo n.º 13
0
def getResourceDirectory(gsettings=None, settings=None, obj=None):
    if settings is None:
        settings = Settings(obj)
    else:
        obj = settings.context
    if gsettings is None:
        gsettings = GlobalSettings(getPortal(obj))
    uid = settings.context.UID()
    if settings.storage_version >= 2:
        return join(gsettings.storage_location, uid[0], uid[1], uid)
    else:
        return join(gsettings.storage_location, uid)
Ejemplo n.º 14
0
 def __init__(self, context):
     self.context = aq_inner(context)
     self.settings = Settings(self.context)
     field = self.context.getField('file') or context.getPrimaryField()
     wrapper = field.get(self.context)
     self.blob = wrapper.getBlob()
     self.initialize_blob_filepath()
     self.filehash = None
     self.gsettings = GlobalSettings(getPortal(context))
     self.storage_dir = self.get_storage_dir()
     self.doc_type = getDocumentType(self.context,
                                     self.gsettings.auto_layout_file_types)
Ejemplo n.º 15
0
 def __init__(self, context):
     self.context = aq_inner(context)
     self.settings = Settings(self.context)
     field = self.context.getField('file') or context.getPrimaryField()
     wrapper = field.get(self.context)
     self.blob = wrapper.getBlob()
     self.initialize_blob_filepath()
     self.filehash = None
     self.gsettings = GlobalSettings(getPortal(context))
     self.storage_dir = self.get_storage_dir()
     self.doc_type = getDocumentType(self.context,
                                     self.gsettings.auto_layout_file_types)
Ejemplo n.º 16
0
 def enabled(self):
     try:
         if IFileContent.providedBy(self.context):
             if self.context.getLayout() == 'documentviewer':
                 return True
             else:
                 return allowedDocumentType(self.context,
                     GlobalSettings(
                         getPortal(self.context)).auto_layout_file_types)
         else:
             return False
     except:
         return False
Ejemplo n.º 17
0
 def enabled(self):
     try:
         if IFileContent.providedBy(self.context):
             if self.context.getLayout() == 'documentviewer':
                 return True
             else:
                 return allowedDocumentType(
                     self.context,
                     GlobalSettings(getPortal(
                         self.context)).auto_layout_file_types)
         else:
             return False
     except:
         return False
Ejemplo n.º 18
0
 def enabled(self):
     try:
         fw = IFileWrapper(self.context)
         if fw.has_enclosure:
             if self.context.getLayout() == 'documentviewer':
                 return True
             else:
                 return allowedDocumentType(self.context,
                     GlobalSettings(
                         getPortal(self.context)).auto_layout_file_types)
         else:
             return False
     except:
         return False
Ejemplo n.º 19
0
 def enabled(self):
     try:
         fw = IFileWrapper(self.context)
         if fw.has_enclosure:
             if self.context.getLayout() == 'documentviewer':
                 return True
             else:
                 settings = GlobalSettings(getPortal(self.context))
                 return allowedDocumentType(
                     self.context, settings.auto_layout_file_types)
         else:
             return False
     except:
         return False
Ejemplo n.º 20
0
def getResourceRelURL(gsettings=None, settings=None, obj=None):
    if settings is None:
        settings = Settings(obj)
    else:
        obj = settings.context
    if gsettings is None:
        gsettings = GlobalSettings(getPortal(obj))
    base = '@@dvpdffiles/'
    if gsettings.override_base_resource_url:
        base = ''
    uid = settings.context.UID()
    if settings.storage_version >= 2:
        return '%s%s/%s/%s' % (base, uid[0], uid[1], uid)
    else:
        return '%s%s' % (base, uid)
Ejemplo n.º 21
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 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)
Ejemplo n.º 23
0
def is_allowed_document_type(obj):
    """ Check if object can actually be converted

    :param obj: The Plone object to get previews for
    :type obj: A Plone content object
    :return: True if object can be converted
    :rtype: boolean
    """
    site = getPortal(obj)
    gsettings = GlobalSettings(site)
    try:
        return allowedDocumentType(obj, gsettings.auto_layout_file_types)
    except MimeTypeException as e:
        log.warning(
            'Mimetype issue for %r: %s',
            obj,
            e,
        )
        return False
Ejemplo n.º 24
0
def generate_previews(obj, event=None):
    """ Generate the previews for a content type. We need our own subscriber as
    c.dv insists on checking for its custom layout. Also we want our own async
    mechanism, it is using this method.

    :param obj: The Plone content object to get preview URLs for
    :type obj: A Plone content object
    :return: Does not return anything.
    :rtype: None
    """
    site = getPortal(obj)
    gsettings = GlobalSettings(site)

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

    if gsettings.auto_convert:
        # ASYNC HERE
        converter = Converter(obj)
        if not converter.can_convert:
            return
        converter()
Ejemplo n.º 25
0
def generate_previews(obj, event=None):
    """ Generate the previews for a content type. We need our own subscriber as
    c.dv insists on checking for its custom layout. Also we want our own async
    mechanism, it is using this method.

    :param obj: The Plone content object to get preview URLs for
    :type obj: A Plone content object
    :return: Does not return anything.
    :rtype: None
    """
    site = getPortal(obj)
    gsettings = GlobalSettings(site)

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

    if gsettings.auto_convert:
        # ASYNC HERE
        converter = Converter(obj)
        if not converter.can_convert:
            return
        converter()
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)
Ejemplo n.º 27
0
    def __call__(self):
        """ Redirects to the url for the rendered PDF.

            We need to redirect, because the PDF can be stored on FS, instead
            of ZODB.
        """
        site = getPortal(self.context)
        settings = Settings(self.context)
        global_settings = GlobalSettings(site)

        portal_url = getMultiAdapter((self.context, self.request),
                                     name="plone_portal_state").portal_url()

        resource_url = global_settings.override_base_resource_url
        rel_url = storage.getResourceRelURL(gsettings=global_settings,
                                            settings=settings)
        if resource_url:
            dvpdffiles = '%s/%s' % (resource_url.rstrip('/'), rel_url)
        else:
            dvpdffiles = '%s/%s' % (portal_url, rel_url)

        url = '%s/pdf/dump.pdf' % dvpdffiles
        self.request.response.redirect(url)
Ejemplo n.º 28
0
 def __init__(self, obj):
     self.object = obj
     self.portal = getPortal(obj)
     self.settings = Settings(obj)
Ejemplo n.º 29
0
def _getPortal(request, context):
    return getPortal(context)
Ejemplo n.º 30
0
 def __init__(self, obj):
     self.object = obj
     self.portal = getPortal(obj)
     self.settings = Settings(obj)
Ejemplo n.º 31
0
def _getPortal(request, context):
    return getPortal(context)