Improve time filter language and handling of daysBack parameter
| | |
| | | - { name: 'realm.salesforce.orgId', defaultValue: 0 }
|
| | | - { name: 'realm.windows.defaultDomain', defaultValue: ' ' }
|
| | | - { name: 'realm.windows.backingUserService', defaultValue: 'users.conf' }
|
| | | - { name: 'web.activityDurationChoices', defaultValue: '7 14 21 28' }
|
| | | - { name: 'web.activityDuration', defaultValue: 7 }
|
| | | - { name: 'web.activityDurationChoices', defaultValue: '1 3 7 14 21 28' }
|
| | | - { name: 'web.activityCacheDays', defaultValue: 14 }
|
| | | - { name: 'web.allowAppCloneLinks', defaultValue: 'true' }
|
| | | - { name: 'web.forceDefaultLocale', defaultValue: ' ' }
|
| | |
| | | #
|
| | | # SPACE-DELIMITED
|
| | | # SINCE 1.3.0
|
| | | web.activityDurationChoices = 7 14 21 28
|
| | | web.activityDurationChoices = 1 3 7 14 21 28
|
| | |
|
| | | # The number of days of commits to cache in memory for the dashboard, activity,
|
| | | # and project pages. A value of 0 will disable all caching and will parse commits
|
| | |
| | | gb.owned = owned |
| | | gb.starredAndOwned = starred & owned |
| | | gb.reviewPatchset = review {0} patchset {1} |
| | | gb.todaysActivityStats = today / {1} commits by {2} authors |
| | | gb.todaysActivityNone = today / none |
| | | gb.noActivityToday = there has been no activity today |
| | |
| | | parameters = new PageParameters(params);
|
| | | if (parameters.containsKey(parameter)) {
|
| | | isSelected = params.getString(parameter).equals(value);
|
| | | if (isSelected) {
|
| | | // already selected, so remove this enables toggling
|
| | | parameters.remove(parameter);
|
| | | } else {
|
| | | // set the new selection value
|
| | | setParameter(parameter, value);
|
| | | }
|
| | | } else {
|
| | | // not currently selected
|
| | | isSelected = false;
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | private void setParameter(String parameter, String value) {
|
| | | protected void setParameter(String parameter, String value) {
|
| | | if (!StringUtils.isEmpty(parameter)) {
|
| | | if (StringUtils.isEmpty(value)) {
|
| | | this.parameters.remove(parameter);
|
| | |
| | | return displayText;
|
| | | }
|
| | | }
|
| | | |
| | | public static class DropDownToggleItem extends DropDownMenuItem {
|
| | | |
| | | private static final long serialVersionUID = 1L;
|
| | |
|
| | | /**
|
| | | * Toggle Menu Item constructor that preserves aggregate parameters.
|
| | | * |
| | | * @param displayText
|
| | | * @param parameter
|
| | | * @param value
|
| | | */
|
| | | public DropDownToggleItem(String displayText, String parameter, String value,
|
| | | PageParameters params) {
|
| | | super(displayText, parameter, value, params);
|
| | | if (isSelected) {
|
| | | // already selected, so remove this enables toggling
|
| | | parameters.remove(parameter);
|
| | | }
|
| | | }
|
| | | }
|
| | | } |
| | |
| | | }
|
| | |
|
| | | public static int getDaysBack(PageParameters params) {
|
| | | return params.getInt("db", 7);
|
| | | return params.getInt("db", 0);
|
| | | }
|
| | |
|
| | | public static String getUsername(PageParameters params) {
|
| | |
| | | // parameters
|
| | | int daysBack = WicketUtils.getDaysBack(params);
|
| | | if (daysBack < 1) {
|
| | | daysBack = 14;
|
| | | daysBack = GitBlit.getInteger(Keys.web.activityDuration, 7);
|
| | | }
|
| | | String objectId = WicketUtils.getObject(params);
|
| | |
|
| | |
| | | List<Activity> recentActivity = ActivityUtils.getRecentActivity(models,
|
| | | daysBack, objectId, getTimeZone());
|
| | |
|
| | | String headerPattern;
|
| | | if (daysBack == 1) {
|
| | | // today
|
| | | if (recentActivity.size() == 0) {
|
| | | headerPattern = getString("gb.todaysActivityNone");
|
| | | } else {
|
| | | headerPattern = getString("gb.todaysActivityStats");
|
| | | }
|
| | | } else {
|
| | | // multiple days
|
| | | if (recentActivity.size() == 0) {
|
| | | headerPattern = getString("gb.recentActivityNone");
|
| | | } else {
|
| | | headerPattern = getString("gb.recentActivityStats");
|
| | | }
|
| | | }
|
| | | |
| | | if (recentActivity.size() == 0) {
|
| | | // no activity, skip graphs and activity panel
|
| | | add(new Label("subheader", MessageFormat.format(getString("gb.recentActivityNone"),
|
| | | add(new Label("subheader", MessageFormat.format(headerPattern,
|
| | | daysBack)));
|
| | | add(new Label("activityPanel"));
|
| | | } else {
|
| | |
| | | int totalAuthors = uniqueAuthors.size();
|
| | |
|
| | | // add the subheader with stat numbers
|
| | | add(new Label("subheader", MessageFormat.format(getString("gb.recentActivityStats"),
|
| | | add(new Label("subheader", MessageFormat.format(headerPattern,
|
| | | daysBack, totalCommits, totalAuthors)));
|
| | |
|
| | | // create the activity charts
|
| | |
| | | // quiet or no starred repositories
|
| | | if (repositories.size() == 0) {
|
| | | if (UserModel.ANONYMOUS.equals(user)) {
|
| | | if (daysBack == 1) {
|
| | | activityFragment.add(new Label("digests", getString("gb.noActivityToday")));
|
| | | } else {
|
| | | activityFragment.add(new Label("digests", MessageFormat.format(getString("gb.noActivity"), daysBack)));
|
| | | }
|
| | | } else {
|
| | | activityFragment.add(new LinkPanel("digests", null, getString("gb.findSomeRepositories"), RepositoriesPage.class));
|
| | | }
|
| | | } else {
|
| | | if (daysBack == 1) {
|
| | | activityFragment.add(new Label("digests", getString("gb.noActivityToday")));
|
| | | } else {
|
| | | activityFragment.add(new Label("digests", MessageFormat.format(getString("gb.noActivity"), daysBack)));
|
| | | }
|
| | | }
|
| | | } else {
|
| | | // show daily commit digest feed
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | frag.add(new Label("feedheader", MessageFormat.format(getString("gb.recentActivityStats"),
|
| | | String headerPattern;
|
| | | if (daysBack == 1) {
|
| | | // today
|
| | | if (totalCommits == 0) {
|
| | | headerPattern = getString("gb.todaysActivityNone");
|
| | | } else {
|
| | | headerPattern = getString("gb.todaysActivityStats");
|
| | | }
|
| | | } else {
|
| | | // multiple days
|
| | | if (totalCommits == 0) {
|
| | | headerPattern = getString("gb.recentActivityNone");
|
| | | } else {
|
| | | headerPattern = getString("gb.recentActivityStats");
|
| | | }
|
| | | }
|
| | | frag.add(new Label("feedheader", MessageFormat.format(headerPattern,
|
| | | daysBack, totalCommits, authorMetrics.size())));
|
| | |
|
| | | // build google charts
|
| | |
| | | // parameters
|
| | | int daysBack = params == null ? 0 : WicketUtils.getDaysBack(params);
|
| | | if (daysBack < 1) {
|
| | | daysBack = 7;
|
| | | daysBack = GitBlit.getInteger(Keys.web.activityDuration, 7);
|
| | | }
|
| | | Calendar c = Calendar.getInstance();
|
| | | c.add(Calendar.DATE, -1*daysBack);
|
| | |
| | | }
|
| | | int daysBack = params == null ? 0 : WicketUtils.getDaysBack(params);
|
| | | if (daysBack < 1) {
|
| | | daysBack = 7;
|
| | | daysBack = GitBlit.getInteger(Keys.web.activityDuration, 7);
|
| | | }
|
| | | // reset the daysback parameter so that we have a complete project
|
| | | // repository list. the recent activity will be built up by the
|
| | | // reflog utils.
|
| | | params.put("db", 0);
|
| | | params.remove("db");
|
| | |
|
| | | List<RepositoryModel> repositories = getRepositories(params);
|
| | | Collections.sort(repositories, new Comparator<RepositoryModel>() {
|
| | |
| | | import com.gitblit.wicket.GitBlitWebSession;
|
| | | import com.gitblit.wicket.PageRegistration;
|
| | | import com.gitblit.wicket.PageRegistration.DropDownMenuItem;
|
| | | import com.gitblit.wicket.PageRegistration.DropDownToggleItem;
|
| | | import com.gitblit.wicket.SessionlessForm;
|
| | | import com.gitblit.wicket.WicketUtils;
|
| | | import com.gitblit.wicket.panels.GravatarImage;
|
| | |
| | | List<String> sets = new ArrayList<String>(setMap.keySet());
|
| | | Collections.sort(sets);
|
| | | for (String set : sets) {
|
| | | filters.add(new DropDownMenuItem(MessageFormat.format("{0} ({1})", set,
|
| | | filters.add(new DropDownToggleItem(MessageFormat.format("{0} ({1})", set,
|
| | | setMap.get(set).get()), "set", set, params));
|
| | | }
|
| | | // divider
|
| | |
| | | List<TeamModel> teams = new ArrayList<TeamModel>(user.teams);
|
| | | Collections.sort(teams);
|
| | | for (TeamModel team : teams) {
|
| | | filters.add(new DropDownMenuItem(MessageFormat.format("{0} ({1})", team.name,
|
| | | filters.add(new DropDownToggleItem(MessageFormat.format("{0} ({1})", team.name,
|
| | | team.repositories.size()), "team", team.name, params));
|
| | | }
|
| | | // divider
|
| | |
| | | for (String expression : expressions) {
|
| | | if (!StringUtils.isEmpty(expression)) {
|
| | | addedExpression = true;
|
| | | filters.add(new DropDownMenuItem(null, "x", expression, params));
|
| | | filters.add(new DropDownToggleItem(null, "x", expression, params));
|
| | | }
|
| | | }
|
| | | // if we added any custom expressions, add a divider
|
| | |
| | | if (daysBack < 1) {
|
| | | daysBack = 7;
|
| | | }
|
| | | PageParameters clonedParams;;
|
| | | PageParameters clonedParams;
|
| | | if (params == null) {
|
| | | clonedParams = new PageParameters();
|
| | | } else {
|
| | |
| | | List<DropDownMenuItem> items = new ArrayList<DropDownMenuItem>();
|
| | | Set<Integer> choicesSet = new TreeSet<Integer>(GitBlit.getIntegers(Keys.web.activityDurationChoices));
|
| | | if (choicesSet.isEmpty()) {
|
| | | choicesSet.addAll(Arrays.asList(7, 14, 28, 60, 90, 180));
|
| | | choicesSet.addAll(Arrays.asList(1, 3, 7, 14, 21, 28));
|
| | | }
|
| | | List<Integer> choices = new ArrayList<Integer>(choicesSet);
|
| | | Collections.sort(choices);
|
| | | String lastDaysPattern = getString("gb.lastNDays");
|
| | | for (Integer db : choices) {
|
| | | if (db == 1) {
|
| | | items.add(new DropDownMenuItem(getString("gb.time.today"), "db", db.toString(), clonedParams));
|
| | | } else {
|
| | | String txt = MessageFormat.format(lastDaysPattern, db);
|
| | | items.add(new DropDownMenuItem(txt, "db", db.toString(), clonedParams));
|
| | | }
|
| | | }
|
| | | items.add(new DropDownMenuItem());
|
| | | return items;
|
| | | }
|