def setUp(self):
        """ """
        portal = makerequest(self.layer['portal'])
        self.request = portal.REQUEST
        alsoProvides(self.request, IPloneintranetDocconvClientLayer)
        setRoles(portal, TEST_USER_ID, ('Manager',))

        gsettings = GlobalSettings(portal)
        self.storage_dir = mkdtemp()
        gsettings.storage_location = self.storage_dir

        # temporarily disable event handler so that we can test objects without
        # previews
        from ploneintranet.docconv.client import handlers
        _update_preview_images = handlers._update_preview_images
        handlers._update_preview_images = lambda obj, event: None

        self.workspace = api.content.create(
            type='Folder',
            title=u"Docconv Workspace",
            container=portal)
        ff = open(os.path.join(os.path.dirname(__file__), TEST_FILENAME), 'r')
        self.filedata = ff.read()
        ff.close()
        self.testfile = api.content.create(
            type='File',
            id='test-file',
            title=u"Test File",
            file=NamedBlobFile(data=self.filedata, filename=TEST_FILENAME),
            container=self.workspace)

        handlers._update_preview_images = _update_preview_images

        event.notify(BeforeTraverseEvent(portal, portal.REQUEST))
    def test_set_values(self):
        obj = self.portal['file']
        view = obj.restrictedTraverse('@@iconified-print')

        # works only if functionnality enabled and user have Modify portal content
        category = utils.get_category_object(obj, obj.content_category)
        group = category.get_category_group()

        # fails if one of 2 conditions is not fullfilled
        self.assertTrue(api.user.has_permission(ModifyPortalContent, obj=obj))
        group.to_be_printed_activated = False
        self.assertRaises(Unauthorized, view.set_values, {'to_print': True})
        group.to_be_printed_activated = True

        obj.manage_permission(ModifyPortalContent, roles=[])
        self.assertRaises(Unauthorized, view.set_values, {'to_print': True})
        obj.manage_permission(ModifyPortalContent, roles=['Manager'])

        # set to None when format not managed by collective.documentviewer
        self.assertFalse(obj.to_print, obj.aq_parent.categorized_elements[obj.UID()]['to_print'])
        view.set_values({'to_print': True})
        self.assertIsNone(obj.to_print, obj.aq_parent.categorized_elements[obj.UID()]['to_print'])

        # will be correctly set if format is managed
        gsettings = GlobalSettings(self.portal)
        gsettings.auto_layout_file_types = CONVERTABLE_TYPES.keys()
        view.set_values({'to_print': True})
        self.assertTrue(obj.to_print, obj.aq_parent.categorized_elements[obj.UID()]['to_print'])
        view.set_values({'to_print': False})
        self.assertFalse(obj.to_print, obj.aq_parent.categorized_elements[obj.UID()]['to_print'])
    def test_content_category_changed_default_values(self):
        """While content_category is changed on an element, the default values for fields
           to_print/confidential/to_sign/signed are reapplied with new content_category
           default values if it was still the default vlue of the original content_category."""
        category_group = self.portal.config['group-1']
        category_group.to_be_printed_activated = True
        category_group.confidentiality_activated = True
        category_group.signed_activated = True
        category11 = self.portal.config['group-1']['category-1-1']
        category11_id = calculate_category_id(category11)
        obj = api.content.create(
            id='file2',
            type='File',
            file=self.file,
            container=self.portal,
            content_category=category11_id)
        self.assertFalse(obj.confidential)
        self.assertFalse(obj.to_sign)
        self.assertFalse(obj.signed)
        self.assertIsNone(obj.to_print)
        # now enable everything on category-1-2 and use it
        category12 = self.portal.config['group-1']['category-1-2']
        category12.to_print = False
        category12.confidential = True
        category12.to_sign = True
        category12.signed = True
        category12_id = calculate_category_id(category12)
        adapted_obj = IconifiedCategorization(obj)
        setattr(adapted_obj, 'content_category', category12_id)
        notify(ObjectModifiedEvent(obj))

        # changed to True on obj an in parent's categorized_elements
        parent_cat_elements = obj.aq_parent.categorized_elements[obj.UID()]
        self.assertTrue(obj.confidential)
        self.assertTrue(parent_cat_elements['confidential'])
        self.assertTrue(obj.to_sign)
        self.assertTrue(parent_cat_elements['to_sign'])
        self.assertTrue(obj.signed)
        self.assertTrue(parent_cat_elements['signed'])
        # to_print could not be set to False because not printable
        self.assertIsNone(obj.to_print)
        self.assertIsNone(parent_cat_elements['to_print'])

        # enable conversion and back to category11
        category11.to_print = True
        gsettings = GlobalSettings(self.portal)
        gsettings.auto_layout_file_types = CONVERTABLE_TYPES.keys()
        # set to_print to False, aka the default value of category12
        obj.to_print = False
        setattr(adapted_obj, 'content_category', category11_id)
        notify(ObjectModifiedEvent(obj))
        self.assertTrue(obj.to_print)
        self.assertTrue(parent_cat_elements['to_print'])

        # if original content_category does not exist, it does not fail
        # but default values are not reapplied
        obj.content_category = 'unkown_content_category'
        setattr(adapted_obj, 'content_category', category12_id)
        notify(ObjectModifiedEvent(obj))
        self.assertEqual(obj.content_category, category12_id)
 def test_get_correct_rel_url_for_new_storage_with_resource_url(self):
     fi = self.createFile('test.pdf')
     gsettings = GlobalSettings(self.portal)
     gsettings.override_base_resource_url = 'http://foobar.com'
     uid = fi.UID()
     self.assertEquals(storage.getResourceRelURL(obj=fi),
                       '%s/%s/%s' % (uid[0], uid[1], uid))
 def test_publish_unpublish_again_works_with_obfuscation(self):
     gsettings = GlobalSettings(self.portal)
     _dir = mkdtemp()
     gsettings.storage_location = _dir
     gsettings.storage_type = 'File'
     gsettings.storage_obfuscate = True
     fi = self.createFile('test.pdf')
     uid = fi.UID()
     fi.reindexObject()
     notify(ObjectInitializedEvent(fi))
     settings = Settings(fi)
     self.assertTrue(exists(join(_dir, uid[0], uid[1], uid,
         settings.obfuscate_secret)))
     self.assertTrue(listdir(join(_dir, uid[0], uid[1], uid,
         settings.obfuscate_secret)) > 3)
     # publish now
     workflowTool = getToolByName(fi, 'portal_workflow')
     workflowTool.doActionFor(fi, 'publish')
     self.assertTrue(not exists(join(_dir, uid[0], uid[1], uid,
         settings.obfuscate_secret)))
     workflowTool.doActionFor(fi, 'retract')
     self.assertTrue(exists(join(_dir, uid[0], uid[1], uid,
         settings.obfuscate_secret)))
     self.assertTrue(listdir(join(_dir, uid[0], uid[1], uid,
         settings.obfuscate_secret)) > 3)
    def test_content_category_to_print_on_creation(self):
        """ """
        category_group = self.portal.config['group-1']
        category = self.portal.config['group-1']['category-1-1']
        content_category_id = calculate_category_id(category)
        category_group.to_be_printed_activated = True
        # enable conversion
        gsettings = GlobalSettings(self.portal)
        gsettings.auto_layout_file_types = CONVERTABLE_TYPES.keys()

        # set to False
        category.to_print = False
        file2 = api.content.create(
            id='file2',
            type='File',
            file=self.file,
            container=self.portal,
            content_category=content_category_id)
        self.assertFalse(file2.to_print)

        # set to True
        category.to_print = True
        file3 = api.content.create(
            id='file3',
            type='File',
            file=self.file,
            container=self.portal,
            content_category=content_category_id)
        self.assertTrue(file3.to_print)
 def test_filesystem_storage_works(self):
     gsettings = GlobalSettings(self.portal)
     _dir = mkdtemp()
     gsettings.storage_location = _dir
     gsettings.storage_type = 'File'
     fi = self.createFile('test.pdf')
     notify(ObjectInitializedEvent(fi))
     uid = fi.UID()
     fi.reindexObject()  # for pc
     fiobj = self.portal.unrestrictedTraverse(
         '@@dvpdffiles/%s/%s/%s/small/dump_1.gif' % (
             uid[0], uid[1], uid))
     self.assertEquals(fiobj.context.path,
         join(_dir, uid[0], uid[1], uid, 'small', 'dump_1.gif'))
     fiobj = self.portal.unrestrictedTraverse(
         '@@dvpdffiles/%s/%s/%s/normal/dump_1.gif' % (
             uid[0], uid[1], uid))
     self.assertEquals(fiobj.context.path,
         join(_dir, uid[0], uid[1], uid, 'normal', 'dump_1.gif'))
     fiobj = self.portal.unrestrictedTraverse(
         '@@dvpdffiles/%s/%s/%s/large/dump_1.gif' % (
             uid[0], uid[1], uid))
     self.assertEquals(fiobj.context.path,
         join(_dir, uid[0], uid[1], uid, 'large', 'dump_1.gif'))
     fiobj = self.portal.unrestrictedTraverse(
         '@@dvpdffiles/%s/%s/%s/text/dump_1.txt' % (
             uid[0], uid[1], uid))
     self.assertEquals(fiobj.context.path,
         join(_dir, uid[0], uid[1], uid, 'text', 'dump_1.txt'))
