From ca6ab8288e24eba0cef7b075e2a23e76d36e7d40 Mon Sep 17 00:00:00 2001 From: rjy7 Date: Tue, 23 Nov 2010 01:28:39 +0000 Subject: [PATCH] NIHVIVO-1386 Self-editors don't get SiteAdmin link in top nav. They also don't get revision info link in footer. Implemented with new User template model class. Changed tests for loginName, showFlag1Status in templates to use this object. --- .../controller/edit/PrimitiveRdfEdit.java | 2 +- .../FreemarkerComponentGenerator.java | 2 + .../freemarker/FreemarkerHttpServlet.java | 32 ++----- .../freemarker/IndividualController.java | 2 +- .../freemarker/IndividualListController.java | 2 +- .../freemarker/RevisionInfoController.java | 14 +++- .../freemarker/SiteAdminController.java | 15 +++- .../controller/freemarker/TestController.java | 5 +- .../FreemarkerPagedSearchController.java | 2 +- .../vitro/webapp/web/templatemodels/User.java | 71 ++++++++++++++++ .../IndividualTemplateModel.java | 36 ++++---- .../individual/PropertyListBuilder.java | 83 +++++++++++++++++++ .../body/individual/individual-properties.ftl | 8 +- .../freemarker/body/individual/individual.ftl | 4 +- .../freemarker/page/partials/identity.ftl | 8 +- .../freemarker/page/partials/search.ftl | 4 +- .../freemarker/page/partials/version.ftl | 6 +- .../freemarker/widgets/widget-login.ftl | 6 +- 18 files changed, 225 insertions(+), 77 deletions(-) create mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/User.java rename webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/{ => individual}/IndividualTemplateModel.java (90%) create mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyListBuilder.java diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/PrimitiveRdfEdit.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/PrimitiveRdfEdit.java index 624cfd0cf..c27e9afba 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/PrimitiveRdfEdit.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/PrimitiveRdfEdit.java @@ -40,7 +40,7 @@ public class PrimitiveRdfEdit extends FreemarkerHttpServlet{ } @Override - protected int requiresLoginLevel() { + protected int requiredLoginLevel() { return LoginStatusBean.EDITOR; } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerComponentGenerator.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerComponentGenerator.java index efff6c128..37ee89911 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerComponentGenerator.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerComponentGenerator.java @@ -43,6 +43,8 @@ public class FreemarkerComponentGenerator extends FreemarkerHttpServlet { request.setAttribute("ftl_search", get("search", root, config, vreq)); request.setAttribute("ftl_footer", get("footer", root, config, vreq)); request.setAttribute("ftl_googleAnalytics", get("googleAnalytics", root, config, vreq)); + + request.setAttribute("freemarkerComponentsDone", true); } private String get(String templateName, Map root, Configuration config, HttpServletRequest request) { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java index c6e8d3771..5ef15d567 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java @@ -32,6 +32,7 @@ import edu.cornell.mannlib.vitro.webapp.utils.StringUtils; import edu.cornell.mannlib.vitro.webapp.web.BreadCrumbsUtil; import edu.cornell.mannlib.vitro.webapp.web.ContentType; import edu.cornell.mannlib.vitro.webapp.web.PortalWebUtil; +import edu.cornell.mannlib.vitro.webapp.web.templatemodels.User; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.files.Scripts; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.files.Stylesheets; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.menu.TabMenu; @@ -45,7 +46,7 @@ public class FreemarkerHttpServlet extends VitroHttpServlet { private static final long serialVersionUID = 1L; private static final Log log = LogFactory.getLog(FreemarkerHttpServlet.class); - private static final int FILTER_SECURITY_LEVEL = LoginStatusBean.EDITOR; + public static final String PAGE_TEMPLATE_TYPE = "page"; public static final String BODY_TEMPLATE_TYPE = "body"; @@ -108,7 +109,7 @@ public class FreemarkerHttpServlet extends VitroHttpServlet { } private boolean requiredLoginLevelNotFound(HttpServletRequest request, HttpServletResponse response) { - int requiredLoginLevel = requiresLoginLevel(); + int requiredLoginLevel = requiredLoginLevel(); // checkLoginStatus() does a redirect if the user is not logged in. if (requiredLoginLevel > LoginStatusBean.ANYBODY && !checkLoginStatus(request, response, requiredLoginLevel)) { return true; @@ -116,11 +117,7 @@ public class FreemarkerHttpServlet extends VitroHttpServlet { return false; } - protected boolean requiresLogin() { - return false; - } - - protected int requiresLoginLevel() { + protected int requiredLoginLevel() { // By default, user does not need to be logged in to view pages. // Subclasses that require login to process their page will override to return the required login level. // NB This method can't be static, because then the superclass method gets called rather than @@ -382,7 +379,7 @@ public class FreemarkerHttpServlet extends VitroHttpServlet { PortalWebUtil.populateSearchOptions(portal, appBean, vreq.getWebappDaoFactory().getPortalDao()); PortalWebUtil.populateNavigationChoices(portal, vreq, appBean, vreq.getWebappDaoFactory().getPortalDao()); - map.putAll(getLoginValues(vreq)); + map.put("user", new User(vreq)); UrlBuilder urlBuilder = new UrlBuilder(portal); map.put("version", getRevisionInfo(urlBuilder)); @@ -409,29 +406,10 @@ public class FreemarkerHttpServlet extends VitroHttpServlet { return map; } - private TabMenu getTabMenu(VitroRequest vreq) { int portalId = vreq.getPortal().getPortalId(); return new TabMenu(vreq, portalId); } - - private final Map getLoginValues(VitroRequest vreq) { - Map map = new HashMap(); - - LoginStatusBean loginBean = LoginStatusBean.getBean(vreq); - if (loginBean.isLoggedIn()) { - map.put("loginName", loginBean.getUsername()); - - if (loginBean.isLoggedInAtLeast(FILTER_SECURITY_LEVEL)) { - ApplicationBean appBean = vreq.getAppBean(); - if (appBean.isFlag1Active()) { - map.put("showFlag1SearchField", true); - } - } - } - - return map; - } private final Map getCopyrightInfo(Portal portal) { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualController.java index 5e513a967..8f067feca 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualController.java @@ -52,7 +52,7 @@ import edu.cornell.mannlib.vitro.webapp.utils.NamespaceMapper; import edu.cornell.mannlib.vitro.webapp.utils.NamespaceMapperFactory; import edu.cornell.mannlib.vitro.webapp.web.ContentType; import edu.cornell.mannlib.vitro.webapp.web.jsptags.StringProcessorTag; -import edu.cornell.mannlib.vitro.webapp.web.templatemodels.IndividualTemplateModel; +import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual.IndividualTemplateModel; /** * Handles requests for entity information. diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualListController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualListController.java index b1d932eb4..b51916bf1 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualListController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualListController.java @@ -16,7 +16,7 @@ import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreemarkerHttpServlet.ResponseValues; import edu.cornell.mannlib.vitro.webapp.utils.StringUtils; -import edu.cornell.mannlib.vitro.webapp.web.templatemodels.IndividualTemplateModel; +import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual.IndividualTemplateModel; import freemarker.template.Configuration; /** diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/RevisionInfoController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/RevisionInfoController.java index 78bfd4202..31aa537cb 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/RevisionInfoController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/RevisionInfoController.java @@ -19,10 +19,20 @@ public class RevisionInfoController extends FreemarkerHttpServlet { private static final long serialVersionUID = 1L; private static final Log log = LogFactory.getLog(RevisionInfoController.class); private static final String TEMPLATE_DEFAULT = "revisionInfo.ftl"; + private static final int REQUIRED_LOGIN_LEVEL = LoginStatusBean.EDITOR; + /* requiredLoginLevel() must be an instance method, else, due to the way sublcass + * hiding works, when called from FreemarkerHttpServlet we will get its own method, + * rather than the subclass method. To figure out whether to display links at the + * page level, we need another, static method. + */ + public static int staticRequiredLoginLevel() { + return REQUIRED_LOGIN_LEVEL; + } + @Override - protected int requiresLoginLevel() { - return LoginStatusBean.EDITOR; + protected int requiredLoginLevel() { + return REQUIRED_LOGIN_LEVEL; } @Override diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/SiteAdminController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/SiteAdminController.java index b474c1b8a..b91075f5e 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/SiteAdminController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/SiteAdminController.java @@ -28,16 +28,25 @@ public class SiteAdminController extends FreemarkerHttpServlet { private static final long serialVersionUID = 1L; private static final Log log = LogFactory.getLog(SiteAdminController.class); private static final String TEMPLATE_DEFAULT = "siteAdmin-main.ftl"; + private static final int REQUIRED_LOGIN_LEVEL = LoginStatusBean.EDITOR; @Override public String getTitle(String siteName) { return siteName + " Site Administration"; } + /* requiredLoginLevel() must be an instance method, else, due to the way sublcass + * hiding works, when called from FreemarkerHttpServlet we will get its own method, + * rather than the subclass method. To figure out whether to display links at the + * page level, we need another, static method. + */ + public static int staticRequiredLoginLevel() { + return REQUIRED_LOGIN_LEVEL; + } + @Override - protected int requiresLoginLevel() { - // User must be logged in to view this page. - return LoginStatusBean.EDITOR; + protected int requiredLoginLevel() { + return REQUIRED_LOGIN_LEVEL; } @Override diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/TestController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/TestController.java index 22c3a01c8..475aa7ad7 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/TestController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/TestController.java @@ -36,14 +36,15 @@ public class TestController extends FreemarkerHttpServlet { Map body = new HashMap(); body.put("title", "Freemarker Test"); - + return new TemplateResponseValues(TEMPLATE_DEFAULT, body); + } @Override protected String getTitle(String siteName) { return "Test"; } - + } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/FreemarkerPagedSearchController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/FreemarkerPagedSearchController.java index 780640d54..ee6d8d31b 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/FreemarkerPagedSearchController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/FreemarkerPagedSearchController.java @@ -72,8 +72,8 @@ import edu.cornell.mannlib.vitro.webapp.search.lucene.SimpleLuceneHighlighter; import edu.cornell.mannlib.vitro.webapp.utils.FlagMathUtils; import edu.cornell.mannlib.vitro.webapp.utils.Html2Text; import edu.cornell.mannlib.vitro.webapp.utils.StringUtils; -import edu.cornell.mannlib.vitro.webapp.web.templatemodels.IndividualTemplateModel; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.LinkTemplateModel; +import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual.IndividualTemplateModel; /** * PagedSearchController is the new search controller that interacts diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/User.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/User.java new file mode 100644 index 000000000..fec37139c --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/User.java @@ -0,0 +1,71 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.web.templatemodels; + +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import edu.cornell.mannlib.vedit.beans.LoginStatusBean; +import edu.cornell.mannlib.vitro.webapp.beans.ApplicationBean; +import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.RevisionInfoController; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.SiteAdminController; + +public class User extends BaseTemplateModel { + + private static final Log log = LogFactory.getLog(User.class); + + private enum Access { + SITE_ADMIN(SiteAdminController.staticRequiredLoginLevel()), + REVISION_INFO(RevisionInfoController.staticRequiredLoginLevel()), + FILTER_SECURITY(LoginStatusBean.EDITOR); + + private final int requiredLoginLevel; + + Access(int requiredLoginLevel) { + this.requiredLoginLevel = requiredLoginLevel; + } + + int requiredLoginLevel() { + return this.requiredLoginLevel; + } + } + + private LoginStatusBean loginBean = null; + private VitroRequest vreq = null; + + public User(VitroRequest vreq) { + this.vreq = vreq; + loginBean = LoginStatusBean.getBean(vreq); + } + + public boolean isLoggedIn() { + return loginBean.isLoggedIn(); + } + + public String getLoginName() { + return loginBean.getUsername(); + } + + public boolean getHasSiteAdminAccess() { + return loginBean.isLoggedInAtLeast(Access.SITE_ADMIN.requiredLoginLevel()); + } + + public boolean getHasRevisionInfoAccess() { + return loginBean.isLoggedInAtLeast(Access.REVISION_INFO.requiredLoginLevel()); + } + + public boolean getShowFlag1SearchField() { + boolean showFlag1SearchField = false; + if (loginBean.isLoggedInAtLeast(Access.FILTER_SECURITY.requiredLoginLevel)) { + ApplicationBean appBean = vreq.getAppBean(); + if (appBean.isFlag1Active()) { + showFlag1SearchField = true; + } + } + return showFlag1SearchField; + } +} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/IndividualTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/IndividualTemplateModel.java similarity index 90% rename from webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/IndividualTemplateModel.java rename to webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/IndividualTemplateModel.java index e2abbeec6..cbd29ed56 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/IndividualTemplateModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/IndividualTemplateModel.java @@ -1,6 +1,6 @@ /* $This file is distributed under the terms of the license in /doc/license.txt$ */ -package edu.cornell.mannlib.vitro.webapp.web.templatemodels; +package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual; import java.util.ArrayList; import java.util.List; @@ -19,6 +19,7 @@ import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.Route; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; import edu.cornell.mannlib.vitro.webapp.web.ViewFinder; import edu.cornell.mannlib.vitro.webapp.web.ViewFinder.ClassView; +import edu.cornell.mannlib.vitro.webapp.web.templatemodels.BaseTemplateModel; public class IndividualTemplateModel extends BaseTemplateModel { @@ -30,13 +31,6 @@ public class IndividualTemplateModel extends BaseTemplateModel { protected VitroRequest vreq; protected UrlBuilder urlBuilder; - // private PropertyListTemplateModel propertyList; - - // RY The IndividualTemplateModel object needs access to the request object. - // The only other template model that does is MainMenu. We could provide an - // interface for RequestAware template models, but they still wouldn't share any code. - // If they both derive from a common RequestAwareTemplateModel class, we might be - // locking ourselves in too tightly to that class hierarchy. public IndividualTemplateModel(Individual individual, VitroRequest vreq) { this.individual = individual; this.vreq = vreq; @@ -150,6 +144,19 @@ public class IndividualTemplateModel extends BaseTemplateModel { return links; } + public static List getIndividualTemplateModelList(List individuals, VitroRequest vreq) { + List models = new ArrayList(individuals.size()); + for (Individual individual : individuals) { + models.add(new IndividualTemplateModel(individual, vreq)); + } + return models; + } + + public List getPropertyList() { + PropertyListBuilder propListBuilder = new PropertyListBuilder(individual, vreq); + return propListBuilder.getPropertyList(); + } + /* These methods simply forward to the Individual methods. It would be desirable to implement a scheme for proxying or delegation so that the methods don't need to be simply listed here. A Ruby-style method missing method would be ideal. @@ -189,19 +196,6 @@ public class IndividualTemplateModel extends BaseTemplateModel { return individual.getLocalName(); } - public static List getIndividualTemplateModelList(List individuals, VitroRequest vreq) { - List models = new ArrayList(individuals.size()); - for (Individual individual : individuals) { - models.add(new IndividualTemplateModel(individual, vreq)); - } - return models; - } - - private boolean isExternallyLinkedNamespace(String namespace,List externallyLinkedNamespaces) { - return externallyLinkedNamespaces.contains(namespace); - } - // public Map< > getPropertyList - // public Map< > getPropertyGroupList } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyListBuilder.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyListBuilder.java new file mode 100644 index 000000000..6aae3c3cc --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyListBuilder.java @@ -0,0 +1,83 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import edu.cornell.mannlib.vedit.beans.LoginStatusBean; +import edu.cornell.mannlib.vitro.webapp.beans.Individual; +import edu.cornell.mannlib.vitro.webapp.beans.ObjectProperty; +import edu.cornell.mannlib.vitro.webapp.beans.Property; +import edu.cornell.mannlib.vitro.webapp.beans.PropertyGroup; +import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; +import edu.cornell.mannlib.vitro.webapp.dao.PropertyGroupDao; +import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; +import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; +import edu.cornell.mannlib.vitro.webapp.filters.VitroRequestPrep; + +public class PropertyListBuilder { + + private static final Log log = LogFactory.getLog(PropertyListBuilder.class); + private static final int MAX_GROUP_DISPLAY_RANK = 99; + + // Don't include these properties in the list. + private static final Collection SUPPRESSED_OBJECT_PROPERTIES = Collections + .unmodifiableCollection(Arrays + .asList(new String[] { VitroVocabulary.IND_MAIN_IMAGE })); + + protected Individual subject; + protected VitroRequest vreq; + + PropertyListBuilder(Individual individual, VitroRequest vreq) { + this.subject = individual; + this.vreq = vreq; + } + + protected List getPropertyList() { + + // Determine whether we're editing or not. + // These tests may change once self-editing issues are straightened out. + boolean isSelfEditing = VitroRequestPrep.isSelfEditing(vreq); + boolean isCurator = LoginStatusBean.getBean(vreq).isLoggedInAtLeast(LoginStatusBean.CURATOR); + boolean isEditing = isSelfEditing || isCurator; + + // Determine whether to return a grouped or ungrouped property list. + // If the call specified ungrouped, use ungrouped. + // If the call specified grouped: + + WebappDaoFactory wdf = vreq.getWebappDaoFactory(); + PropertyGroupDao pgDao = wdf.getPropertyGroupDao(); + List groupsList = pgDao.getPublicGroups(false); // may be returned empty but not null + // Use ungrouped if no property groups are defined + + // If < 2 property groups are populated, we also want ungrouped, but we won't know that until we + // get the property list. + + + // Assemble the property list + List mergedPropertyList = new ArrayList(); + // First get the properties this entity actually has, presumably populated with statements + List objectPropertyList = subject.getObjectPropertyList(); + + for (ObjectProperty op : objectPropertyList) { + if (!SUPPRESSED_OBJECT_PROPERTIES.contains(op)) { + op.setEditLabel(op.getDomainPublic()); + mergedPropertyList.add(op); + }else{ + log.debug("suppressed " + op.getURI()); + } + } + + // If < 2 property groups populated, we want ungrouped. + // This can just be handled by not including a group, or using an "empty" group with no name. + + return null; + } +} diff --git a/webapp/web/templates/freemarker/body/individual/individual-properties.ftl b/webapp/web/templates/freemarker/body/individual/individual-properties.ftl index d04a2b35e..358d91a97 100644 --- a/webapp/web/templates/freemarker/body/individual/individual-properties.ftl +++ b/webapp/web/templates/freemarker/body/individual/individual-properties.ftl @@ -2,8 +2,6 @@ <#-- Template for property listing on individual profile page --> -<#if individual.propertyGroups??> - -<#elseif individual.properties??> - - \ No newline at end of file +<#-- +<#assign properties = individual.propertyList> +--> \ No newline at end of file diff --git a/webapp/web/templates/freemarker/body/individual/individual.ftl b/webapp/web/templates/freemarker/body/individual/individual.ftl index d8df4ded1..e19714bb4 100644 --- a/webapp/web/templates/freemarker/body/individual/individual.ftl +++ b/webapp/web/templates/freemarker/body/individual/individual.ftl @@ -71,9 +71,9 @@ - + <#include "individual-properties.ftl"> - + <#-- Keywords --> <#if individual.keywords?has_content>

Keywords: ${individual.keywordString}

diff --git a/webapp/web/templates/freemarker/page/partials/identity.ftl b/webapp/web/templates/freemarker/page/partials/identity.ftl index 217e24b27..516a5c04c 100644 --- a/webapp/web/templates/freemarker/page/partials/identity.ftl +++ b/webapp/web/templates/freemarker/page/partials/identity.ftl @@ -12,11 +12,13 @@
    <@l.firstLastList> - <#if loginName??> + <#if user.loggedIn>
  • - Logged in as ${loginName} (Log out) + Logged in as ${user.loginName} (Log out)
  • -
  • Site Admin
  • + <#if user.hasSiteAdminAccess> +
  • Site Admin
  • + <#else>
  • Log in
  • diff --git a/webapp/web/templates/freemarker/page/partials/search.ftl b/webapp/web/templates/freemarker/page/partials/search.ftl index f61d64c33..ee3e410e8 100644 --- a/webapp/web/templates/freemarker/page/partials/search.ftl +++ b/webapp/web/templates/freemarker/page/partials/search.ftl @@ -4,9 +4,9 @@
    - <#if showFlag1SearchField??> + <#if user.showFlag1SearchField> <#else> diff --git a/webapp/web/templates/freemarker/page/partials/version.ftl b/webapp/web/templates/freemarker/page/partials/version.ftl index 713e34f39..4821efe65 100644 --- a/webapp/web/templates/freemarker/page/partials/version.ftl +++ b/webapp/web/templates/freemarker/page/partials/version.ftl @@ -2,9 +2,9 @@ <#-- Template for version/revision information --> -<#-- Only show version info if user is logged in --> -<#if loginName??> -
    +<#-- Only show version info if user has access --> +<#if user.hasRevisionInfoAccess> + \ No newline at end of file diff --git a/webapp/web/templates/freemarker/widgets/widget-login.ftl b/webapp/web/templates/freemarker/widgets/widget-login.ftl index 25a7830fc..e298e7fff 100644 --- a/webapp/web/templates/freemarker/widgets/widget-login.ftl +++ b/webapp/web/templates/freemarker/widgets/widget-login.ftl @@ -3,9 +3,9 @@ <#-- Login widget --> <#macro assets> - <#-- RY This test should be replaced by controller logic which doesn't display any assets if the user is logged in. - See NIHVIVO-1357. This test does nothing, since loginName has not been put into the data model. - <#if ! loginName?has_content> --> + <#-- RY This test should be replaced by widget controller logic which doesn't display any assets if the user is logged in. + See NIHVIVO-1357. This test does nothing, since user has not been put into the data model. + <#if ! user.loggedIn> --> ${stylesheets.add("/css/login.css")} ${scripts.add("/js/jquery.js", "/js/login/loginUtils.js")} <#-- ${headScripts.add("")} -->