Beispiel #1
0
def observed_index():
    props = db(db.user_properties.user == get_user_email()).select().first()
    if props == None:
        l = []
    else:
        l = util.id_list(util.get_list(props.venues_can_observe))
        l1 = util.id_list(util.get_list(props.venues_can_manage))
        for el in l1:
            if el not in l:
                l.append(el)
    if len(l) > 0:
        q = (db.venue.id.belongs(l) & (db.venue.is_approved == True))
    else:
        q = (db.venue.id == -1)
    db.venue.number_of_submissions_per_reviewer.readable = True
    db.venue.grading_instructions.readable = True
    db.venue.is_approved.readable = True
    grid = SQLFORM.grid(
        q,
        field_id=db.venue.id,
        fields=[db.venue.name, db.venue.close_date, db.venue.rate_close_date],
        csv=False,
        details=True,
        create=False,
        editable=False,
        deletable=False,
        maxtextlength=24,
    )
    return dict(grid=grid)
Beispiel #2
0
def observed_index():
    props = db(db.user_properties.user == auth.user.email).select().first()
    if props == None:
        l = []
    else:
        l = util.id_list(util.get_list(props.venues_can_observe))
        l1 = util.id_list(util.get_list(props.venues_can_manage))
        for el in l1:
            if el not in l:
                l.append(el)
    if len(l) > 0:
        q = db.venue.id.belongs(l) & (db.venue.is_approved == True)
    else:
        q = db.venue.id == -1
    db.venue.number_of_submissions_per_reviewer.readable = True
    db.venue.grading_instructions.readable = True
    db.venue.is_approved.readable = True
    grid = SQLFORM.grid(
        q,
        field_id=db.venue.id,
        fields=[db.venue.name, db.venue.close_date, db.venue.rate_close_date],
        csv=False,
        details=True,
        create=False,
        editable=False,
        deletable=False,
    )
    return dict(grid=grid)
Beispiel #3
0
def reviewed_index():
    props = db(db.user_properties.user == auth.user.email).select(db.user_properties.venues_has_rated).first()
    if props == None:
        l = []
    else:
        l = util.id_list(util.get_list(props.venues_has_rated))
    if len(l) > 0:
        q = db.venue.id.belongs(l) & (db.venue.is_approved == True)
    else:
        q = db.venue.id == -1
    db.venue.rate_close_date.readable = True
    db.venue.close_date.readable = True
    db.venue.name.label = T("Venue")
    grid = SQLFORM.grid(
        q,
        field_id=db.venue.id,
        fields=[db.venue.name, db.venue.close_date, db.venue.rate_close_date],
        csv=False,
        details=False,
        create=False,
        editable=False,
        deletable=False,
        links=[
            dict(
                header="Review feedback",
                body=lambda r: A(
                    T("Read feedback"), _class="btn", _href=URL("feedback", "view_feedback", args=["v", r.id])
                ),
            )
        ],
    )
    return dict(grid=grid)
Beispiel #4
0
def submitted_index():
    props = db(db.user_properties.user == auth.user.email).select(db.user_properties.venues_has_submitted).first()
    if props == None:
        l = []
    else:
        l = util.id_list(util.get_list(props.venues_has_submitted))
    if len(l) > 0:
        q = db.venue.id.belongs(l) & (db.venue.is_approved == True)
    else:
        q = db.venue.id == -1
    db.venue.rate_close_date.readable = True
    db.venue.close_date.readable = True
    db.venue.allow_multiple_submissions.readable = False
    db.venue.name.label = T("Venue")
    grid = SQLFORM.grid(
        q,
        field_id=db.venue.id,
        fields=[db.venue.name, db.venue.close_date, db.venue.rate_close_date, db.venue.allow_multiple_submissions],
        csv=False,
        details=False,
        create=False,
        editable=False,
        deletable=False,
        links=[dict(header="Actions", body=submission_feedback_link)],
    )
    return dict(grid=grid)
