MiniDigger/Hangar

View on GitHub
ore/app/views/users/projects.scala.html

Summary

Maintainability
Test Coverage
@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;">&laquo;</a>
                            <a class="next" href="#" >&raquo;</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;">&laquo;</a>
                            <a class="next" href="#" >&raquo;</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>

}