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)
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()
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()
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)
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")