Example #1
0
def project_action(project_id,
                   of_type=None,
                   as_view=True,
                   then_redirect=False,
                   action=None,
                   text=None,
                   resource=None):
    project = Project.query.filter_by(id=project_id).first_or_404()
    event = project.event
    if of_type is not None:
        ProjectActivity(project, of_type, current_user, action, text, resource)
    if not as_view:
        return True
    if then_redirect:
        return redirect(url_for('public.project', project_id=project.id))
    starred = IsProjectStarred(project, current_user)
    allow_edit = starred or (not current_user.is_anonymous
                             and current_user.is_admin)
    allow_edit = allow_edit and not event.lock_editing
    project_team = project.team()
    latest_activity = project.latest_activity()
    project_signals = project.all_signals()
    suggestions = SuggestionsByProgress(project.progress)
    return render_template('public/project.html',
                           current_event=event,
                           project=project,
                           project_starred=starred,
                           project_team=project_team,
                           project_signals=project_signals,
                           suggestions=suggestions,
                           allow_edit=allow_edit,
                           latest_activity=latest_activity)
Example #2
0
    def test_user_schema(self, project, testapp):
        """Test user schema."""

        event = Event(name="Test Event", summary="Just testin")
        event.save()
        user = UserFactory(username="******")
        user.save()

        # Generate importable schema for local host
        hosturl = "https://localhost"

        # Initially just a warning message
        schema = get_schema_for_user_projects(user, hosturl)
        assert 'message' in schema

        # Join a project
        proj1 = Project(name="Test Project")
        proj1.event = event
        proj1.user = user
        proj1.save()
        ProjectActivity(proj1, "star", user)

        # Now we are a member of one project
        schema = get_schema_for_user_projects(user, hosturl)
        assert len(schema) == 1
        assert len(schema[0]["workPerformed"]) == 1

        # Create another project
        proj2 = Project(name="Another Project")
        proj2.event = event
        proj2.user = user
        proj2.save()
        ProjectActivity(proj2, "star", user)

        # Now we are a member of two projects
        schema = get_schema_for_user_projects(user, hosturl)
        assert len(schema[0]["workPerformed"]) == 2

        # Clean up
        proj1.delete()
        proj2.delete()
        event.delete()
        user.delete()
Example #3
0
 def test_project_roles(self, db):
     """Test role factory."""
     project = ProjectFactory()
     project.save()
     role1 = Role(name='a role')
     role1.save()
     role2 = Role(name='another role')
     role2.save()
     user = UserFactory()
     user.roles.append(role1)
     user.save()
     ProjectActivity(project, 'star', user)
     assert role2 in project.get_missing_roles()
Example #4
0
def project_action(project_id, of_type):
    project = Project.query.filter_by(id=project_id).first_or_404()
    event = project.event
    if of_type is not None:
        ProjectActivity(project, of_type, current_user)
    starred = IsProjectStarred(project, current_user)
    allow_edit = starred or (not current_user.is_anonymous
                             and current_user.is_admin)
    project_stars = GetProjectTeam(project)
    return render_template('public/project.html',
                           current_event=event,
                           project=project,
                           project_starred=starred,
                           project_stars=project_stars,
                           allow_edit=allow_edit)
def project_action(project_id, of_type, as_view=True, then_redirect=False):
    project = Project.query.filter_by(id=project_id).first_or_404()
    event = project.event
    if of_type is not None:
        ProjectActivity(project, of_type, current_user)
    if not as_view:
        return True
    starred = IsProjectStarred(project, current_user)
    allow_edit = starred or (not current_user.is_anonymous
                             and current_user.is_admin)
    allow_edit = allow_edit and not event.lock_editing
    project_stars = GetProjectTeam(project)
    latest_activity = project.latest_activity()
    if then_redirect:
        return redirect(url_for('public.project', project_id=project.id))
    return render_template('public/project.html',
                           current_event=event,
                           project=project,
                           project_starred=starred,
                           project_stars=project_stars,
                           allow_edit=allow_edit,
                           latest_activity=latest_activity)
Example #6
0
def project_action(project_id,
                   of_type=None,
                   as_view=True,
                   then_redirect=False,
                   action=None,
                   text=None,
                   for_user=current_user):
    project = Project.query.filter_by(id=project_id).first_or_404()
    event = project.event
    if of_type is not None:
        ProjectActivity(project, of_type, for_user, action, text)
    if not as_view:
        return True
    if then_redirect:
        return redirect(url_for('project.project_view', project_id=project.id))
    # The next line seems rather inefficient
    starred = IsProjectStarred(project, for_user)
    # Figure out permissions (hackybehack!)
    allow_edit = not current_user.is_anonymous and current_user.is_admin
    lock_editing = event.lock_editing
    allow_post = starred
    allow_edit = (starred or allow_edit) and not lock_editing
    # Obtain list of team members (performance!)
    project_team = project.get_team()
    if allow_post:
        # Evaluate project progress
        stage, all_valid = validateProjectData(project)
        # Collect resource tips
        suggestions = []
        if not event.lock_resources:
            suggestions = getSuggestionsForStage(project.progress)
        # Suggest missing team roles
        missing_roles = project.get_missing_roles()
    else:
        suggestions, stage, all_valid, missing_roles = None, None, None, None
    # latest_activity = project.latest_activity() # obsolete
    project_dribs = project.all_dribs()
    project_badge = [s for s in project_dribs if s['name'] == 'boost']
    # Select available project image
    if project.image_url:
        project_image_url = project.image_url
    elif event.logo_url:
        project_image_url = event.logo_url
    else:
        project_image_url = url_for('static',
                                    filename='img/badge-black.png',
                                    _external=True)
    return render_template('public/project.html',
                           current_event=event,
                           project=project,
                           project_starred=starred,
                           project_team=project_team,
                           project_badge=project_badge,
                           project_dribs=project_dribs,
                           project_image_url=project_image_url,
                           allow_edit=allow_edit,
                           allow_post=allow_post,
                           lock_editing=lock_editing,
                           missing_roles=missing_roles,
                           stage=stage,
                           all_valid=all_valid,
                           suggestions=suggestions,
                           active="projects")