Merge branch 'peer_reviewdate_feature' into develop
This commit is contained in:
commit
770f87b600
src/main/java/se/su/dsv/scipro
admin/pages/settings
data/dataobjects
peer
@ -14,9 +14,17 @@
|
||||
<td><input type="checkbox" wicket:id="peerRatingsEnabled" name="peerRatingsEnabled"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="peerDisplayNumberOfReviewsPerformed">Display users number of reviews performed on portal page</label></td>
|
||||
<td><label for="peerDisplayNumberOfReviewsPerformed">Display users number of reviews performed on portal page:</label></td>
|
||||
<td><input type="checkbox" wicket:id="peerDisplayNumberOfReviewsPerformed" name="peerDisplayNumberOfReviewsPerformed"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="peerDisplayLatestReviews">Display the latest submitted reviews on portal page:</label></td>
|
||||
<td><input type="checkbox" wicket:id="peerDisplayLatestReviews" name="peerDisplayLatestReviews"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="numberOfLatestReviewsDisplayed">Number of reviews to show in the "Latest reviewers" panel: </label></td>
|
||||
<td><input type="text" wicket:id="numberOfLatestReviewsDisplayed" name="numberOfLatestReviewsDisplayed" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<h5 class="peer-title">Settings for levels</h5>
|
||||
|
@ -59,17 +59,36 @@ public class AdminPeerSettingsPage extends AbstractAdminSettingsPage {
|
||||
|
||||
private class PeerRatingsSettingsForm extends Form<GeneralSystemSettings> {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private TextField<Integer> numberOfLatestReviewsDisplayed;
|
||||
|
||||
public PeerRatingsSettingsForm(String id, IModel<GeneralSystemSettings> model) {
|
||||
super(id, model);
|
||||
|
||||
CheckBox peerRatingsEnabled = new CheckBox("peerRatingsEnabled");
|
||||
add(peerRatingsEnabled);
|
||||
CheckBox peerDisplayNumberOfReviewsPerformed = new CheckBox("peerDisplayNumberOfReviewsPerformed");
|
||||
add(peerDisplayNumberOfReviewsPerformed);
|
||||
add(peerDisplayNumberOfReviewsPerformed);
|
||||
CheckBox peerDisplayLatestReviews = new CheckBox("peerDisplayLatestReviews");
|
||||
add(peerDisplayLatestReviews);
|
||||
|
||||
numberOfLatestReviewsDisplayed =
|
||||
new TextField<Integer>("numberOfLatestReviewsDisplayed");
|
||||
numberOfLatestReviewsDisplayed.setRequired(true);
|
||||
add(numberOfLatestReviewsDisplayed);
|
||||
|
||||
// Checkbox for activating/inactiviting links to reviews in the Latest reviewers panel.
|
||||
//
|
||||
/*CheckBox publicReviewsActivated = new CheckBox("publicReviewsActivated");
|
||||
add(publicReviewsActivated);*/
|
||||
}
|
||||
@Override
|
||||
public void onSubmit(){
|
||||
setModelObject(generalSystemSettingsDao.save(getModelObject()));
|
||||
if (getModelObject().getNumberOfLatestReviewsDisplayed() == 0) {
|
||||
warn("Number of reviews to show has been changed to 1. If you don't want to show any reviews, please hide the panel.");
|
||||
getModelObject().setNumberOfLatestReviewsDisplayed(1);
|
||||
}
|
||||
setModelObject(generalSystemSettingsDao.save(getModelObject()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -51,6 +51,15 @@ public class GeneralSystemSettings extends DomainObject{
|
||||
@Basic(optional=false)
|
||||
private boolean peerDisplayNumberOfReviewsPerformed = true;
|
||||
|
||||
@Basic(optional=false)
|
||||
private boolean peerDisplayLatestReviews = true;
|
||||
|
||||
@Basic(optional=false)
|
||||
private int numberOfLatestReviewsDisplayed = 3;
|
||||
|
||||
@Basic(optional=false)
|
||||
private boolean publicReviewsActivated = true;
|
||||
|
||||
public GeneralSystemSettings(){
|
||||
}
|
||||
/**
|
||||
@ -116,6 +125,24 @@ public class GeneralSystemSettings extends DomainObject{
|
||||
public boolean isPeerDisplayNumberOfReviewsPerformed() {
|
||||
return peerDisplayNumberOfReviewsPerformed;
|
||||
}
|
||||
public void setPeerDisplayLatestReviews(boolean peerDisplayLatestReviews) {
|
||||
this.peerDisplayLatestReviews = peerDisplayLatestReviews;
|
||||
}
|
||||
public boolean isPeerDisplayLatestReviews() {
|
||||
return peerDisplayLatestReviews;
|
||||
}
|
||||
public int getNumberOfLatestReviewsDisplayed() {
|
||||
return numberOfLatestReviewsDisplayed;
|
||||
}
|
||||
public void setNumberOfLatestReviewsDisplayed(int numberOfLatestReviewsDisplayed) {
|
||||
this.numberOfLatestReviewsDisplayed = numberOfLatestReviewsDisplayed;
|
||||
}
|
||||
public boolean isPublicReviewsActivated() {
|
||||
return publicReviewsActivated;
|
||||
}
|
||||
public void setPublicReviewsActivated(boolean publicReviewsActivated) {
|
||||
this.publicReviewsActivated = publicReviewsActivated;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -44,6 +44,10 @@ public interface PeerReviewDao extends LazyDeleteDao<PeerReview> {
|
||||
public int countStudentsWithReviews(final long minimumNumberOfReviews, final Date since);
|
||||
|
||||
public int countStudentsWithReviews();
|
||||
|
||||
public int countSubmittedReviews();
|
||||
|
||||
public List<PeerReview> findReviewsSortedByDate(final int firstResult, final Integer limit);
|
||||
|
||||
/**
|
||||
* Find given peer reviews for a given project and student
|
||||
|
@ -385,4 +385,55 @@ public class PeerReviewDaoJPAImp extends LazyDeleteAbstractDaoJPAImp<PeerReview>
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public List<PeerReview> findReviewsSortedByDate(final int firstResult, final Integer limit) {
|
||||
|
||||
return getJpaTemplate().execute(new JpaCallback<List<PeerReview>>() {
|
||||
public List<PeerReview> doInJpa(EntityManager em)
|
||||
throws PersistenceException {
|
||||
|
||||
String q = "select pr " +
|
||||
"from PeerReview pr " +
|
||||
"where pr.submitted = true " +
|
||||
"and pr.deleted = false " +
|
||||
"and pr.aborted = false " +
|
||||
"order by pr.lastModified desc";
|
||||
|
||||
|
||||
TypedQuery<PeerReview> query = em.createQuery(q, PeerReview.class);
|
||||
|
||||
query.setMaxResults(limit != null ? limit : 3);
|
||||
query.setFirstResult(firstResult);
|
||||
|
||||
try {
|
||||
return query.getResultList();
|
||||
} catch (NoResultException e) {
|
||||
return new LinkedList<PeerReview>();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public int countSubmittedReviews() {
|
||||
return getJpaTemplate().execute(new JpaCallback<Integer>() {
|
||||
public Integer doInJpa(EntityManager em)
|
||||
throws PersistenceException {
|
||||
|
||||
String q = "select count(pr) " +
|
||||
"from PeerReview pr " +
|
||||
"where pr.submitted = true " +
|
||||
"and pr.deleted = false " +
|
||||
"and pr.aborted = false";
|
||||
|
||||
TypedQuery<Long> query = em.createQuery(q, Long.class);
|
||||
|
||||
try {
|
||||
return query.getSingleResult().intValue();
|
||||
} catch (NoResultException e) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}); }
|
||||
}
|
||||
|
@ -0,0 +1,23 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
|
||||
<body>
|
||||
<wicket:panel>
|
||||
<div>
|
||||
<table>
|
||||
<tbody wicket:id="listView">
|
||||
<tr>
|
||||
<td wicket:id="reviewer"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="#" wicket:id="reviewLink">Review date: <span wicket:id="reviewDate"></span></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<i><span wicket:id="noReviewersFoundMessage"></span></i>
|
||||
</div>
|
||||
<div>
|
||||
<a href="#" wicket:id="showMore">Show more...</a>
|
||||
</div>
|
||||
</wicket:panel>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,135 @@
|
||||
package se.su.dsv.scipro.peer.panels;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.wicket.PageParameters;
|
||||
import org.apache.wicket.ajax.AjaxRequestTarget;
|
||||
import org.apache.wicket.ajax.markup.html.AjaxLink;
|
||||
import org.apache.wicket.markup.ComponentTag;
|
||||
import org.apache.wicket.markup.html.WebMarkupContainer;
|
||||
import org.apache.wicket.markup.html.basic.Label;
|
||||
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
|
||||
import org.apache.wicket.markup.html.list.ListItem;
|
||||
import org.apache.wicket.markup.html.list.ListView;
|
||||
import org.apache.wicket.markup.html.panel.Panel;
|
||||
import org.apache.wicket.model.LoadableDetachableModel;
|
||||
import org.apache.wicket.model.Model;
|
||||
import org.apache.wicket.spring.injection.annot.SpringBean;
|
||||
|
||||
import se.su.dsv.scipro.peer.data.dao.interfaces.PeerReviewDao;
|
||||
import se.su.dsv.scipro.peer.data.dataobjects.PeerReview;
|
||||
import se.su.dsv.scipro.peer.pages.ProjectPeerReviewPage;
|
||||
|
||||
public class LatestReviewPanel extends Panel {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@SpringBean
|
||||
private PeerReviewDao peerReviewDao;
|
||||
|
||||
/**
|
||||
* @param id
|
||||
* @param model
|
||||
* the number of users to show by default - also defines how many
|
||||
* users to show when clicking showmore
|
||||
*/
|
||||
public LatestReviewPanel(String id, final Model<Integer> model, final boolean publicLinks) {
|
||||
super(id, model);
|
||||
|
||||
setOutputMarkupId(true);
|
||||
|
||||
final int totalCount = peerReviewDao.countSubmittedReviews();
|
||||
|
||||
final LoadableDetachableModel<List<PeerReview>> listModel = new LoadableDetachableModel<List<PeerReview>>() {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
protected List<PeerReview> load() {
|
||||
return peerReviewDao.findReviewsSortedByDate(0, model.getObject());
|
||||
}
|
||||
};
|
||||
|
||||
final ListView<PeerReview> listView = new ListView<PeerReview>("listView", listModel) {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
protected void populateItem(ListItem<PeerReview> item) {
|
||||
PeerReview pr = item.getModelObject();
|
||||
item.add(pr.getReviewer().getUser().getDisplayComponent("reviewer"));
|
||||
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
|
||||
Label dateLabel = new Label("reviewDate", df.format(pr.getLastModified()));
|
||||
|
||||
if(publicLinks) {
|
||||
PageParameters pp = new PageParameters();
|
||||
pp.put(PeerReview.PP_PEER_REVIEW_ID, pr.getId());
|
||||
BookmarkablePageLink<Void> link = new BookmarkablePageLink<Void>("reviewLink", ProjectPeerReviewPage.class, pp);
|
||||
link.add(dateLabel);
|
||||
item.add(link);
|
||||
} else {
|
||||
LinkToSpanContainer ltsc = new LinkToSpanContainer("reviewLink");
|
||||
ltsc.add(dateLabel);
|
||||
item.add(ltsc);
|
||||
}
|
||||
add(item);
|
||||
}
|
||||
};
|
||||
|
||||
add(new Label("noReviewersFoundMessage", "No reviewers found") {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
public boolean isVisible() {
|
||||
return listView.size() == 0;
|
||||
}
|
||||
});
|
||||
|
||||
add(listView);
|
||||
|
||||
add(new AjaxLink<Void>("showMore") {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Override
|
||||
public void onClick(AjaxRequestTarget target) {
|
||||
Integer i = model.getObject();
|
||||
i += model.getObject();
|
||||
model.setObject(i);
|
||||
target.addComponent(LatestReviewPanel.this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isVisible() {
|
||||
return listView.size() < totalCount;
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
public LatestReviewPanel(String id) {
|
||||
this(id, new Model<Integer>(3), false);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Change html markup from a href to span when links are disabled.
|
||||
* Used when publicly viewable peer reviews is activated/inactivated.
|
||||
*/
|
||||
class LinkToSpanContainer extends WebMarkupContainer {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public LinkToSpanContainer(String id) {
|
||||
super(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final void onComponentTag(final ComponentTag tag) {
|
||||
tag.setName("span");
|
||||
tag.remove("href");
|
||||
|
||||
super.onComponentTag(tag);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -72,6 +72,12 @@
|
||||
</div>
|
||||
<!-- End left column -->
|
||||
<div class="span-6 last">
|
||||
<wicket:enclosure>
|
||||
<div class="rounded-box">
|
||||
<span class="box-title">Latest reviewers</span>
|
||||
<div wicket:id="latestReviewPanel" class="append-bottom"></div>
|
||||
</div>
|
||||
</wicket:enclosure>
|
||||
<wicket:enclosure>
|
||||
<div class="rounded-box">
|
||||
<span class="box-title">Most frequent reviewers</span>
|
||||
@ -86,7 +92,6 @@
|
||||
<div>
|
||||
<i><span class="small right">Last 12 months</span></i>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</wicket:panel>
|
||||
|
@ -216,7 +216,10 @@ public class PeerPortalPanel extends Panel {
|
||||
|
||||
GeneralSystemSettings gsettings = generalSystemSettingsDao.getGeneralSystemSettingsInstance();
|
||||
final String mostFrequentPanel = "mostFrequentPanel";
|
||||
final String latestReviewPanel ="latestReviewPanel";
|
||||
final String bestRatedContainer = "bestRatedContainer";
|
||||
int displayedReviews = gsettings.getNumberOfLatestReviewsDisplayed();
|
||||
|
||||
|
||||
if(gsettings.isPeerDisplayNumberOfReviewsPerformed()){
|
||||
add(new MostFrequentReviewersPanel(mostFrequentPanel));
|
||||
@ -228,6 +231,18 @@ public class PeerPortalPanel extends Panel {
|
||||
} else {
|
||||
add(new InvisiblePanel(bestRatedContainer));
|
||||
}
|
||||
if(gsettings.isPeerDisplayLatestReviews()) {
|
||||
// Checkbox on the AdminPeerSettingsPage is not visible since it's
|
||||
// not decided what kind of info that should be public for students.
|
||||
if (gsettings.isPublicReviewsActivated()) {
|
||||
add(new LatestReviewPanel(latestReviewPanel, new Model<Integer>(displayedReviews), true));
|
||||
} else {
|
||||
add(new LatestReviewPanel(latestReviewPanel, new Model<Integer>(displayedReviews), false));
|
||||
}
|
||||
} else {
|
||||
add(new InvisiblePanel(latestReviewPanel));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user