def setup_documentviewer(portal):
    from collective.documentviewer.settings import GlobalSettings
    dv_settings = GlobalSettings(portal)
    dv_settings.auto_layout_file_types = ('pdf', 'ppt', 'word', 'rft')
    dv_settings.auto_convert = True
    dv_settings.show_sidebar = False
    dv_settings.show_search = False
Example #9
0
 def test_sets_filehash(self):
     fi = self.createFile('test.odp')
     gsettings = GlobalSettings(self.portal)
     gsettings.auto_select_layout = True
     gsettings.auto_layout_file_types = ['ppt']
     notify(ObjectInitializedEvent(fi))
     settings = Settings(fi)
     self.assertTrue(settings.filehash is not None)
Example #10
0
 def test_sets_can_not_convert_after_conversion(self):
     fi = self.createFile('test.odp')
     gsettings = GlobalSettings(self.portal)
     gsettings.auto_select_layout = True
     gsettings.auto_layout_file_types = ['ppt']
     notify(ObjectInitializedEvent(fi))
     converter = Converter(fi)
     self.assertTrue(not converter.can_convert)
 def test_set_storage_version(self):
     gsettings = GlobalSettings(self.portal)
     _dir = mkdtemp()
     gsettings.storage_location = _dir
     fi = self.createFile('test.pdf')
     settings = Settings(fi)
     self.assertEquals(settings.storage_version,
                       STORAGE_VERSION)
