예제 #1
0
    def test_register_form_with_upref_mdata_with_invalid_preferences(self):
        import pybossa.core
        pybossa.core.upref_mdata_choices = self.upref_mdata_valid_choices

        form_data = dict(languages="somelang",
                         locations="someloc",
                         user_type="someutype",
                         timezone="ZZZ")
        form = UserPrefMetadataForm(MultiDict(form_data))
        form.set_upref_mdata_choices()
        assert not form.validate()
        expected_form_errors = {
            'work_hours_to': [
                'Work Hours From, Work Hours To, and Timezone must be filled out for submission'
            ],
            'locations': [u"'someloc' is not a valid choice for this field"],
            'user_type': [u'Not a valid choice'],
            'languages': [u"'somelang' is not a valid choice for this field"],
            'work_hours_from': [
                'Work Hours From, Work Hours To, and Timezone must be filled out for submission'
            ],
            'timezone': [
                u'Not a valid choice',
                'Work Hours From, Work Hours To, and Timezone must be filled out for submission'
            ]
        }
        assert form.errors == expected_form_errors
예제 #2
0
    def test_register_form_with_upref_mdata_with_invalid_language(self):
        import pybossa.core
        pybossa.core.upref_mdata_choices = self.upref_mdata_valid_choices

        form_data = dict(languages="somelang", locations="uk",
                        user_type="Researcher", timezone="")
        form = UserPrefMetadataForm(MultiDict(form_data))
        form.set_upref_mdata_choices()
        assert not form.validate()
예제 #3
0
파일: account.py 프로젝트: ywrsusan/pybossa
def add_metadata(name):
    """
    Admin can save metadata for selected user.
    Regular user can save their own metadata.

    Redirects to public profile page for selected user.

    """
    user = user_repo.get_by_name(name=name)
    (can_update, disabled_fields) = can_update_user_info(current_user, user)
    if not can_update:
        abort(403)
    form_data = get_form_data(request, user, disabled_fields)
    form = UserPrefMetadataForm(form_data,
                                can_update=(can_update, disabled_fields))
    form.set_upref_mdata_choices()

    if not form.validate():
        if current_user.id == user.id:
            user_dict = cached_users.get_user_summary(user.name)
        else:
            user_dict = cached_users.public_get_user_summary(user.name)
        projects_contributed = cached_users.projects_contributed_cached(
            user.id)
        projects_created = cached_users.published_projects_cached(user.id)
        total_projects_contributed = '{} / {}'.format(
            cached_users.n_projects_contributed(user.id), n_published())
        percentage_tasks_completed = user_dict['n_answers'] * 100 / (
            n_total_tasks() or 1)
        if current_user.is_authenticated and current_user.admin:
            draft_projects = cached_users.draft_projects(user.id)
            projects_created.extend(draft_projects)
        title = "%s · User Profile" % user.name
        flash("Please fix the errors", 'message')
        return render_template(
            '/account/public_profile.html',
            title=title,
            user=user,
            projects=projects_contributed,
            projects_created=projects_created,
            total_projects_contributed=total_projects_contributed,
            percentage_tasks_completed=percentage_tasks_completed,
            form=form,
            input_form=True,
            can_update=can_update,
            upref_mdata_enabled=bool(app_settings.upref_mdata))

    user_pref, metadata = get_user_pref_and_metadata(name, form)
    user.info['metadata'] = metadata
    ensure_data_access_assignment_from_form(user.info, form)
    user.user_pref = user_pref
    user_repo.update(user)
    cached_users.delete_user_pref_metadata(user.name)
    cached_users.delete_user_access_levels_by_id(user.id)
    delete_memoized(get_user_preferences, user.id)
    flash("Input saved successfully", "info")
    return redirect(url_for('account.profile', name=name))
예제 #4
0
 def test_register_form_with_upref_mdata_with_invalid_language(
         self, upref_mdata, get_upref_mdata_choices):
     get_upref_mdata_choices.return_value = self.upref_mdata_valid_choices
     form_data = dict(languages="somelang",
                      locations="uk",
                      user_type="Researcher",
                      timezone="")
     form = UserPrefMetadataForm(MultiDict(form_data))
     form.set_upref_mdata_choices()
     assert not form.validate()
