def handle_submit(self, validated): context = self.context request = self.request name = make_unique_name(context, validated['title']) creator = authenticated_userid(request) text = safe_html(validated['description']) topic = create_content(IForumTopic, validated['title'], text, creator, ) if text: topic.description = extract_description(text) else: topic.description = validated['title'] context[name] = topic if request.POST.get('return_to') is not None: location = request.POST['return_to'] return render_template_to_response('templates/javascript_redirect.pt', url=location) else: location = model_url(topic, request) return HTTPFound(location=location)
def move_content_view(context, request): """ Move content from one community to another. Only blog entries supported for now. May or may not eventually expand to other content types. """ api = AdminTemplateAPI(context, request, 'Admin UI: Move Content') filtered_content = [] if 'filter_content' in request.params: # We're limiting ourselves to content that always lives in the same # place in each community, ie /blog, /calendar, /wiki, etc, so that # we can be pretty sure we can figure out where inside the destination # community we should move it to. filtered_content = _get_filtered_content( context, request, [IBlogEntry, IWikiPage, ICalendarEvent]) if not filtered_content: api.error_message = 'No content matches your query.' if 'move_content' in request.params: to_community = request.params.get('to_community', '') if not to_community: api.error_message = 'Please specify destination community.' else: try: paths = request.params.getall('selected_content') dst_community = find_model(context, to_community) for path in paths: obj = find_model(context, path) dst_container = _find_dst_container(obj, dst_community) name = make_unique_name(dst_container, obj.__name__) del obj.__parent__[obj.__name__] dst_container[name] = obj if len(paths) == 1: status_message = 'Moved one content item.' else: status_message = 'Moved %d content items.' % len(paths) redirect_to = model_url( context, request, request.view_name, query=dict(status_message=status_message) ) return HTTPFound(location=redirect_to) except _DstNotFound, error: api.error_message = str(error)
def move_content(root, src, dst, wf_state): try: context = find_model(root, src) except KeyError: print >>sys.stderr, "Source content not found: %s" % src sys.exit(-1) try: dest_folder = find_model(root, dst) except KeyError: print >>sys.stderr, "Destination folder not found: %s" % dst sys.exit(-1) src_community = find_community(context) catalog = find_catalog(root) assert catalog is not None users = find_users(root) assert users is not None if src_community is not None: move_header = ('<p><em>This was originally authored ' 'in the "%s" community.</em></p>' % src_community.title) else: move_header = '' src_folder = context.__parent__ name = context.__name__ log.info("Moving %s", model_path(context)) for obj in postorder(context): if hasattr(obj, 'docid'): docid = obj.docid catalog.document_map.remove_docid(docid) catalog.unindex_doc(docid) del src_folder[name] if (context.creator != 'admin' and users.get_by_id(context.creator) is None): # give the entry to the system admin log.warning( "User %s not found; reassigning to admin", context.creator) context.creator = 'admin' if name in dest_folder: name = make_unique_name(dest_folder, context.title) dest_folder[name] = context for obj in postorder(context): if hasattr(obj, 'docid'): docid = obj.docid catalog.document_map.add(model_path(obj), docid) catalog.index_doc(docid, obj) if wf_state is not None: wf = get_workflow(get_content_type(context), 'security', context) wf.transition_to_state(context, None, wf_state) if hasattr(context, 'text'): context.text = "%s\n%s" % (move_header, context.text)