package hu.sch.web.common;
import hu.sch.domain.user.User;
import hu.sch.services.config.Configuration;
import hu.sch.services.UserManagerLocal;
import hu.sch.services.exceptions.PekEJBException;
import hu.sch.web.PhoenixApplication;
import hu.sch.web.authz.UserAuthorization;
import hu.sch.web.session.VirSession;
import hu.sch.web.wicket.components.choosers.GoogleAnalyticsScript;
import javax.inject.Inject;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.markup.html.WebComponent;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.EmptyPanel;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.Model;
/**
*
* @author messo
* @since 2.4
*/
public abstract class PekPage extends WebPage {
private static final String NAVBAR_SCRIPT =
"var navbarConf = { "
+ "logoutLink: '/logout', "
+ "theme: 'blue', "
+ "width: 900, "
+ "support: %d, "
+ "helpMenuItems: ["
+ "{"
+ "title: 'FAQ',"
+ "url: 'https://kir-dev.sch.bme.hu/kozossegi-pontozas/'"
+ "}"
+ "]"
+ "}; "
+ "printNavbar(navbarConf);";
protected final int DEFAULT_SUPPORT_ID;
private Label titleLabel;
private Label navbarScript;
private Label headerLabel;
@Inject
protected UserManagerLocal userManager;
@Inject
protected Configuration config;
public PekPage() {
DEFAULT_SUPPORT_ID = config.getSupportDefaultId();
loadUser();
init();
}
private void init() {
add(titleLabel = new Label("title", getTitle()));
add(navbarScript = new Label("navbarScript"));
createNavbarWithSupportId(DEFAULT_SUPPORT_ID);
navbarScript.setEscapeModelStrings(false); // do not HTML escape JavaScript code
add(new WebComponent("css").add(
new AttributeModifier("href", new Model<String>("/css/" + getCss()))));
add(new WebComponent("favicon").add(
new AttributeModifier("href", new Model<String>("/images/" + getFavicon()))));
User user = getUser();
if (user != null && user.isShowRecommendedPhoto()) {
// javasoljunk neki egy fotót
add(new RecommendedPhotoPanel("recommendPhoto", getRemoteUser(), getUser()));
} else {
add(new EmptyPanel("recommendPhoto").setVisible(false));
}
add(getHeaderPanel("headerPanel"));
add(headerLabel = new Label("headerLabel", new Model<String>("")));
add(new FeedbackPanel("pagemessages").setEscapeModelStrings(false));
add(new GoogleAnalyticsScript("analyticsJs"));
}
private void loadUser() {
Long virId = getAuthorizationComponent().getUserid(getRequest());
if (virId == null) {
// nincs virId, ilyenkor userId := 0?
getSession().setUserId(0L);
return;
} else if (!virId.equals(getSession().getUserId())) {
// TODO: ilyenkor mi van? egyelőre beállítjuk a session ben is
getSession().setUserId(virId);
}
}
/**
* Beállítjuk az adott lapon a <title/>-t, a "VIR Körök - " előtaggal
*
* @param title a cím, amit a "VIR Körök - " után szerepel
* @since 2.4
*/
protected void setTitleText(String title) {
titleLabel.setDefaultModelObject(getTitle() + " - " + title);
}
protected abstract String getTitle();
protected void setHeaderLabelText(String text) {
headerLabel.setDefaultModelObject(text);
}
protected abstract String getCss();
protected abstract String getFavicon();
protected abstract Panel getHeaderPanel(String id);
protected final void createNavbarWithSupportId(int supportId) {
navbarScript.setDefaultModel(
new Model<String>(NAVBAR_SCRIPT.replace("%d", Integer.toString(supportId))));
navbarScript.setVisible(getApplication().usesDeploymentConfig());
}
protected final boolean isCurrentUserAdmin() {
return getAuthorizationComponent().hasAbstractRole(getRequest(), "ADMIN");
}
protected final boolean isCurrentUserJETI() {
return getAuthorizationComponent().hasAbstractRole(getRequest(), "JETI");
}
protected final boolean isCurrentUserSVIE() {
return getAuthorizationComponent().hasAbstractRole(getRequest(), "SVIE");
}
protected UserAuthorization getAuthorizationComponent() {
return ((PhoenixApplication) getApplication()).getAuthorizationComponent();
}
@Override
public VirSession getSession() {
return (VirSession) super.getSession();
}
protected String getRemoteUser() {
return getAuthorizationComponent().getRemoteUser(getRequest());
}
protected final User getUser() {
return userManager.findUserById(getSession().getUserId(), true);
}
@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
if (getApplication().usesDeploymentConfig()) {
response.render(JavaScriptHeaderItem.forUrl(getString("navbar.url")));
}
}
/**
* Call {@link #error(java.io.Serializable)} method with the messageKey and
* parameters of the exception.
*
* @param ex
* @param moreParams you can add more parameters to be replaced
*/
protected void parametrizedErrorMessage(final PekEJBException ex, Object... moreParams) {
error(String.format(
getString(ex.getErrorCode().getMessageKey()),
ArrayUtils.addAll(ex.getParameters(), moreParams)));
}
/**
* Returns the full basic 'Profil és Körök' support url.
*
* @return the full url with the protocol and the support target id
*/
protected String getSupportUrl() {
return config.getSupportBaseUrl()+ DEFAULT_SUPPORT_ID;
}
}