ore/app/views/users/projects.scala.html
@import controllers.project.{routes => projectRoutes}
@import controllers.routes.{Users => userRoutes}
@import controllers.sugar.Requests.OreRequest
@import ore.models.project.{Project, Version, VersionTag}
@import ore.models.user.User
@import models.viewhelper.{OrganizationData, ScopedOrganizationData, UserData}
@import ore.OreConfig
@import ore.permission.role.Role
@import views.html.projects.{list => projectList}
@import views.html.utils.userAvatar
@import models.querymodels.ProjectListEntry
@import ore.permission.Permission
@import util.syntax._
@import ore.models.project.io.ProjectFiles
@(u: UserData, o: Option[(OrganizationData, ScopedOrganizationData)], models: Seq[ProjectListEntry],
page: Int)(implicit messages: Messages, flash: Flash, request: OreRequest[_], config: OreConfig, projectFiles: ProjectFiles)
@canEditOrgMembers = @{
u.isOrga &&
o.exists { case (_, scopedData) =>
scopedData.permissions.has(Permission.ManageOrganizationMembers)
}
}
@scripts = {
@if(u.isOrga && o.isDefined && canEditOrgMembers) {
<script type="text/javascript" src="@routes.Assets.versioned("javascripts/orgInvites.js")"></script>
}
}
@users.view(u, o, additionalScripts = scripts) {
<div class="row">
<div class="col-md-8">
@projectList(
models = models,
page = page,
pageSize = config.ore.users.projectPageSize,
call = page => routes.Users.showProjects(u.user.name, Some(page))
)
</div>
<div class="col-md-4">
@if(u.isOrga && o.isDefined && canEditOrgMembers) {
<div class="panel-user-info panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">@messages("project.manager")</h3>
</div>
<table class="table panel-body">
<tbody>
@o.get._1.projectRoles.map { case (role, project) =>
<tr>
<td>
<a href="@projectRoutes.Projects.show(project.ownerName, project.slug)">@project.ownerName/@project.slug</a>
<span class="minor">@role.role.title</span>
</td>
<td>
@if(role.role != Role.ProjectOwner) {
@if(role.isAccepted) {
<button class="btn btn-sm btn-danger pull-right btn-invite" data-invite-id="@role.id" data-invite-behalf="@u.user.name" data-invite-accepted="decline">Leave</button>
} else {
<button class="btn btn-sm btn-info pull-right btn-invite" data-invite-id="@role.id" data-invite-behalf="@u.user.name" data-invite-accepted="accept">Join</button>
}
}
</td>
</tr>
}
</tbody>
</table>
</div>
}
@if(!u.isOrga) {
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"> @messages("org.plural")</h3>
</div>
<table class="table panel-body">
<tbody>
@if(u.orgas.isEmpty) {
<tr><td><i class="minor"><i class="fas fa-star"></i> @messages("user.noOrganizations", u.user.name)</i></td></tr>
} else {
@u.orgas.map { case (organization, user, role, _) =>
<tr>
<td>
@userAvatar(Some(organization.name), user.avatarUrl, clazz = "user-avatar-xxs")
<a href="@userRoutes.showProjects(organization.name, None)">
@organization.name
</a>
<div class="pull-right">
@role.role.title
</div>
</td>
</tr>
}
}
</tbody>
</table>
<div class="panel-footer">
<div class="clearfix"></div>
</div>
</div>
<div class="panel-user-info panel panel-default" data-action="starred">
<div class="panel-heading">
<h3 class="panel-title"><i class="fas fa-star"></i> @messages("project.starred")</h3>
</div>
<table class="table panel-body">
<tbody>
</tbody>
</table>
<div class="panel-footer">
<div class="pull-right">
<a class="prev" href="#" style="display: none;">«</a>
<a class="next" href="#" >»</a>
</div>
<div class="clearfix"></div>
</div>
</div>
<div class="panel-user-info panel panel-default" data-action="watching">
<div class="panel-heading">
<h3 class="panel-title"><i class="fas fa-eye"></i> @messages("project.watching")</h3>
</div>
<table class="table panel-body">
<tbody>
</tbody>
</table>
<div class="panel-footer">
<div class="pull-right">
<a class="prev" href="#" style="display: none;">«</a>
<a class="next" href="#" >»</a>
</div>
<div class="clearfix"></div>
</div>
</div>
} else {
@o.map { case (orgData, scopedData) =>
@users.memberList(orgData,
editable = true,
perms = scopedData.permissions,
saveCall = routes.Organizations.updateMembers(orgData.orga.name),
removeCall = routes.Organizations.removeMember(orgData.orga.name)
)
}
}
</div>
</div>
}