Beispiel #5
0
def submit():
    # Gets the information on the venue.
    c = db.venue(request.args[0]) or redirect(URL('default', 'index'))
    # Gets information on the user.
    props = db(db.user_properties.email == auth.user.email).select().first()
    if props == None: 
        venue_ids = []
        venues_has_submitted = []
    else:
        venue_ids = util.get_list(props.venues_can_submit)
        venues_has_submitted = util.get_list(props.venues_has_submitted)
    # Is the venue open for submission?
    if not (c.submit_constraint == None or c.id in venue_ids):
	session.flash = T('You cannot submit to this venue.')
        redirect(URL('venues', 'view_venue', args=[c.id]))
    t = datetime.utcnow()
    if not (c.is_active and c.is_approved and c.open_date <= t and c.close_date >= t):
	session.flash = T('The submission deadline has passed; submissions are closed.')
        redirect(URL('venues', 'view_venue', args=[c.id]))
    # Ok, the user can submit.  Looks for previous submissions.
    sub = db((db.submission.author == auth.user_id) & (db.submission.venue_id == c.id)).select().first()
    if sub != None and not c.allow_multiple_submissions:
        session.flash = T('You have already submitted to this venue.')
        redirect(URL('my_submissions_index', args=[c.id]))
    # The author can access the title.
    db.submission.title.readable = db.submission.title.writable = True
    # Check whether link submission is allowed.
    db.submission.link.readable = db.submission.link.writable = c.allow_link_submission
    db.submission.n_completed_reviews.readable = False
    db.submission.n_rejected_reviews.readable = False
    db.submission.feedback.readable = db.submission.feedback.writable = False
    # Produces an identifier for the submission.
    db.submission.identifier.default = util.get_random_id()
    db.submission.email.default = auth.user.email
    # Assigns default quality to the submission.
    avg, stdev = ranker.get_init_average_stdev()
    db.submission.quality.default = avg
    db.submission.error.default = stdev
    # No percentile readable.
    db.submission.percentile.readable = False
    # TODO(luca): check that it is fine to do the download link without parameters.
    form = SQLFORM(db.submission, upload=URL('download_auhor', args=[None]))
    form.vars.venue_id = c.id
    if request.vars.content != None and request.vars.content != '':
        form.vars.original_filename = request.vars.content.filename
    if form.process().accepted:
        # Adds the venue to the list of venues where the user submitted.
        # TODO(luca): Enable users to delete submissions.  But this is complicated; we need to 
        # delete also their quality information etc.  For the moment, no deletion.
        submitted_ids = util.id_list(venues_has_submitted)
        submitted_ids = util.list_append_unique(submitted_ids, c.id)
        if props == None:
	    db.user_properties.insert(email = auth.user.email,
				      venues_has_submitted = submitted_ids)
        else:
            props.update_record(venues_has_submitted = submitted_ids)
        db.commit()
        session.flash = T('Your submission has been accepted.')
        redirect(URL('feedback', 'index', args=['all']))
    return dict(form=form, venue=c)
Beispiel #6
0
def submitted_index():
    props = db(db.user_properties.email == auth.user.email).select(db.user_properties.venues_has_submitted).first()
    if props == None: 
        l = []
    else:
        l = util.id_list(util.get_list(props.venues_has_submitted))
    if len(l) > 0:
	q = (db.venue.id.belongs(l))
    else:
	q = (db.venue.id == -1)
    db.venue.feedback_accessible_immediately.readable = False
    db.venue.rate_open_date.readable = False
    db.venue.rate_close_date.readable = False
    db.venue.name.readable = False
    grid = SQLFORM.grid(q,
        field_id=db.venue.id,
        fields=[db.venue.name, db.venue.rate_open_date, db.venue.rate_close_date, db.venue.feedback_accessible_immediately],
        csv=False, details=False, create=False, editable=False, deletable=False,
        links=[
	    dict(header=T('Venue'),
		 body = lambda r: A(r.name, _href=URL('view_venue', args=[r.id]))),
	    dict(header='Feedback', body = lambda r: link_feedback(r)),
            dict(header='My submissions', body = lambda r: 
                A(T('My submissions'),
		  _class='btn',
		  _href=URL('submission', 'my_submissions_index', args=[r.id]))),
            ],
        )
    return dict(grid=grid)
Beispiel #7
0
def submitted_index():
    props = db(db.user_properties.user == auth.user.email).select(db.user_properties.venues_has_submitted).first()
    if props == None: 
        l = []
    else:
        l = util.id_list(util.get_list(props.venues_has_submitted))
    if len(l) > 0:
	q = (db.venue.id.belongs(l))
    else:
	q = (db.venue.id == -1)
    db.venue.feedback_accessible_immediately.readable = False
    db.venue.rate_open_date.readable = False
    db.venue.rate_close_date.readable = False
    grid = SQLFORM.grid(q,
        field_id=db.venue.id,
        fields=[db.venue.name, db.venue.rate_open_date, db.venue.rate_close_date, db.venue.feedback_accessible_immediately],
        csv=False, details=False, create=False, editable=False, deletable=False,
        links=[
	    dict(header='Feedback', body = lambda r: link_feedback(r)),
            dict(header='My submissions', body = lambda r: 
                A(T('My submissions'),
		  _class='btn',
		  _href=URL('feedback', 'index', args=[r.id]))),
            ],
        )
    return dict(grid=grid)