Example #12
0
 def test_auto_convert_powerpoint(self):
     fi = self.createFile('test.odp')
     gsettings = GlobalSettings(self.portal)
     gsettings.auto_select_layout = True
     gsettings.auto_layout_file_types = ['ppt']
     notify(ObjectInitializedEvent(fi))
     settings = Settings(fi)
     self.assertEqual(settings.successfully_converted, True)
     self.assertEqual(settings.num_pages, 1)
 def test_get_correct_rel_url_for_old_storage_with_resource_url(self):
     fi = self.createFile('test.pdf')
     settings = Settings(fi)
     gsettings = GlobalSettings(self.portal)
     gsettings.override_base_resource_url = 'http://foobar.com'
     del settings._metadata['storage_version']
     uid = fi.UID()
     self.assertEquals(storage.getResourceRelURL(obj=fi),
                       '%s' % uid)
 def test_retrieve_correct_resource_location_new_storage(self):
     gsettings = GlobalSettings(self.portal)
     _dir = mkdtemp()
     gsettings.storage_location = _dir
     fi = self.createFile('test.pdf')
     notify(ObjectInitializedEvent(fi))
     uid = fi.UID()
     self.assertEquals(storage.getResourceDirectory(obj=fi),
                       join(_dir, uid[0], uid[1], uid))
 def test_retrieve_correct_resource_location_old_storage(self):
     gsettings = GlobalSettings(self.portal)
     _dir = mkdtemp()
     gsettings.storage_location = _dir
     fi = self.createFile('test.pdf')
     settings = Settings(fi)
     del settings._metadata['storage_version']
     self.assertEquals(storage.getResourceDirectory(obj=fi),
                       join(_dir, fi.UID()))
    def test_PrintColumn(self):
        table = self.portal.restrictedTraverse('@@iconifiedcategory')
        brain = CategorizedContent(self.portal.portal_catalog(UID=self.portal['file'].UID())[0],
                                   self.portal)
        obj = brain.real_object()
        column = PrintColumn(self.portal, self.portal.REQUEST, table)
        # not convertible by default as c.documentviewer not enabled
        self.assertEqual(
            column.renderCell(brain),
            u'<a href="#" '
            u'class="iconified-action deactivated" '
            u'alt="Not convertible to a printable format" '
            u'title="Not convertible to a printable format"></a>')
        self.assertIsNone(brain.to_print)
        self.assertIsNone(obj.to_print)

        # enable collective.documentviewer so document is convertible
        gsettings = GlobalSettings(self.portal)
        gsettings.auto_layout_file_types = CONVERTABLE_TYPES.keys()
        # enable to_print management in configuration
        category = utils.get_category_object(obj, obj.content_category)
        category_group = category.get_category_group(category)
        category_group.to_be_printed_activated = True
        category.to_print = False
        notify(ObjectModifiedEvent(obj))
        brain = CategorizedContent(self.portal.portal_catalog(UID=self.portal['file'].UID())[0],
                                   self.portal)
        self.assertEqual(brain.to_print, False)
        self.assertFalse(obj.to_print)
        self.assertEqual(
            column.renderCell(brain),
            u'<a href="http://nohost/plone/file/@@iconified-print" '
            u'class="iconified-action editable" '
            u'alt="Should not be printed" '
            u'title="Should not be printed"></a>')

        # set to_print to True
        obj.to_print = True
        notify(ObjectModifiedEvent(obj))
        brain = CategorizedContent(self.portal.portal_catalog(UID=self.portal['file'].UID())[0],
                                   self.portal)
        self.assertTrue(brain.to_print, False)
        self.assertTrue(obj.to_print)
        self.assertEqual(
            column.renderCell(brain),
            u'<a href="http://nohost/plone/file/@@iconified-print" '
            u'class="iconified-action active editable" '
            u'alt="Must be printed" '
            u'title="Must be printed"></a>')

        # if element is not editable, the 'editable' CSS class is not there
        obj.manage_permission(ModifyPortalContent, roles=[])
        notify(ObjectModifiedEvent(obj))
        self.assertEqual(column.renderCell(brain),
                         u'<a href="http://nohost/plone/file/@@iconified-print" '
                         u'class="iconified-action active" '
                         u'alt="Must be printed" title="Must be printed"></a>')
 def test_indexation_disabled(self):
     fi = self.createFile('test.pdf')
     gsettings = GlobalSettings(self.portal)
     # indexation is enabled by default, so disable it
     gsettings.enable_indexation = False
     notify(ObjectInitializedEvent(fi))
     # make sure conversion was successfull
     self.failUnless(self._isSuccessfullyConverted(fi))
     annotations = IAnnotations(fi)['collective.documentviewer']
     self.failUnless(annotations['catalog'] is None)
 def test_filesystem_missing_gives_404(self):
     gsettings = GlobalSettings(self.portal)
     _dir = mkdtemp()
     gsettings.storage_location = _dir
     gsettings.storage_type = 'File'
     fi = self.createFile('test.pdf')
     notify(ObjectInitializedEvent(fi))
     uid = fi.UID()
     self.assertRaises(KeyError,
         self.portal.unrestrictedTraverse,
             '@@dvpdffiles/%s/%s/%s/small/foobar.gif' % (
                 uid[0], uid[1], uid))
 def test_cleanup_file_storage_does_not_delete_good_files(self):
     gsettings = GlobalSettings(self.portal)
     _dir = mkdtemp()
     gsettings.storage_location = _dir
     gsettings.storage_type = 'File'
     fi = self.createFile('test.pdf')
     uid = fi.UID()
     fi.reindexObject()
     notify(ObjectInitializedEvent(fi))
     self.assertTrue(exists(join(_dir, uid[0], uid[1], uid)))
     self.portal.unrestrictedTraverse('@@dvcleanup-filestorage')()
     self.assertTrue(exists(join(_dir, uid[0], uid[1], uid)))
