Example #1
0
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(),
    )
Example #2
0
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,
    )