Beispiel #8
0
def observed_index():
    props = db(db.user_properties.user == auth.user.email).select().first()    
    if props == None: 
        l = []
    else:
        l = util.id_list(util.get_list(props.venues_can_observe))
        l1 = util.id_list(util.get_list(props.venues_can_manage))
	for el in l1:
	    if el not in l:
		l.append(l)
    if len(l) > 0:
	q = (db.venue.id.belongs(l))
    else:
	q = (db.venue.id == -1)
    grid = SQLFORM.grid(q,
        field_id=db.venue.id,
        fields=[db.venue.name, db.venue.close_date, db.venue.rate_close_date],
        csv=False, details=False, create=False, editable=False, deletable=False,
        )
    return dict(grid=grid)
Beispiel #9
0
def manager_submit():
    """This function is used by venue managers to do submissions on behalf of others.  It can be used
    even when the submission deadline is past."""
    # Gets the information on the venue.
    c = db.venue(request.args[0]) or redirect(URL('default', 'index'))
    # Checks that the user is a manager for the venue.
    manager_props = db(db.user_properties.email == auth.user.email).select().first()
    can_manage = c.id in util.get_list(manager_props.venues_can_manage)
    if not can_manage:
	session.flash = T('Not authorized!')
	redirect(URL('default', 'index'))
    # Prepares the submission.
    db.submission.email.writable = db.submission.email.readable = True
    db.submission.author.readable = db.submission.author.writable = False
    db.submission.feedback.readable = db.submission.feedback.writable = False
    db.submission.email.label = T('Author')
    # Assigns default quality to the submission.
    avg, stdev = ranker.get_init_average_stdev()
    db.submission.quality.default = avg
    db.submission.error.default = stdev
    # Produces an identifier for the submission.
    db.submission.identifier.default = util.get_random_id()
    form = SQLFORM(db.submission, upload=URL('download_manager', args=[None]))
    form.vars.venue_id = c.id
    if request.vars.content != None and request.vars.content != '':
        form.vars.original_filename = request.vars.content.filename
    if form.process(onvalidation=manager_submit_validation).accepted:
	# Fixes the author field of the submission.
	db(db.submission.id == form.vars.id).update(author=form.vars.author)
        # Adds the venue to the list of venues where the user submitted.
        # TODO(luca): Enable users to delete submissions.  But this is complicated; we need to 
        # delete also their quality information etc.  For the moment, no deletion.
	props = db(db.user_properties.email == form.vars.email).select().first()
	if props == None: 
	    venues_has_submitted = []
	else:
	    venues_has_submitted = util.get_list(props.venues_has_submitted)
        submitted_ids = util.id_list(venues_has_submitted)
        submitted_ids = util.list_append_unique(submitted_ids, c.id)
        if props == None:
            db(db.user_properties.email == form.vars.email).update(venues_has_submitted = submitted_ids)
        else:
            props.update_record(venues_has_submitted = submitted_ids)
        db.commit()
        session.flash = T('The submission has been accepted.')
        redirect(URL('ranking', 'view_venue', args=[c.id]))
    return dict(form=form, venue=c)
Beispiel #10
0
def observed_index():
    props = db(db.user_properties.email == auth.user.email).select(db.user_properties.venues_can_observe).first()
    if props == None: 
        l = []
    else:
        l = util.id_list(util.get_list(props.venues_can_observe))
    if len(l) > 0:
	q = (db.venue.id.belongs(l))
    else:
	q = (db.venue.id == -1)
    db.venue.name.readable = False
    grid = SQLFORM.grid(q,
        field_id=db.venue.id,
        fields=[db.venue.name, db.venue.close_date, db.venue.rate_close_date],
        csv=False, details=False, create=False, editable=False, deletable=False,
        links=[
	    dict(header=T('Venue'),
		 body = lambda r: A(r.name, _href=URL('view_venue', args=[r.id]))),
            ],
        )
    return dict(grid=grid)