Example #20
0
def configure(context):
    """

    """
    if context.readDataFile('ploneintranet.docconv_default.txt') is None:
        return
    log.info("document conversion configuration")

    global_settings = GlobalSettings(getSite())
    global_settings.enable_indexation = False
    global_settings.auto_select_layout = False
    global_settings.auto_layout_file_types = CONVERTABLE_TYPES.keys()
    commit()
    log.info("document conversion configuration: done.")
 def test_filesystem_old_storage_works(self):
     gsettings = GlobalSettings(self.portal)
     _dir = mkdtemp()
     gsettings.storage_location = _dir
     gsettings.storage_type = 'File'
     fi = self.createFile('test.pdf')
     settings = Settings(fi)
     del settings._metadata['storage_version']
     notify(ObjectInitializedEvent(fi))
     uid = fi.UID()
     fi.reindexObject()  # for pc
     fiobj = self.portal.unrestrictedTraverse(
         '@@dvpdffiles/%s/small/dump_1.gif' % uid)
     self.assertEquals(fiobj.context.path,
         join(_dir, uid, 'small', 'dump_1.gif'))
    def test_table_render_when_preview_enabled(self):
        # enable collective.documentviewer so document is convertible
        gsettings = GlobalSettings(self.portal)
        gsettings.auto_layout_file_types = CONVERTABLE_TYPES.keys()
        # initialize collective.documentviewer annotations on file
        file_obj = self.portal['file']
        image_obj = self.portal['image']
        notify(ObjectModifiedEvent(file_obj))
        notify(ObjectModifiedEvent(image_obj))

        view = self.portal.restrictedTraverse('@@iconifiedcategory')
        result = view()
        # by default, images are not handled by collective.documentviewer
        self.assertTrue('<a href="http://nohost/plone/image" ' in result)
        self.assertTrue('<a href="http://nohost/plone/file/documentviewer#document/p1" ' in result)
 def test_storage_obsfucates_dir(self):
     gsettings = GlobalSettings(self.portal)
     _dir = mkdtemp()
     gsettings.storage_location = _dir
     gsettings.storage_type = 'File'
     gsettings.storage_obfuscate = True
     fi = self.createFile('test.pdf')
     uid = fi.UID()
     fi.reindexObject()
     notify(ObjectInitializedEvent(fi))
     settings = Settings(fi)
     self.assertTrue(exists(join(_dir, uid[0], uid[1], uid,
         settings.obfuscate_secret)))
     self.assertTrue(listdir(join(_dir, uid[0], uid[1], uid,
         settings.obfuscate_secret)) > 3)
 def test_blob_new_storage_works(self):
     gsettings = GlobalSettings(self.portal)
     gsettings.storage_type = 'Blob'
     fi = self.createFile('test.pdf')
     notify(ObjectInitializedEvent(fi))
     uid = fi.UID()
     fi.reindexObject()  # for pc
     req = self.request
     files = self.portal.unrestrictedTraverse('@@dvpdffiles')
     files = files.publishTraverse(req, uid[0])
     files = files.publishTraverse(req, uid[1])
     blobtraverser = files.publishTraverse(req, uid)
     blobtraverser = blobtraverser.publishTraverse(req, 'small')
     blobtraverser = blobtraverser.publishTraverse(req, 'dump_1.gif')
     self.assertTrue(isinstance(blobtraverser, BlobFileWrapper))
