Skip to content

Commit

Permalink
Merge branch 'feature/group-unified-view' into 'next'
Browse files Browse the repository at this point in the history
  • Loading branch information
doortts committed Jan 8, 2016
2 parents 8fa74f2 + 52ebebc commit 539997a
Show file tree
Hide file tree
Showing 19 changed files with 805 additions and 58 deletions.
6 changes: 2 additions & 4 deletions app/assets/stylesheets/less/_override.less
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
.transition(all 0.3s ease);

&:hover {
background-color:#e6e6e6;
background-color: #fafafa;
.transition(all 0.1s linear);
}

Expand Down Expand Up @@ -168,7 +168,6 @@
margin-top:4px;

input {
border: 1px solid rgba(0,0,0,0.15);
background: #fff url('@{select2-image-path}/select2.png') no-repeat 100% -22px;

&.select2-active {
Expand Down Expand Up @@ -276,8 +275,7 @@

&.select2-container-active {
.select2-choices {
border: 1px solid rgba(0,0,0,0.15);
border-bottom:0;
border: 1px solid @primary;
background-image:none;
outline:none;
.box-shadow(none);
Expand Down
19 changes: 19 additions & 0 deletions app/assets/stylesheets/less/_page.less
Original file line number Diff line number Diff line change
Expand Up @@ -6326,3 +6326,22 @@ div.diff-body[data-outdated="true"] tr:hover .icon-comment {
}
}

#s2id_projects {
margin-top: 10px;
}

#option_form {
#s2id_projects {
margin-top: 0;
}
}

.group-project-name {
font-size: 12px;
font-weight: bold;
margin-right: 10px;
}

.group-board {
width: 100% !important;
}
72 changes: 72 additions & 0 deletions app/controllers/BoardApp.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import models.enumeration.Operation;
import models.enumeration.ResourceType;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import com.fasterxml.jackson.databind.node.ObjectNode;

Expand All @@ -49,15 +50,19 @@
import views.html.board.edit;
import views.html.board.list;
import views.html.board.view;
import views.html.organization.group_board_list;

import javax.annotation.Nonnull;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

import static com.avaje.ebean.Expr.icontains;

public class BoardApp extends AbstractPostingApp {
public static class SearchCondition extends AbstractPostingApp.SearchCondition {
public List<String> projectNames;
private ExpressionList<Posting> asExpressionList(Project project) {
ExpressionList<Posting> el = Posting.finder.where().eq("project.id", project.id);

Expand All @@ -71,6 +76,73 @@ private ExpressionList<Posting> asExpressionList(Project project) {

return el;
}

private ExpressionList<Posting> asExpressionList(@Nonnull Organization organization) {
ExpressionList<Posting> el = Posting.finder.where();

if(isFilteredByProject()){
el.in("project.id", getFilteredProjectIds(organization));
} else {
el.in("project.id", getVisibleProjectIds(organization));
}

if (filter != null) {
el.or(icontains("title", filter), icontains("body", filter));
}

if (StringUtils.isNotBlank(orderBy)) {
el.orderBy(orderBy + " " + orderDir);
}

return el;
}

private boolean isFilteredByProject() {
return CollectionUtils.isNotEmpty(projectNames);
}

private List<Long> getFilteredProjectIds(@Nonnull Organization organization) {
List<Long> projectIdsFilter = new ArrayList<>();
for(String projectName: projectNames){
for(Project project: organization.projects){
if(project.name.equalsIgnoreCase(projectName)
&& getVisibleProjectIds(organization).contains(project.id.toString())) {
projectIdsFilter.add(project.id);
break;
}
}
}
return projectIdsFilter;
}

private List<String> getVisibleProjectIds(Organization organization) {
List<Project> projects = organization.getVisibleProjects(UserApp.currentUser());
List<String> projectsIds = new ArrayList<String>();
for (Project project : projects) {
projectsIds.add(project.id.toString());
}
return projectsIds;
}
}

@AnonymousCheck(requiresLogin = false, displaysFlashMessage = true)
public static Result organizationBoards(@Nonnull String organizationName, int pageNum) {

Form<SearchCondition> postParamForm = new Form<>(SearchCondition.class);
SearchCondition searchCondition = postParamForm.bindFromRequest().get();
searchCondition.pageNum = pageNum - 1;
if (searchCondition.orderBy.equals("id")) {
searchCondition.orderBy = "createdDate";
}

Organization organization = Organization.findByName(organizationName);
if (organization == null) {
return notFound(ErrorViews.NotFound.render("error.notfound.organization"));
}
ExpressionList<Posting> el = searchCondition.asExpressionList(organization);
Page<Posting> posts = el.findPagingList(ITEMS_PER_PAGE).getPage(searchCondition.pageNum);

return ok(group_board_list.render("menu.board", organization, posts, searchCondition, null));
}

@IsAllowed(value = Operation.READ, resourceType = ResourceType.PROJECT)
Expand Down
20 changes: 20 additions & 0 deletions app/controllers/IssueApp.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,9 @@
import play.mvc.*;
import utils.*;
import views.html.issue.*;
import views.html.organization.group_issue_list;

import javax.annotation.Nonnull;
import java.io.IOException;
import java.util.HashSet;
import java.util.List;
Expand All @@ -54,6 +56,24 @@ public class IssueApp extends AbstractPostingApp {
private static final String EXCEL_EXT = "xls";
private static final Integer ITEMS_PER_PAGE_MAX = 45;

@AnonymousCheck(requiresLogin = false, displaysFlashMessage = true)
public static Result organizationIssues(@Nonnull String organizationName, @Nonnull String state, @Nonnull String format, int pageNum) throws WriteException, IOException {
// SearchCondition from param
Form<models.support.SearchCondition> issueParamForm = new Form<>(models.support.SearchCondition.class);
models.support.SearchCondition searchCondition = issueParamForm.bindFromRequest().get();
searchCondition.pageNum = pageNum - 1;

Integer itemsPerPage = getItemsPerPage();
Organization organization = Organization.findByName(organizationName);
if (organization == null) {
return notFound(ErrorViews.NotFound.render("error.notfound.organization"));
}
ExpressionList<Issue> el = searchCondition.asExpressionList(organization);
Page<Issue> issues = el.findPagingList(itemsPerPage).getPage(searchCondition.pageNum);

return ok(group_issue_list.render("title.issueList", issues, searchCondition, organization));
}

@AnonymousCheck(requiresLogin = true, displaysFlashMessage = true)
public static Result userIssues(String state, String format, int pageNum) throws WriteException, IOException {
Project project = null;
Expand Down
4 changes: 4 additions & 0 deletions app/models/Issue.java
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,10 @@ public static int countIssuesBy(Long projectId, Map<String, String> paramMap) {
return Issue.countIssuesBy(projectId, cond);
}

public static int countIssuesBy(Organization organization, SearchCondition cond) {
return cond.asExpressionList(organization).findRowCount();
}

/**
* Generate a Microsoft Excel file in byte array from the given issue list,
* using JXL.
Expand Down
Loading

0 comments on commit 539997a

Please sign in to comment.