Beispiel #11
0
def submit():
    # Gets the information on the venue.
    c = db.venue(request.args(0)) or redirect(URL('default', 'index'))
    # Gets information on the user.
    props = db(db.user_properties.user == auth.user.email).select().first()
    if props == None:
        venue_ids = []
        venues_has_submitted = []
    else:
        venue_ids = util.get_list(props.venues_can_submit)
        venues_has_submitted = util.get_list(props.venues_has_submitted)
    # Is the venue open for submission?
    if not (c.submit_constraint == None or c.id in venue_ids):
        session.flash = T('You cannot submit to this venue.')
        redirect(URL('venues', 'view_venue', args=[c.id]))
    t = datetime.utcnow()
    if not (c.is_active and c.is_approved and c.open_date <= t
            and c.close_date >= t):
        session.flash = T(
            'The submission deadline has passed; submissions are closed.')
        redirect(URL('venues', 'view_venue', args=[c.id]))
    # Ok, the user can submit.  Looks for previous submissions.
    sub = db((db.submission.user == auth.user.email)
             & (db.submission.venue_id == c.id)).select().first()
    if sub != None and not c.allow_multiple_submissions:
        session.flash = T('You have already submitted to this venue.')
        redirect(URL('venues', 'view_venue', args=[c.id]))
    # The author can access the title.
    db.submission.title.readable = db.submission.title.writable = True
    # Check whether link submission is allowed.
    db.submission.link.readable = db.submission.link.writable = c.allow_link_submission
    db.submission.n_completed_reviews.readable = False
    db.submission.n_rejected_reviews.readable = False
    db.submission.feedback.readable = db.submission.feedback.writable = False
    db.submission.date_updated.readable = False
    # Produces an identifier for the submission.
    db.submission.identifier.default = util.get_random_id()
    db.submission.user.default = auth.user.email
    # Assigns default quality to the submission.
    avg, stdev = ranker.get_init_average_stdev()
    db.submission.quality.default = avg
    db.submission.error.default = stdev
    # No percentile readable.
    db.submission.percentile.readable = False
    # TODO(luca): check that it is fine to do the download link without parameters.
    form = SQLFORM(db.submission, upload=URL('download_auhor', args=[None]))
    form.vars.venue_id = c.id
    if request.vars.content != None and request.vars.content != '':
        form.vars.original_filename = request.vars.content.filename
    if form.process().accepted:
        # Adds the venue to the list of venues where the user submitted.
        # TODO(luca): Enable users to delete submissions.  But this is complicated; we need to
        # delete also their quality information etc.  For the moment, no deletion.
        submitted_ids = util.id_list(venues_has_submitted)
        submitted_ids = util.list_append_unique(submitted_ids, c.id)
        if props == None:
            db.user_properties.insert(user=auth.user.email,
                                      venues_has_submitted=submitted_ids)
        else:
            props.update_record(venues_has_submitted=submitted_ids)
        db.commit()
        session.flash = T('Your submission has been accepted.')
        redirect(URL('feedback', 'index', args=['all']))
    return dict(form=form, venue=c)
Beispiel #12
0
def manager_submit():
    """This function is used by venue managers to do submissions on behalf of others.  It can be used
    even when the submission deadline is past."""
    # Gets the information on the venue.
    c = db.venue(request.args(0)) or redirect(URL('default', 'index'))
    # Checks that the user is a manager for the venue.
    manager_props = db(db.user_properties.user == auth.user.email).select().first()
    can_manage = c.id in util.get_list(manager_props.venues_can_manage)
    if not can_manage:
	session.flash = T('Not authorized!')
	redirect(URL('default', 'index'))
    # Prepares the submission.
    db.submission.user.readable = db.submission.user.writable = True
    db.submission.user.default = ''
    db.submission.feedback.readable = db.submission.feedback.writable = False
    # Assigns default quality to the submission.
    avg, stdev = ranker.get_init_average_stdev()
    db.submission.quality.default = avg
    db.submission.error.default = stdev
    # Produces an identifier for the submission.
    db.submission.identifier.default = util.get_random_id()

    # Prepares the submission form.
    form = SQLFORM(db.submission, upload=URL('download_manager', args=[None]))
    form.vars.venue_id = c.id
    if request.vars.content != None and request.vars.content != '':
        form.vars.original_filename = request.vars.content.filename
    if form.process().accepted:
        # Adds the venue to the list of venues where the user submitted.
	props = db(db.user_properties.user == form.vars.email).select().first()
	if props == None: 
	    venues_has_submitted = []
	else:
	    venues_has_submitted = util.get_list(props.venues_has_submitted)
        submitted_ids = util.id_list(venues_has_submitted)
        submitted_ids = util.list_append_unique(submitted_ids, c.id)
        if props == None:
            db(db.user_properties.user == form.vars.user).update(venues_has_submitted = submitted_ids)
        else:
            props.update_record(venues_has_submitted = submitted_ids)

	# If there is a prior submission of the same author to this venue, replaces the content.
	is_there_another = False
	other_subms = db(db.submission.user == form.vars.user).select()
	for other_subm in other_subms:
	    if other_subm.id != form.vars.id:
		is_there_another = True
		other_subm.update_record(
		    date_updated = datetime.utcnow(),
		    title = form.vars.title,
		    original_filename = form.vars.original_filename,
		    content = new_content,
		    link = form.vars.link,
		    comment = form.vars.comment,
		    )
	# And deletes this submission.
	if is_there_another:
	    db(db.submission.id == form.vars.id).delete()
	    session.flash = T('The previous submission by the same author has been updated.')
	else:
	    session.flash = T('The submission has been added.')
        db.commit()
	redirect(URL('ranking', 'view_venue', args=[c.id]))
    return dict(form=form, venue=c)