Example #25
0
    def test_saves_with_file_storage(self):
        fi = self.createFile('test.odp')
        gsettings = GlobalSettings(self.portal)
        gsettings.auto_select_layout = True
        gsettings.auto_layout_file_types = ['ppt']
        gsettings.storage_type = 'File'
        _dir = mkdtemp()
        gsettings.storage_location = _dir
        notify(ObjectInitializedEvent(fi))

        fi_dir = storage.getResourceDirectory(obj=fi)
        self.assertEqual(len(listdir(fi_dir)), 4)
        self.assertEqual(len(listdir(join(fi_dir, 'normal'))), 1)
        self.assertEqual(len(listdir(join(fi_dir, 'small'))), 1)
        self.assertEqual(len(listdir(join(fi_dir, 'large'))), 1)
        self.assertEqual(len(listdir(join(fi_dir, 'text'))), 1)
        shutil.rmtree(fi_dir)
 def test_migrate_old_storage(self):
     gsettings = GlobalSettings(self.portal)
     _dir = mkdtemp()
     gsettings.storage_location = _dir
     gsettings.storage_type = 'File'
     fi = self.createFile('test.pdf')
     settings = Settings(fi)
     del settings._metadata['storage_version']
     fi.reindexObject()
     notify(ObjectInitializedEvent(fi))
     self.assertEquals(settings.storage_version, 1)
     old_path = storage.getResourceDirectory(obj=fi)
     self.assertTrue(exists(old_path))
     from collective.documentviewer.upgrades import migrate_old_storage
     migrate_old_storage(self.portal)
     self.assertTrue(not exists(old_path))
     self.assertEquals(settings.storage_version, STORAGE_VERSION)
     new_path = storage.getResourceDirectory(obj=fi)
     self.assertTrue(exists(new_path))
     self.assertEquals(len(listdir(new_path)), 4)
    def test_is_convertible(self):
        obj = self.portal['file']

        preview_adapter = adapter.CategorizedObjectPreviewAdapter(obj)

        # convertible relies on the fact that contentType is managed
        # by collective.documentviewer gsettings.auto_layout_file_types
        gsettings = GlobalSettings(self.portal)
        self.assertEqual(gsettings.auto_layout_file_types, ['pdf'])

        obj.file.contentType = 'application/pdf'
        self.assertTrue(preview_adapter.is_convertible())

        obj.file.contentType = 'application/rtf'
        self.assertFalse(preview_adapter.is_convertible())

        # right enable every file_types in collective.documentviewer
        gsettings.auto_layout_file_types = CONVERTABLE_TYPES.keys()

        convertables = (
            'application/msword',
            'application/pdf',
            'application/rtf',
            'application/vnd.oasis.opendocument.spreadsheet',
            'application/vnd.oasis.opendocument.text',
            # xlsx
            'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
            'image/png',
            'image/jpeg',
            'text/html',
        )
        for convertable in convertables:
            obj.file.contentType = convertable
            self.assertTrue(preview_adapter.is_convertible())

        not_convertables = ('application/octet-stream',
                            'text/x-python')
        for not_convertable in not_convertables:
            obj.file.contentType = not_convertable
            self.assertFalse(preview_adapter.is_convertible())
    def test_content_category_to_print_only_set_if_convertible_when_conversion_enabled(self):
        """ """
        category_group = self.portal.config['group-1']
        category = self.portal.config['group-1']['category-1-1']
        content_category_id = calculate_category_id(category)
        category_group.to_be_printed_activated = True

        # set to True
        category.to_print = True
        file2 = api.content.create(
            id='file2',
            type='File',
            file=self.file,
            container=self.portal,
            content_category=content_category_id)
        # enable conversion
        gsettings = GlobalSettings(self.portal)
        gsettings.auto_layout_file_types = CONVERTABLE_TYPES.keys()
        file2.file.contentType = 'text/unknown'

        notify(ObjectModifiedEvent(file2))
        self.assertIsNone(file2.to_print)
    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 test_indexation_switch_mode(self):
     '''
       Test that switching the indexation from enabled to disabled
       and the other way round keep the state consistent.
     '''
     fi = self.createFile('test.pdf')
     # indexation is enabled by default
     notify(ObjectInitializedEvent(fi))
     # make sure conversion was successfull
     self.failUnless(self._isSuccessfullyConverted(fi))
     annotations = IAnnotations(fi)['collective.documentviewer']
     # something is catalogued
     self.failUnless(annotations['catalog'] is not None)
     # now disable indexation and convert again
     gsettings = GlobalSettings(self.portal)
     gsettings.enable_indexation = False
     # make it convertable again by adapting last_updated and filehash
     annotations['last_updated'] = DateTime('1901/01/01').ISO8601()
     annotations['filehash'] = 'dummymd5'
     notify(ObjectInitializedEvent(fi))
     # make sure conversion was successfull
     self.failUnless(self._isSuccessfullyConverted(fi))
     # nothing indexed anymore
     self.failIf(annotations['catalog'] is not None)