예제 #5
0
    def test_register_form_with_upref_mdata_validates_with_valid_fields(self):
        import pybossa.core
        pybossa.core.upref_mdata_choices = self.upref_mdata_valid_choices

        form_data = dict(languages="en",
                         locations="uk",
                         user_type="Researcher",
                         timezone="")
        form = UserPrefMetadataForm(MultiDict(form_data))
        form.set_upref_mdata_choices()
        assert form.validate()
예제 #6
0
def redirect_profile():
    """Redirect method for profile."""
    if current_user.is_anonymous():  # pragma: no cover
        return redirect_content_type(url_for('.signin'), status='not_signed_in')
    if (request.headers.get('Content-Type') == 'application/json') and current_user.is_authenticated():
        form = None
        if current_app.config.upref_mdata:
            form_data = cached_users.get_user_pref_metadata(current_user.name)
            form = UserPrefMetadataForm(**form_data)
            form.set_upref_mdata_choices()
        return _show_own_profile(current_user, form)
    else:
        return redirect_content_type(url_for('.profile', name=current_user.name))
예제 #7
0
def redirect_profile():
    """Redirect method for profile."""
    if current_user.is_anonymous:  # pragma: no cover
        return redirect_content_type(url_for('.signin'), status='not_signed_in')
    if (request.headers.get('Content-Type') == 'application/json') and current_user.is_authenticated:
        form = None
        if current_app.config.upref_mdata:
            form_data = cached_users.get_user_pref_metadata(current_user.name)
            form = UserPrefMetadataForm(**form_data)
            form.set_upref_mdata_choices()
        return _show_own_profile(current_user, form, current_user)
    else:
        return redirect_content_type(url_for('.profile', name=current_user.name))
예제 #8
0
파일: account.py 프로젝트: jinwg/pybossa
def profile(name):
    """
    Get user profile.

    Returns a Jinja2 template with the user information.

    """
    user = user_repo.get_by_name(name=name)
    if user is None:
        raise abort(404)

    form = None
    if current_app.config.upref_mdata:
        form_data = cached_users.get_user_pref_metadata(user.name)
        form = UserPrefMetadataForm(**form_data)
        form.set_upref_mdata_choices()

    if current_user.is_anonymous() or (user.id != current_user.id):
        return _show_public_profile(user, form)
    if current_user.is_authenticated() and user.id == current_user.id:
        return _show_own_profile(user, form, current_user)
예제 #9
0
def profile(name):
    """
    Get user profile.

    Returns a Jinja2 template with the user information.

    """
    user = user_repo.get_by_name(name=name)
    if user is None:
        raise abort(404)

    form = None
    if current_app.config.upref_mdata:
        form_data = cached_users.get_user_pref_metadata(user.name)
        form = UserPrefMetadataForm(**form_data)
        form.set_upref_mdata_choices()

    if current_user.is_anonymous() or (user.id != current_user.id):
        return _show_public_profile(user, form)
    if current_user.is_authenticated() and user.id == current_user.id:
        return _show_own_profile(user, form)
예제 #10
0
def profile(name):
    """
    Get user profile.

    Returns a Jinja2 template with the user information.

    """
    user = user_repo.get_by_name(name=name)
    if user is None or current_user.is_anonymous:
        raise abort(404)

    form = None
    (can_update, disabled_fields, hidden_fields) = can_update_user_info(current_user, user)
    if app_settings.upref_mdata:
        form_data = cached_users.get_user_pref_metadata(user.name)
        form = UserPrefMetadataForm(can_update=(can_update, disabled_fields, hidden_fields), **form_data)
        form.set_upref_mdata_choices()
    if user.id != current_user.id:
        return _show_public_profile(user, form, can_update)
    else:
        return _show_own_profile(user, form, current_user, can_update)