Beispiel #13
0
def manager_submit():
    """This function is used by venue managers to do submissions on behalf of others.  It can be used
    even when the submission deadline is past."""
    # Gets the information on the venue.
    c = db.venue(request.args(0)) or redirect(URL('default', 'index'))
    # Checks that the user is a manager for the venue.
    manager_props = db(db.user_properties.user == get_user_email()).select().first()
    if not access.can_manage(c, manager_props):
        session.flash = T('Not authorized!')
        redirect(URL('default', 'index'))
    # Prepares the submission.
    db.submission.user.readable = db.submission.user.writable = True
    db.submission.user.default = ''
    db.submission.feedback.readable = db.submission.feedback.writable = False
    # Assigns default quality to the submission.
    avg, stdev = ranker.get_init_average_stdev()
    db.submission.quality.default = avg
    db.submission.error.default = stdev
    db.submission.percentile.readable = False
    db.submission.n_assigned_reviews.readable = False
    db.submission.n_completed_reviews.readable = False
    db.submission.n_rejected_reviews.readable = False
    # Check whether link submission is allowed.
    db.submission.link.readable = db.submission.link.writable = c.allow_link_submission
    # Check whether attachment submission is allowed.
    db.submission.content.readable = db.submission.content.writable = c.allow_file_upload

    # Prepares the submission form.
    form = SQLFORM(db.submission, upload=URL('download_manager', args=[None]))
    form.vars.venue_id = c.id
    form.vars.date_updated = datetime.utcnow()
    if request.vars.content != None and request.vars.content != '':
        form.vars.original_filename = request.vars.content.filename
    if form.process(onvalidation=write_comment_to_keystore).accepted:
        # Adds the venue to the list of venues where the user submitted.
        props = db(db.user_properties.user == form.vars.email).select().first()
        if props == None: 
            venues_has_submitted = []
        else:
            venues_has_submitted = util.get_list(props.venues_has_submitted)
        submitted_ids = util.id_list(venues_has_submitted)
        submitted_ids = util.list_append_unique(submitted_ids, c.id)
        if props == None:
            db(db.user_properties.user == form.vars.user).update(venues_has_submitted=submitted_ids)
        else:
            props.update_record(venues_has_submitted=submitted_ids)

        # If there is a prior submission of the same author to this venue, replaces the content.
        is_there_another = False
        other_subms = db((db.submission.user == form.vars.user) & 
                         (db.submission.venue_id == c.id)).select()
        for other_subm in other_subms:
            if other_subm.id != form.vars.id:
                is_there_another = True
                keystore_delete(other_subm.comment)
                other_subm.update_record(
                    date_updated = datetime.utcnow(),
                    original_filename = form.vars.original_filename,
                    content = form.vars.content,
                    link = form.vars.link,
                    comment = form.vars.comment,
                    n_assigned_reviews = 0,
                    n_completed_reviews = 0,
                    n_rejected_reviews = 0,
                    )
        # And deletes this submission.
        if is_there_another:
            db(db.submission.id == form.vars.id).delete()
            session.flash = T('The previous submission by the same author has been updated.')
        else:
            session.flash = T('The submission has been added.')
        db.commit()
        redirect(URL('ranking', 'view_submissions', args=[c.id]))
    instructions = keystore_read(c.submission_instructions, default='')
    if instructions == '':
        instructions = None
    else:
        instructions = MARKMIN(instructions)
    return dict(form=form, venue=c, instructions=instructions)
