def widget_add(project, request): """ Adds a widget given a widget_type to the current form """ session = DBSession() form_id = request.matchdict.get('form_id', None) form = session.query(Form).filter(Form.project_id==project.id).filter(Form.id==form_id).first() widget_type = request.params.get('widget_type', None) widget_model = widget_factory(widget_type) widget = widget_model(form, 'Untitled') session.add(widget) session.flush() widget_controller = widget_controller_factory(widget) return dict( id=widget.id, type=widget_type, widget_html=widget_controller.render(None, request), data=widget_controller.data(), )
def projects_add(request): """ Add a project owned by the current user if a user is not logged in create a temporary user and associate the project with that user """ session = DBSession() title = request.params.get('title','') template_id = request.params.get('template_id', '') item_plural = request.params.get('item_plural','').capitalize() templates = session.query(Project).filter(Project.template==True).all() if request.method == 'POST': if request.user and request.user.projects_remaining() <= 0: # Cannot add a project if you own more than # your plan allows for. return HTTPFound( location=route_url('project:add', request) ) if template_id != 'other': template = session.query(Project).filter(Project.template==True).filter(Project.id==template_id).first() else: template = None if not title: request.session.flash('Oops! Please complete all fields to continue', 'errors') elif template: # Create a new project from a template if not request.user: user = get_temp_user() headers = remember(request, user.id) else: user = request.user headers = None project = Project(title, 'item', 'items') project.add_user(user, 'owner') template.copy_to(project) for widget in template.item_form.widgets: widget_class = widget_factory(widget.widget_type) new_widget = widget_class(project.item_form, 'widget') widget.copy_to(new_widget) for widget in template.feedback_form.widgets: widget_class = widget_factory(widget.widget_type) new_widget = widget_class(project.feedback_form, 'widget') widget.copy_to(new_widget) session.add(project) session.flush() return HTTPFound( location=route_url('project:records', request, project_id=project.id), headers=headers ) elif item_plural: # Create a custom project from an item name item_name = plural_to_singular(item_plural) if not request.user: user = get_temp_user() headers = remember(request, user.id) else: user = request.user headers = None project = Project(title, item_name, item_plural) project.add_user(user, 'owner') documents_field = FileUploadWidget(project.item_form, 'Documents') rate_question = MultipleChoiceWidget(project.feedback_form, 'Rate this %s' % (project.item_name)) rate_question.set_choices(['Very Good', 'Good', 'Average', 'Poor', 'Very Poor']) comments_question = ParagraphTextWidget(project.feedback_form, 'Comments') session.add(project) session.flush() return HTTPFound( location=route_url('project:records', request, project_id=project.id), headers=headers ) return dict( title=title, item_plural=item_plural, templates=templates, )