The Project app is the central app that integrates all the other ColdFront apps. There are nine models [1] in the Project app: ProjectStatusChoice, Project, ProjectUserRoleChoice, ProjectUserStatusChoice, ProjectUser, ProjectReviewStatusChoice, ProjectReview, ProjectAdminComment, and ProjectUserMessage. Figure project_uml shows the UML diagram of the project app.

Project App UML

The Project model associates a PI to a project by linking to the PI’s Django user model. It also has fields to specify the project title, description, and field of science. It also links to the ProjectStatusChoice model, which indicates the status of the project. ColdFront has three project status choices: new, active, and archived. When a project is initially created, its status is set to new. System administrators can change the status to active after review. From the user’s perspective, new or active status do no limit the functionally of ColdFront. A project’s status can be set to archived by the user or system administrator, hiding it from the project list and making it read-only. The Project model also has two Boolean fields called: force_review and requires_review that control the project review feature on a project.

If system administrators want to force a project review, they can set the force_review to be true. In case a project should be exempted from periodic project review, the requires_review field should be set to false.

Project review is a way for center directors and system administrators to require PIs to periodically update their grants and publications and to review users who have access to their resources. A project automatically comes under review if it is older than a year or its last project review was more than a year ago. When a project requires review, PIs cannot request new resource allocations or renew their current allocation that are expiring. In addition, the project page will show an alert box linking to the project review page and the ColdFront homepage will also show a link to the project review page for the project requiring review.

The project review page instructs the PI to verify the project title and description, update grants and publications, and review users who can access their resource allocations. It also displays when the grants and publications were last updated and current list of users on the project. If the project’s grants and publications were not updated in the last year, the PI will be asked to provide a reason for not updating them. After the PI has reviewed their project, they check a box on the project review page acknowledging that they have updated the project information to the best of their knowledge and click submit. After submission, a project review is linked to a project using the ProjectReview model. This model saves the reason for not updating the project in the reason_for_not_updating field, if applicable, and also links to the ProjectReviewStatusChoice model. ColdFront uses two project review status choices: pending and completed. When a project review is submitted, it is set to pending status. After review by center director or system administrator, it is marked completed, allowing the PI to once again request new resource allocations and renew resource allocations that are expiring.

The ProjectUser model links a user to a project and links to the ProjectUserRoleChoice and ProjectUserStatusChoice models. ColdFront supports two user roles on a project: manager and user. Any user with manager role can manage the project, meaning they can request new resource allocations, renew resource allocations that are expiring, review project, and manage users on the project and their access to allocated resources. Users with user role have a read-only view of the project and resource allocations. When a PI creates a project, they are automatically given the manager role. A PI can delegate project management to another user by changing their role to manager. ColdFront supports two user status choices on a project: active or removed. Active means a user is active on a project. Removed means a user has been removed from a project. When a user is removed, their ProjectUser model instance is not deleted, only the status is set to removed.

The ProjectAdminComment model is used by system administrators to add comments to a projects that are not visible to the users. Finally, the ProjectUserMessage model is used by system administrators to send messages to users that are visible on the project page.


[1]See the Django documentation for details about models. In short, a model defines a table structure in a database.