Beispiel #14
0
def submit():
    # Gets the information on the venue.
    c = db.venue(request.args(0)) or redirect(URL('default', 'index'))
    # Gets information on the user.
    props = db(db.user_properties.user == get_user_email()).select().first()
    if props == None: 
        venue_ids = []
        venues_has_submitted = []
    else:
        venue_ids = util.get_list(props.venues_can_submit)
        venues_has_submitted = util.get_list(props.venues_has_submitted)
    # Is the venue open for submission?
    if not access.can_submit(c, props):
        session.flash = T('Not authorized.')
        redirect(URL('default', 'index'))
    t = datetime.utcnow()
    if c.open_date > t:
        session.flash = T('Submissions are not open yet.')
        redirect(URL('venues', 'subopen_index'))
    if c.close_date < t:
        session.flash = T('The submission deadline has passed; submissions are closed.')
        redirect(URL('venues', 'subopen_index'))
        
    # Ok, the user can submit.  Looks for previous submissions.
    sub = db((db.submission.venue_id == c.id) & (db.submission.user == get_user_email())).select().first()
    if sub != None and not c.allow_multiple_submissions:
        session.flash = T('Update your existing submission')
        redirect(URL('submission', 'view_own_submission', args=['v', sub.id]))
    # Check whether link submission is allowed.
    db.submission.link.readable = db.submission.link.writable = c.allow_link_submission
    # Check whether attachment submission is allowed.
    db.submission.content.readable = db.submission.content.writable = c.allow_file_upload
    db.submission.n_completed_reviews.readable = False
    db.submission.n_rejected_reviews.readable = False
    db.submission.feedback.readable = db.submission.feedback.writable = False
    db.submission.date_updated.readable = False
    db.submission.date_created.readable = False
    db.submission.user.default = get_user_email()
    # Assigns default quality to the submission.
    avg, stdev = ranker.get_init_average_stdev()
    db.submission.quality.default = avg
    db.submission.error.default = stdev
    # No percentile readable.
    db.submission.percentile.readable = False
    # TODO(luca): check that it is fine to do the download link without parameters.
    form = SQLFORM(db.submission, upload=URL('download_auhor', args=[None]))
    form.vars.venue_id = c.id
    form.vars.date_updated = datetime.utcnow()
    if request.vars.content != None and request.vars.content != '':
        form.vars.original_filename = request.vars.content.filename
    if form.process(onvalidation=write_comment_to_keystore).accepted:
        # Adds the venue to the list of venues where the user submitted.
        # TODO(luca): Enable users to delete submissions.  But this is complicated; we need to 
        # delete also their quality information etc.  For the moment, no deletion.
        submitted_ids = util.id_list(venues_has_submitted)
        submitted_ids = util.list_append_unique(submitted_ids, c.id)
        if props == None:
            db.user_properties.insert(user=get_user_email(),
                                      venues_has_submitted=submitted_ids)
        else:
            props.update_record(venues_has_submitted=submitted_ids)
        db.commit()
        session.flash = T('Your submission has been accepted.')
        # We send the user to review their own submission, for completeness.
        redirect(URL('submission', 'view_own_submission', args=['v', form.vars.id]))
    instructions = keystore_read(c.submission_instructions, default='')
    if instructions == '':
        instructions = None
    else:
        instructions = MARKMIN(instructions)
    return dict(form=form, venue=c, instructions=instructions)
