Esempio n. 1
0
    def create_object_from_template(self):
        if self._check():
            site = getSite()
            template_title = self.request.form.get('selectedType[title]')
            new_id = self.request.form.get('id')
            new_title = self.request.form.get('title')
            path = self.request.form.get('basePath', '/')
            folder = utils.recursive_create_path(self.context, path)
            template_repo = site['template-repository']

            for t in template_repo.getChildNodes()._data:
                if t.title == template_title:
                    obj = api.content.copy(
                        source=t,
                        id=new_id,
                        target=folder
                    )
                    obj.title = new_title
                    noLongerProvides(obj, ITemplate)

            transition_to = self.request.form.get('transitionTo')
            if transition_to:
                try:
                    api.content.transition(obj=obj, transition=transition_to)
                except Exception:
                    pass
            return dump_object_data(obj)
        else:
            return json.dumps({
                'valid': False,
                'status': 'Unknown error creating content'
            })
Esempio n. 2
0
def save_as_template(obj, action):
    site = getSite()
    folder = utils.recursive_create_path(site, '/template-repository')
    folder.exclude_from_nav = True
    if action == 'convert':
        template_obj = api.content.move(source=obj, target=folder)
    elif action == 'copy':
        template_obj = api.content.copy(source=obj, target=folder)

    alsoProvides(template_obj, ITemplate)

    try:
        site.template_list.append(template_obj)
    except AttributeError:
        site.template_list = [template_obj]

    return template_obj
Esempio n. 3
0
 def create(self):
     if self._check():
         path = self.request.form.get('basePath', '/')
         folder = utils.recursive_create_path(self.context, path)
         obj = api.content.create(type=self.get_type_id(),
                                  id=self.request.form['id'],
                                  title=self.request.form['title'],
                                  container=folder)
         transition_to = self.request.form.get('transitionTo')
         if transition_to:
             try:
                 api.content.transition(obj=obj, transition=transition_to)
             except:
                 pass
         return dump_object_data(obj)
     else:
         return json.dumps({
             'valid': False,
             'status': 'Unknown error creating content'
         })
Esempio n. 4
0
    def create_file_content(self, info):
        type_, location = self.get_type_and_location(info)
        original_location = location

        if self.request.form.get('location'):
            location = self.request.form['location']

        original_location == location
        folder = utils.recursive_create_path(self.context, location)

        md5_hash = dup_detector = None

        if original_location == location:
            # first off, check first that it wasn't already uploaded...
            # we are only checking images for now...
            if type_ == 'Image' and commands.md5:
                dup_detector, md5_hash = self.detect_duplicate(info)
            self.handle_auto_folder_creation(folder, type_)

        obj = self.create_object(folder, type_, info)
        if type_ == 'Image' and md5_hash and dup_detector:
            dup_detector.register(obj, md5_hash)
        return obj
Esempio n. 5
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 Castle'
    front_page.description = u'Congratulations! You have successfully installed Castle.'

    # 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 * 60  # 1 hr
    site.acl_users.session.refresh_interval = 5 * 60  # 5 minutes
Esempio n. 6
0
 def test_recursive_create_path(self):
     login(self.portal, TEST_USER_NAME)
     setRoles(self.portal, TEST_USER_ID, ('Member', 'Manager'))
     folder = utils.recursive_create_path(self.portal, '/foo/bar/blah')
     self.assertEqual('/'.join(folder.getPhysicalPath()),
                      '/plone/foo/bar/blah')