Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
rhbz1066756 - Dashboard: Reintroduce last translated indicator for pr…
Browse files Browse the repository at this point in the history
…oject list.
  • Loading branch information
Carlos A. Munoz committed Apr 8, 2014
1 parent c063658 commit 2d7cb37
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 10 deletions.
28 changes: 25 additions & 3 deletions zanata-war/src/main/java/org/zanata/action/DashboardAction.java
Expand Up @@ -44,6 +44,7 @@
import org.zanata.model.HAccount;
import org.zanata.model.HLocale;
import org.zanata.model.HLocaleMember;
import org.zanata.model.HPerson;
import org.zanata.model.HProject;
import org.zanata.model.HProjectIteration;
import org.zanata.security.ZanataIdentity;
Expand Down Expand Up @@ -157,11 +158,14 @@ public List<HProject> getUserMaintainedProjects() {
return sortedList;
}

public String getLastUpdatedTimeLapseMessage(HProject project) {
return DateUtil.getHowLongAgoDescription(project.getLastChanged());
public String getLastTranslatedTimeLapseMessage(HProject project) {
Date lastTranslatedDate = projectDAO.getLastTranslatedDate(project);
// TODO i18n needed
return lastTranslatedDate == null ? "never" :
DateUtil.getHowLongAgoDescription(lastTranslatedDate);
}

public String getLastUpdatedTime(HProject project) {
public String getLastTranslatedTime(HProject project) {
return DateUtil.formatShortDate(project.getLastChanged());
}

Expand Down Expand Up @@ -248,6 +252,24 @@ public boolean isUserReviewer() {
return languageTeamServiceImpl.isUserReviewer(authenticatedAccount.getPerson().getId());
}

public String getLastTranslatorMessage(HProject project) {
String lastTranslatorMessage = "Last translated by ";
HPerson lastTrans = projectDAO.getLastTranslator(project);
if( lastTrans != null ) {
String username = lastTrans.getName();
if(username == null || username.trim().isEmpty()) {
if( lastTrans.getAccount() != null ) {
return lastTranslatorMessage + lastTrans.getAccount()
.getUsername();
}
}
else {
return lastTranslatorMessage + lastTrans.getName();
}
}
return "";
}

private class ProjectPageList
extends PagedDataHandler<HProject> {

Expand Down
49 changes: 46 additions & 3 deletions zanata-war/src/main/java/org/zanata/dao/ProjectDAO.java
Expand Up @@ -300,8 +300,8 @@ public int getTranslatedProjectCount(HAccount account) {
/**
* @param project A project
* @param account The user for which the last translated date.
* @return A date indicating the last time in which account's user
* translated it.
* @return A date indicating the last time on which account's user
* translated project.
*/
public Date getLastTranslatedDate(HProject project, HAccount account) {
Query q =
Expand All @@ -313,10 +313,53 @@ public Date getLastTranslatedDate(HProject project, HAccount account) {
"and tft.textFlow.document.projectIteration.project = :project"
)
.setParameter("translator", account)
.setParameter("project", project);
.setParameter("project", project)
.setCacheable(true);
return (Date)q.uniqueResult();
}

/**
* @param project A project
* @return A date indicating the last time when any user translated project
*/
public Date getLastTranslatedDate(HProject project) {
Query q =
getSession()
.createQuery(
"select max (tft.lastChanged) " +
"from HTextFlowTarget tft " +
"where tft.textFlow.document.projectIteration.project = :project"
)
.setParameter("project", project)
.setCacheable(true);
return (Date)q.uniqueResult();
}

/**
* @param project A project
* @return A date indicating the last time when any user translated project
*/
public HPerson getLastTranslator(HProject project) {
Query q =
getSession()
.createQuery(
"select tft.translator " +
"from HTextFlowTarget tft " +
"where tft.textFlow.document.projectIteration.project = :project " +
"order by tft.lastChanged desc"
)
.setParameter("project", project)
.setMaxResults(1)
.setCacheable(true);
List results = q.list();
if( results.isEmpty() ) {
return null;
}
else {
return (HPerson) results.get(0);
}
}

public List<HProject> getProjectsForMaintainer(HPerson maintainer,
int firstResult, int maxResults) {
Query q =
Expand Down
26 changes: 22 additions & 4 deletions zanata-war/src/main/webapp/WEB-INF/layout/dashboard/projects.xhtml
Expand Up @@ -17,7 +17,25 @@

<div class="panel">
<div class="tabs--accent">
<!-- Nav content goes here <nav></nav>-->
<nav class="tabs__nav panel__header">
<ul>
<li>
<a href="#" class="is-active" title=""
data-original-title="Maintained projects">
<i aria-hidden="true" class="i i--maintain"></i>
<span class="is-invisible">Maintainer</span>
</a>
</li>
<li class="tab__end">
<a href="#" jsfc="s:link" title=""
view="/project/create_project.xhtml"
data-original-title="Create a new project">
<i aria-hidden="true" class="i i--plus i i--large"></i>
<span class="is-invisible">New Project</span>
</a>
</li>
</ul>
</nav>
<div class="tabs__content">
<header class="panel__sub-header">
<!-- Header panel options go here -->
Expand Down Expand Up @@ -91,9 +109,9 @@
<p class="list__item__meta">#{project.description}</p>
</div>
<div class="list__item__stats">
<span class="stats--mini" title="#{dashboardAction.getLastUpdatedTime(project)}">
<span class="stats__figure">#{dashboardAction.getLastUpdatedTimeLapseMessage(project)}</span>
<span class="stats__unit"><!-- Last updated by goes here --></span>
<span class="stats--mini" title="#{dashboardAction.getLastTranslatedTime(project)}">
<span class="stats__figure">#{dashboardAction.getLastTranslatedTimeLapseMessage(project)}</span>
<span class="stats__unit">#{dashboardAction.getLastTranslatorMessage(project)}</span>
</span>
</div>
</div>
Expand Down

0 comments on commit 2d7cb37

Please sign in to comment.