Beispiel #15
0
def submit():
    # Gets the information on the venue.
    c = db.venue(request.args(0)) or redirect(URL('default', 'index'))
    # Gets information on the user.
    props = db(db.user_properties.user == get_user_email()).select().first()
    if props == None:
        venue_ids = []
        venues_has_submitted = []
    else:
        venue_ids = util.get_list(props.venues_can_submit)
        venues_has_submitted = util.get_list(props.venues_has_submitted)
    # Is the venue open for submission?
    if not access.can_submit(c, props):
        session.flash = T('Not authorized.')
        redirect(URL('default', 'index'))
    t = datetime.utcnow()
    if c.open_date > t:
        session.flash = T('Submissions are not open yet.')
        redirect(URL('venues', 'subopen_index'))
    if c.close_date < t:
        session.flash = T(
            'The submission deadline has passed; submissions are closed.')
        redirect(URL('venues', 'subopen_index'))

    # Ok, the user can submit.  Looks for previous submissions.
    sub = db((db.submission.venue_id == c.id)
             & (db.submission.user == get_user_email())).select().first()
    if sub != None and not c.allow_multiple_submissions:
        session.flash = T('Update your existing submission')
        redirect(URL('submission', 'view_own_submission', args=['v', sub.id]))
    # Check whether link submission is allowed.
    db.submission.link.readable = db.submission.link.writable = c.allow_link_submission
    # Check whether attachment submission is allowed.
    db.submission.content.readable = db.submission.content.writable = c.allow_file_upload
    db.submission.n_completed_reviews.readable = False
    db.submission.n_rejected_reviews.readable = False
    db.submission.feedback.readable = db.submission.feedback.writable = False
    db.submission.date_updated.readable = False
    db.submission.date_created.readable = False
    db.submission.user.default = get_user_email()
    # Assigns default quality to the submission.
    avg, stdev = ranker.get_init_average_stdev()
    db.submission.quality.default = avg
    db.submission.error.default = stdev
    # No percentile readable.
    db.submission.percentile.readable = False
    # TODO(luca): check that it is fine to do the download link without parameters.
    form = SQLFORM(db.submission, upload=URL('download_auhor', args=[None]))
    form.vars.venue_id = c.id
    form.vars.date_updated = datetime.utcnow()
    if request.vars.content != None and request.vars.content != '':
        form.vars.original_filename = request.vars.content.filename
    if form.process(onvalidation=write_comment_to_keystore).accepted:
        # Adds the venue to the list of venues where the user submitted.
        # TODO(luca): Enable users to delete submissions.  But this is complicated; we need to
        # delete also their quality information etc.  For the moment, no deletion.
        submitted_ids = util.id_list(venues_has_submitted)
        submitted_ids = util.list_append_unique(submitted_ids, c.id)
        if props == None:
            db.user_properties.insert(user=get_user_email(),
                                      venues_has_submitted=submitted_ids)
        else:
            props.update_record(venues_has_submitted=submitted_ids)
        db.commit()
        session.flash = T('Your submission has been accepted.')
        # We send the user to review their own submission, for completeness.
        redirect(
            URL('submission', 'view_own_submission', args=['v', form.vars.id]))
    instructions = keystore_read(c.submission_instructions, default='')
    if instructions == '':
        instructions = None
    else:
        instructions = MARKMIN(instructions)
    return dict(form=form, venue=c, instructions=instructions)
Beispiel #16
0
def manager_submit():
    """This function is used by venue managers to do submissions on behalf of others.  It can be used
    even when the submission deadline is past."""
    # Gets the information on the venue.
    c = db.venue(request.args(0)) or redirect(URL('default', 'index'))
    # Checks that the user is a manager for the venue.
    manager_props = db(
        db.user_properties.user == get_user_email()).select().first()
    if not access.can_manage(c, manager_props):
        session.flash = T('Not authorized!')
        redirect(URL('default', 'index'))
    # Prepares the submission.
    db.submission.user.readable = db.submission.user.writable = True
    db.submission.user.default = ''
    db.submission.feedback.readable = db.submission.feedback.writable = False
    # Assigns default quality to the submission.
    avg, stdev = ranker.get_init_average_stdev()
    db.submission.quality.default = avg
    db.submission.error.default = stdev
    db.submission.percentile.readable = False
    db.submission.n_assigned_reviews.readable = False
    db.submission.n_completed_reviews.readable = False
    db.submission.n_rejected_reviews.readable = False
    # Check whether link submission is allowed.
    db.submission.link.readable = db.submission.link.writable = c.allow_link_submission
    # Check whether attachment submission is allowed.
    db.submission.content.readable = db.submission.content.writable = c.allow_file_upload

    # Prepares the submission form.
    form = SQLFORM(db.submission, upload=URL('download_manager', args=[None]))
    form.vars.venue_id = c.id
    form.vars.date_updated = datetime.utcnow()
    if request.vars.content != None and request.vars.content != '':
        form.vars.original_filename = request.vars.content.filename
    if form.process(onvalidation=write_comment_to_keystore).accepted:
        # Adds the venue to the list of venues where the user submitted.
        props = db(db.user_properties.user == form.vars.email).select().first()
        if props == None:
            venues_has_submitted = []
        else:
            venues_has_submitted = util.get_list(props.venues_has_submitted)
        submitted_ids = util.id_list(venues_has_submitted)
        submitted_ids = util.list_append_unique(submitted_ids, c.id)
        if props == None:
            db(db.user_properties.user == form.vars.user).update(
                venues_has_submitted=submitted_ids)
        else:
            props.update_record(venues_has_submitted=submitted_ids)

        # If there is a prior submission of the same author to this venue, replaces the content.
        is_there_another = False
        other_subms = db((db.submission.user == form.vars.user)
                         & (db.submission.venue_id == c.id)).select()
        for other_subm in other_subms:
            if other_subm.id != form.vars.id:
                is_there_another = True
                keystore_delete(other_subm.comment)
                other_subm.update_record(
                    date_updated=datetime.utcnow(),
                    original_filename=form.vars.original_filename,
                    content=form.vars.content,
                    link=form.vars.link,
                    comment=form.vars.comment,
                    n_assigned_reviews=0,
                    n_completed_reviews=0,
                    n_rejected_reviews=0,
                )
        # And deletes this submission.
        if is_there_another:
            db(db.submission.id == form.vars.id).delete()
            session.flash = T(
                'The previous submission by the same author has been updated.')
        else:
            session.flash = T('The submission has been added.')
        db.commit()
        redirect(URL('ranking', 'view_submissions', args=[c.id]))
    instructions = keystore_read(c.submission_instructions, default='')
    if instructions == '':
        instructions = None
    else:
        instructions = MARKMIN(instructions)
    return dict(form=form, venue=c, instructions=instructions)
