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' })
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
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' })
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
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
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')