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()
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()['']
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)
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()
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()
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)
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__()
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)
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)
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)
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
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
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
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
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)
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)
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
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)
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)
def __init__(self, obj): self.object = obj self.portal = getPortal(obj) self.settings = Settings(obj)
def _getPortal(request, context): return getPortal(context)