src/main/java/com/gitblit/tickets/FileTicketService.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/gitblit/tickets/ITicketService.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/gitblit/wicket/GitBlitWebApp.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/gitblit/wicket/GitBlitWebApp.properties | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/gitblit/wicket/GitBlitWebApp_fr.properties | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/gitblit/wicket/pages/MyTicketsPage.html | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/gitblit/wicket/pages/MyTicketsPage.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/com/gitblit/wicket/pages/RootPage.java | ●●●●● patch | view | raw | blame | history |
src/main/java/com/gitblit/tickets/FileTicketService.java
@@ -207,8 +207,27 @@ @Override public List<TicketModel> getTickets(RepositoryModel repository, TicketFilter filter) { List<TicketModel> list = new ArrayList<TicketModel>(); List<Repository> databases = new ArrayList<Repository>(); List<RepositoryModel> models = new ArrayList<RepositoryModel>(); Repository db = repositoryManager.getRepository(repository.name); if(repository == null) { List<String> allRepo = repositoryManager.getRepositoryList(); for(int i = 0; i < allRepo.size(); i++) { databases.add(repositoryManager.getRepository(allRepo.get(i))); models.add(repositoryManager.getRepositoryModel(allRepo.get(i))); } } else { databases.add(repositoryManager.getRepository(repository.name)); models.add(repository); } for(int i = 0; i < databases.size(); i++) { Repository db = databases.get(i); try { // Collect the set of all json files File dir = new File(db.getDirectory(), TICKETS_PATH); @@ -234,12 +253,12 @@ long ticketId = Long.parseLong(tid); List<Change> changes = TicketSerializer.deserializeJournal(json); if (ArrayUtils.isEmpty(changes)) { log.warn("Empty journal for {}:{}", repository, journal); log.warn("Empty journal for {}:{}", models.get(i), journal); continue; } TicketModel ticket = TicketModel.buildTicket(changes); ticket.project = repository.projectPath; ticket.repository = repository.name; ticket.project = models.get(i).projectPath; ticket.repository = models.get(i).name; ticket.number = ticketId; // add the ticket, conditionally, to the list @@ -252,17 +271,18 @@ } } catch (Exception e) { log.error("failed to deserialize {}/{}\n{}", new Object [] { repository, journal, e.getMessage()}); new Object [] { models.get(i), journal, e.getMessage()}); log.error(null, e); } } } finally { db.close(); } } // sort the tickets by creation Collections.sort(list); return list; } finally { db.close(); } } private List<File> findAll(File dir, String filename) { src/main/java/com/gitblit/tickets/ITicketService.java
@@ -783,8 +783,17 @@ /** * Returns all tickets. This is not a Lucene search! * * @param repository * @return all tickets */ public List<TicketModel> getTickets() { return getTickets(null, null); } /** * Returns all tickets. This is not a Lucene search! * * @param repository * @return all tickets of a given repository * @since 1.4.0 */ public List<TicketModel> getTickets(RepositoryModel repository) { src/main/java/com/gitblit/wicket/GitBlitWebApp.java
@@ -81,6 +81,7 @@ import com.gitblit.wicket.pages.TreePage; import com.gitblit.wicket.pages.UserPage; import com.gitblit.wicket.pages.UsersPage; import com.gitblit.wicket.pages.MyTicketsPage; public class GitBlitWebApp extends WebApplication { @@ -191,6 +192,7 @@ mount("/tickets/export", ExportTicketPage.class, "r", "h"); mount("/milestones/new", NewMilestonePage.class, "r"); mount("/milestones/edit", EditMilestonePage.class, "r", "h"); mount("/mytickets", MyTicketsPage.class, "r", "h"); // setup the markup document urls mount("/docs", DocsPage.class, "r"); src/main/java/com/gitblit/wicket/GitBlitWebApp.properties
@@ -678,3 +678,4 @@ gb.overdue = overdue gb.openMilestones = open milestones gb.closedMilestones = closed milestones gb.mytickets = my tickets src/main/java/com/gitblit/wicket/GitBlitWebApp_fr.properties
@@ -670,3 +670,4 @@ gb.serverDoesNotAcceptPatchsets = Ce serveur n'accepte pas de patchsets. gb.ticketIsClosed = Ce ticket est clos. gb.mergeToDescription = default integration branch for merging ticket patchsets gb.mytickets = mes tickets src/main/java/com/gitblit/wicket/pages/MyTicketsPage.html
New file @@ -0,0 +1,50 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd" xml:lang="en" lang="en"> <body> <wicket:extend> <table> <span>Responsible Tickets</span> <tbody> <tr wicket:id="responsibleTickets"> <td><span wicket:id="ticketName"></span></td> <td><span wicket:id="ticketDescription"></span></td> </tr> </tbody> </table> <table> <span>Author Tickets</span> <tbody> <tr wicket:id="authorTickets"> <td><span wicket:id="ticketName"></span></td> <td><span wicket:id="ticketDescription"></span></td> </tr> </tbody> </table> <table> <span>Voted Tickets</span> <tbody> <tr wicket:id="votedTickets"> <td><span wicket:id="ticketName"></span></td> <td><span wicket:id="ticketDescription"></span></td> </tr> </tbody> </table> <table> <span>Watched Tickets</span> <tbody> <tr wicket:id="watchedTickets"> <td><span wicket:id="ticketName"></span></td> <td><span wicket:id="ticketDescription"></span></td> </tr> </tbody> </table> </wicket:extend> </body> </html> src/main/java/com/gitblit/wicket/pages/MyTicketsPage.java
New file @@ -0,0 +1,128 @@ package com.gitblit.wicket.pages; import java.util.ArrayList; import java.util.List; import com.gitblit.models.UserModel; import com.gitblit.models.TicketModel; import com.gitblit.tickets.ITicketService; import com.gitblit.wicket.GitBlitWebApp; import com.gitblit.wicket.GitBlitWebSession; import com.gitblit.wicket.panels.LinkPanel; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.PageParameters; public class MyTicketsPage extends RootPage { public MyTicketsPage(PageParameters params) { this(); } public MyTicketsPage() { super(); setupPage("", ""); UserModel currentUser = GitBlitWebSession.get().getUser(); if (currentUser == null) { currentUser = UserModel.ANONYMOUS; } String username = currentUser.getName(); ITicketService tickets = GitBlitWebApp.get().tickets(); List<TicketModel> returnedTickets = tickets.getTickets(null); List<TicketModel> responsibleTickets = new ArrayList<TicketModel>(); List<TicketModel> authorTickets = new ArrayList<TicketModel>(); List<TicketModel> votedTickets = new ArrayList<TicketModel>(); List<TicketModel> watchedTickets = new ArrayList<TicketModel>(); for(int i = 0; i < returnedTickets.size(); i++) { TicketModel ticket = returnedTickets.get(i); if(ticket.isOpen()) { if(ticket.isResponsible(username)) { responsibleTickets.add(ticket); } if(ticket.isAuthor(username)) { authorTickets.add(ticket); } if(ticket.isVoter(username)) { votedTickets.add(ticket); } if(ticket.isWatching(username)) { watchedTickets.add(ticket); } } } ListView<TicketModel> responsibleView = new ListView<TicketModel>("responsibleTickets", responsibleTickets) { private static final long serialVersionUID = 1L; @Override public void populateItem(final ListItem<TicketModel> item) { final TicketModel ticket = item.getModelObject(); String ticketUrl = app().tickets().getTicketUrl(ticket); item.add(new LinkPanel("ticketName", "", ticket.title, ticketUrl)); item.add(new Label("ticketDescription", ticket.body)); } }; ListView<TicketModel> authorView = new ListView<TicketModel>("authorTickets", authorTickets) { private static final long serialVersionUID = 1L; @Override public void populateItem(final ListItem<TicketModel> item) { final TicketModel ticket = item.getModelObject(); String ticketUrl = app().tickets().getTicketUrl(ticket); item.add(new LinkPanel("ticketName", "", ticket.title, ticketUrl)); item.add(new Label("ticketDescription", ticket.body)); } }; ListView<TicketModel> votedView = new ListView<TicketModel>("votedTickets", votedTickets) { private static final long serialVersionUID = 1L; @Override public void populateItem(final ListItem<TicketModel> item) { final TicketModel ticket = item.getModelObject(); String ticketUrl = app().tickets().getTicketUrl(ticket); item.add(new LinkPanel("ticketName", "", ticket.title, ticketUrl)); item.add(new Label("ticketDescription", ticket.body)); } }; ListView<TicketModel> watchedView = new ListView<TicketModel>("watchedTickets", watchedTickets) { private static final long serialVersionUID = 1L; @Override public void populateItem(final ListItem<TicketModel> item) { final TicketModel ticket = item.getModelObject(); String ticketUrl = app().tickets().getTicketUrl(ticket); item.add(new LinkPanel("ticketName", "", ticket.title, ticketUrl)); item.add(new Label("ticketDescription", ticket.body)); } }; add(responsibleView); add(authorView); add(votedView); add(watchedView); } } src/main/java/com/gitblit/wicket/pages/RootPage.java
@@ -173,6 +173,7 @@ pages.add(new PageRegistration("gb.repositories", RepositoriesPage.class, getRootPageParameters())); pages.add(new PageRegistration("gb.activity", ActivityPage.class, getRootPageParameters())); pages.add(new PageRegistration("gb.mytickets", MyTicketsPage.class, getRootPageParameters())); if (app().settings().getBoolean(Keys.web.allowLuceneIndexing, true)) { pages.add(new PageRegistration("gb.search", LuceneSearchPage.class)); }