Beispiel #17
0
def manager_submit():
    """This function is used by venue managers to do submissions on behalf of others.  It can be used
    even when the submission deadline is past."""
    # Gets the information on the venue.
    c = db.venue(request.args(0)) or redirect(URL('default', 'index'))
    # Checks that the user is a manager for the venue.
    manager_props = db(
        db.user_properties.user == auth.user.email).select().first()
    can_manage = c.id in util.get_list(manager_props.venues_can_manage)
    if not can_manage:
        session.flash = T('Not authorized!')
        redirect(URL('default', 'index'))
    # Prepares the submission.
    db.submission.user.readable = db.submission.user.writable = True
    db.submission.user.default = ''
    db.submission.feedback.readable = db.submission.feedback.writable = False
    # Assigns default quality to the submission.
    avg, stdev = ranker.get_init_average_stdev()
    db.submission.quality.default = avg
    db.submission.error.default = stdev
    # Produces an identifier for the submission.
    db.submission.identifier.default = util.get_random_id()

    # Prepares the submission form.
    form = SQLFORM(db.submission, upload=URL('download_manager', args=[None]))
    form.vars.venue_id = c.id
    if request.vars.content != None and request.vars.content != '':
        form.vars.original_filename = request.vars.content.filename
    if form.process().accepted:
        # Adds the venue to the list of venues where the user submitted.
        props = db(db.user_properties.user == form.vars.email).select().first()
        if props == None:
            venues_has_submitted = []
        else:
            venues_has_submitted = util.get_list(props.venues_has_submitted)
        submitted_ids = util.id_list(venues_has_submitted)
        submitted_ids = util.list_append_unique(submitted_ids, c.id)
        if props == None:
            db(db.user_properties.user == form.vars.user).update(
                venues_has_submitted=submitted_ids)
        else:
            props.update_record(venues_has_submitted=submitted_ids)

        # If there is a prior submission of the same author to this venue, replaces the content.
        is_there_another = False
        other_subms = db(db.submission.user == form.vars.user).select()
        for other_subm in other_subms:
            if other_subm.id != form.vars.id:
                is_there_another = True
                other_subm.update_record(
                    date_updated=datetime.utcnow(),
                    title=form.vars.title,
                    original_filename=form.vars.original_filename,
                    content=new_content,
                    link=form.vars.link,
                    comment=form.vars.comment,
                )
        # And deletes this submission.
        if is_there_another:
            db(db.submission.id == form.vars.id).delete()
            session.flash = T(
                'The previous submission by the same author has been updated.')
        else:
            session.flash = T('The submission has been added.')
        db.commit()
        redirect(URL('ranking', 'view_venue', args=[c.id]))
    return dict(form=form, venue=c)