Example #31
0
def castle(context):
    if not context.readDataFile('castle.cms.install.txt'):
        return
    site = context.getSite()

    # create feed folder
    folder = utils.recursive_create_path(site, '/feeds')
    try:
        if api.content.get_state(obj=folder) != 'published':
            api.content.transition(obj=folder, transition='publish')
    except WorkflowException:
        pass

    type_ = 'Collection'
    aspect = ISelectableConstrainTypes(folder, None)

    if (aspect and (aspect.getConstrainTypesMode() != 1
                    or [type_] != aspect.getImmediatelyAddableTypes())):
        aspect.setConstrainTypesMode(1)
        aspect.setImmediatelyAddableTypes([type_])
    if not getattr(folder, 'exclude_from_nav', False):
        folder.exclude_from_nav = True
        folder.reindexObject()

    if 'front-page' not in site:
        api.content.create(type='Document', id='front-page', container=site)
        site.setDefaultPage('front-page')

    front_page = site['front-page']

    front_page.title = u'Welcome to CastleCMS'
    front_page.description = u'Welcome to your new CastleCMS site.'

    # enable syndication by default and modify some of the settings
    registry = getUtility(IRegistry)
    settings = registry.forInterface(ISiteSyndicationSettings)
    settings.allowed = True
    settings.default_enabled = False
    settings.show_author_info = False
    settings.search_rss_enabled = False

    utils.add_indexes(INDEXES)
    utils.delete_indexes(REMOVE_INDEXES)
    utils.add_metadata(METADATA)
    utils.delete_metadata(REMOVE_METADATA)

    # add some better defaults for documentviewer
    settings = DVGlobalSettings(site)
    settings.auto_layout_file_types = [
        'pdf', 'word', 'excel', 'ppt', 'rft', 'ps', 'photoshop', 'visio',
        'palm'
    ]

    # delete some records for mosaic tinymce toolbar
    for action_type in ('plone_app_z3cform_wysiwyg_widget_WysiwygWidget',
                        'plone_app_z3cform_wysiwyg_widget_WysiwygFieldWidget',
                        'plone_app_widgets_dx_RichTextWidget',
                        'plone_app_z3cform_widget_RichTextFieldWidget'):
        try:
            data = registry['plone.app.mosaic.widget_actions.%s.actions' %
                            action_type]
            _removeTinyMCEActions(data)
            registry['plone.app.mosaic.widget_actions.%s.actions' %
                     action_type] = data
        except KeyError:
            pass

    for key in (
            'plone.app.mosaic.structure_tiles.text.available_actions',
            'plone.app.mosaic.app_tiles.plone_app_standardtiles_rawhtml.available_actions'
    ):
        try:
            data = registry[key]
            _removeTinyMCEActions(data)
            registry[key] = data
        except KeyError:
            pass

    # password reset timeout interval...
    portal_password_reset = api.portal.get_tool('portal_password_reset')
    portal_password_reset.setExpirationTimeout(6)

    # update default session duration
    site.acl_users.session.timeout = 1 * 60 * 15  # 15 min
    site.acl_users.session.refresh_interval = 5 * 60  # 5 minutes