예제 #11
0
파일: account.py 프로젝트: jinwg/pybossa
def add_metadata(name):
    """
    Admin can save metadata for selected user
    Redirects to public profile page for selected user.
    """
    user = user_repo.get_by_name(name=name)
    form = UserPrefMetadataForm(request.form)
    form.set_upref_mdata_choices()
    if not form.validate():
        if current_user.id == user.id:
            user_dict = cached_users.get_user_summary(user.name)
        else:
            user_dict = cached_users.public_get_user_summary(user.name)
        projects_contributed = cached_users.projects_contributed_cached(
            user.id)
        projects_created = cached_users.published_projects_cached(user.id)
        if current_user.is_authenticated() and current_user.admin:
            draft_projects = cached_users.draft_projects(user.id)
            projects_created.extend(draft_projects)
        title = "%s · User Profile" % user.name
        flash("Please fix the errors", 'message')
        can_update = current_user.admin
        return render_template('/account/public_profile.html',
                               title=title,
                               user=user_dict,
                               projects=projects_contributed,
                               projects_created=projects_created,
                               form=form,
                               can_update=can_update,
                               input_form=True)

    user_pref, metadata = get_user_pref_and_metadata(name, form)
    user.info['metadata'] = metadata
    user.user_pref = user_pref
    user_repo.update(user)
    cached_users.delete_user_pref_metadata(user.name)
    flash("Input saved successfully", "info")
    return redirect(url_for('account.profile', name=name))
예제 #12
0
def add_metadata(name):
    """
    Admin can save metadata for selected user
    Redirects to public profile page for selected user.
    """
    user = user_repo.get_by_name(name=name)
    form = UserPrefMetadataForm(request.form)
    form.set_upref_mdata_choices()
    if not form.validate():
        if current_user.id == user.id:
            user_dict = cached_users.get_user_summary(user.name)
        else:
            user_dict = cached_users.public_get_user_summary(user.name)
        projects_contributed = cached_users.projects_contributed_cached(user.id)
        projects_created = cached_users.published_projects_cached(user.id)
        if current_user.is_authenticated() and current_user.admin:
            draft_projects = cached_users.draft_projects(user.id)
            projects_created.extend(draft_projects)
        title = "%s · User Profile" % user.name
        flash("Please fix the errors", 'message')
        can_update = current_user.admin
        return render_template('/account/public_profile.html',
                               title=title,
                               user=user_dict,
                               projects=projects_contributed,
                               projects_created=projects_created,
                               form=form,
                               can_update=can_update,
                               input_form=True)

    user_pref, metadata = get_user_pref_and_metadata(name, form)
    user.info['metadata'] = metadata
    user.user_pref = user_pref
    user_repo.update(user)
    cached_users.delete_user_pref_metadata(user.name)
    flash("Input saved successfully", "info")
    return redirect(url_for('account.profile', name=name))
예제 #13
0
    def test_register_form_with_upref_mdata_with_invalid_preferences(self):
        import pybossa.core
        pybossa.core.upref_mdata_choices = self.upref_mdata_valid_choices

        form_data = dict(languages="somelang", locations="someloc",
                        user_type="someutype", timezone="ZZZ")
        form = UserPrefMetadataForm(MultiDict(form_data))
        form.set_upref_mdata_choices()
        assert not form.validate()
        expected_form_errors = {
                        'work_hours_to':
                            ['Work Hours From, Work Hours To, and Timezone must be filled out for submission'],
                        'locations':
                            [u"'someloc' is not a valid choice for this field"],
                        'user_type':
                            [u'Not a valid choice'],
                        'languages':
                            [u"'somelang' is not a valid choice for this field"],
                        'work_hours_from':
                            ['Work Hours From, Work Hours To, and Timezone must be filled out for submission'],
                        'timezone':
                            [u'Not a valid choice', 'Work Hours From, Work Hours To, and Timezone must be filled out for submission']
                        }
        assert form.errors == expected_form_errors
예제 #14
0
    def test_register_form_with_upref_mdata_disables_fields_correctly(self):
        form = UserPrefMetadataForm()
        # All fields are enabled by default.
        for field in form:
            assert not form.is_disabled(field)

        disabled = {
            'languages': 'languages is disabled',
            'locations': 'reason is disabled',
            'work_hours_from': 'work_hours_from is disabled',
            'work_hours_to': 'work_hours_to is disabled',
            'timezone': 'timezone is disabled',
            'user_type': 'user_type is disabled'
        }
        enabled = ['review']
        #Disable some fields
        form.set_can_update((True, disabled))
        for field_name, disable_reason in six.iteritems(disabled):
            assert form.is_disabled(getattr(form,
                                            field_name)) == disable_reason
        for field_name in enabled:
            assert not form.is_disabled(getattr(form, field_name))
        #Disable all fields
        form.set_can_update((False, None))
        for field in form:
            assert form.is_disabled(field)
        #Enable all fields
        form.set_can_update((True, None))
        for field in form:
            assert not form.is_disabled(field)