Example #32
0
 def _enableAutoConvert(self, enable=True):
     """Enable collective.documentviewer auto_convert."""
     gsettings = GlobalSettings(self.portal)
     gsettings.auto_convert = enable
     gsettings.auto_layout_file_types = CONVERTABLE_TYPES.keys()
     return gsettings
Example #33
0
parser.add_argument('--commit',
                    dest='commit',
                    type=bool,
                    default=False,
                    help='Some scripts care about site id')
args, _ = parser.parse_known_args()

site_id = args.siteid
site = app[site_id]  # noqa

setSite(site)

user = app.acl_users.getUser('admin')  # noqa
newSecurityManager(None, user.__of__(app.acl_users))  # noqa

gsettings = GlobalSettings(site)

stats = {'keep': 0, 'remove': 0, 'total': 0, 'obfuscated': 0}

obfuscated_paths = {}
obfuscated_uids = []
for brain in site.portal_catalog(portal_type='File'):
    stats['total'] += 1
    obj = brain.getObject()
    settings = Settings(obj)
    if settings.obfuscated_filepath:
        stats['obfuscated'] += 1
        settings.obfuscate_secret
        storage_dir = getResourceDirectory(gsettings=gsettings,
                                           settings=settings)
        secret_dir = os.path.join(storage_dir, settings.obfuscate_secret)
def default_enable_indexation():
    # take the value from the global settings
    from collective.documentviewer.settings import GlobalSettings
    gsettings = GlobalSettings(getSite())
    return gsettings.enable_indexation
def default_show_search():
    # take the value from the global settings
    from collective.documentviewer.settings import GlobalSettings
    gsettings = GlobalSettings(getSite())
    return gsettings.show_search
Example #36
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
                    msg = _("A new conversion to the Document Viewer "
                            "is currently being generated for this document."
                            )
                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('Modify portal content',
                                                self.context)
        if msg and self.can_modify:
            utils.addPortalMessage(_(msg))

        return self.index()