Skip to content

Instantly share code, notes, and snippets.

@apetro
Created July 2, 2015 13:42
Show Gist options
  • Select an option

  • Save apetro/c0112dd78fa6c4065bda to your computer and use it in GitHub Desktop.

Select an option

Save apetro/c0112dd78fa6c4065bda to your computer and use it in GitHub Desktop.
Profile mapping driving theme selection driving DLM fragment audience evaluation
<?xml version="1.0"?>
<managedLayoutFragments xmlns:dlm="http://org.jasig.portal.layout.dlm.config">
<dlm:property name='defaultLayoutOwner' value='fragmentTemplate'/>
<dlm:property name='org.jasig.portal.layout.dlm.RDBMDistributedLayoutStore.fragment_cache_refresh' value="5"/>
<!-- Guest view tabs -->
<dlm:fragment name='Public' ownerID='mum-lo-public' precedence='15'>
<dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GuestUserEvaluatorFactory'/>
</dlm:fragment>
<!-- Shown to users that are missing required account info -->
<dlm:fragment name='Access Denied' ownerID='mum-lo-access-denied' precedence='101'>
<dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
<paren mode="OR">
<attribute mode='memberOf' name='Not Portal Activated'/>
<attribute mode='memberOf' name='Portal Ineligible'/>
<attribute mode='memberOf' name='System Portal Ineligible'/>
</paren>
</dlm:audience>
</dlm:fragment>
<!-- fragment for all logged-in users -->
<dlm:fragment name="Authenticated" ownerID="authenticated-lo" precedence="80">
<dlm:audience evaluatorFactory="org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory">
<paren mode="OR">
<attribute mode="deepMemberOf" name="Authenticated Users"/>
</paren>
</dlm:audience>
</dlm:fragment>
<!-- Header Content for Non-Bucky Users -->
<dlm:fragment name='NotBuckyHeader' ownerID='mum-lo-not-bucky-header' precedence='0'>
<dlm:audience evaluatorFactory="org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory">
<paren mode="OR">
<attribute mode="deepMemberOf" name="Non Bucky Theme Users"/>
</paren>
</dlm:audience>
</dlm:fragment>
<!-- respondr fragments -->
<dlm:fragment name="AuthenticatedRespondr" ownerID="authenticated.respondr-lo" precedence="80">
<dlm:audience evaluatorFactory="org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory">
<paren mode="AND">
<attribute mode="deepMemberOf" name="Authenticated Users"/>
<attribute mode="deepMemberOf" name="Responder Theme Users"/>
</paren>
</dlm:audience>
</dlm:fragment>
<dlm:fragment name="GuestRespondr" ownerID="guest.respondr-lo" precedence="80">
<dlm:audience evaluatorFactory="org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory">
<paren mode="AND">
<paren mode="NOT">
<attribute mode="deepMemberOf" name="Authenticated Users"/>
</paren>
<attribute mode="deepMemberOf" name="Responder Theme Users"/>
</paren>
</dlm:audience>
</dlm:fragment>
<dlm:fragment name="Respondr" ownerID="respondr-lo" precedence="80">
<dlm:audience evaluatorFactory="org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory">
<paren mode="OR">
<attribute mode="deepMemberOf" name="Responder Theme Users"/>
</paren>
</dlm:audience>
</dlm:fragment>
<!-- bucky fragments -->
<dlm:fragment name="AuthenticatedBucky" ownerID="authenticated.bucky-lo" precedence="80">
<dlm:audience evaluatorFactory="org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory">
<paren mode="AND">
<attribute mode="deepMemberOf" name="Authenticated Users"/>
<attribute mode="deepMemberOf" name="Bucky Theme Users"/>
</paren>
</dlm:audience>
</dlm:fragment>
<dlm:fragment name="GuestBucky" ownerID="guest.bucky-lo" precedence="80">
<dlm:audience evaluatorFactory="org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory">
<paren mode="AND">
<paren mode="NOT">
<attribute mode="deepMemberOf" name="Authenticated Users"/>
</paren>
<attribute mode="deepMemberOf" name="Bucky Theme Users"/>
</paren>
</dlm:audience>
</dlm:fragment>
<dlm:fragment name="Bucky" ownerID="bucky-lo" precedence="80">
<dlm:audience evaluatorFactory="org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory">
<paren mode="OR">
<attribute mode="deepMemberOf" name="Bucky Theme Users"/>
</paren>
</dlm:audience>
</dlm:fragment>
<!-- Optional tabs -->
<dlm:fragment name='Campus Apps' ownerID='mum-lo-campus-apps' precedence='15'>
<dlm:audience evaluatorFactory="org.jasig.portal.layout.dlm.providers.SubscribedTabEvaluatorFactory"/>
</dlm:fragment>
<dlm:fragment name='Course Guide' ownerID='mum-lo-cg' precedence='15'>
<dlm:audience evaluatorFactory="org.jasig.portal.layout.dlm.providers.SubscribedTabEvaluatorFactory"/>
</dlm:fragment>
<!-- MyUW-Madison Fragments -->
<dlm:fragment name='UW Bucky Home' ownerID='mum-lo-bucky-welcome' precedence='200'>
<dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
<paren mode="AND">
<attribute mode="deepMemberOf" name="Authenticated Users"/>
</paren>
</dlm:audience>
</dlm:fragment>
<dlm:fragment name='Welcome' ownerID='mum-lo-welcome' precedence='100'>
<dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
<paren mode="AND">
<paren mode="OR">
<attribute mode='memberOf' name='Student'/>
<attribute mode='memberOf' name='Former Student'/>
<attribute mode='memberOf' name='Facstaff'/>
<attribute mode='memberOf' name='Facstaff - New Hire'/>
<attribute mode='memberOf' name='Facstaff - Former Appointment'/>
<attribute mode='memberOf' name='Applicant - Undergraduate'/>
<attribute mode='memberOf' name='Applicant - Graduate'/>
<attribute mode='memberOf' name='Applicant - Professional'/>
<attribute mode='memberOf' name='Applicant - Special'/>
<attribute mode='memberOf' name='AT Support - East'/>
</paren>
</paren>
</dlm:audience>
</dlm:fragment>
<dlm:fragment name='Advising' ownerID='mum-lo-advising' precedence='90'>
<dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
<paren mode="AND">
<paren mode="OR">
<attribute mode='memberOf' name='Users - Advisors'/>
<attribute mode='memberOf' name='AT Support - East'/>
</paren>
</paren>
</dlm:audience>
</dlm:fragment>
<dlm:fragment name='Teaching' ownerID='mum-lo-teaching' precedence='90'>
<dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
<paren mode="AND">
<paren mode="OR">
<attribute mode='memberOf' name='Users - Instructors'/>
<attribute mode='memberOf' name='AT Support - East'/>
</paren>
<paren mode="NOT">
<attribute mode='memberOf' name='Respondr Theme Users' />
</paren>
</paren>
</dlm:audience>
</dlm:fragment>
<dlm:fragment name='Learning' ownerID='mum-lo-learning' precedence='90'>
<dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
<paren mode="AND">
<paren mode="OR">
<attribute mode='memberOf' name='Student'/>
<attribute mode='memberOf' name='Former Student'/>
<attribute mode='memberOf' name='Applicant - Undergraduate'/>
<attribute mode='memberOf' name='Applicant - Graduate'/>
<attribute mode='memberOf' name='Applicant - Professional'/>
<attribute mode='memberOf' name='Applicant - Special'/>
<attribute mode='memberOf' name='AT Support - East'/>
</paren>
<paren mode="NOT">
<attribute mode='memberOf' name='Respondr Theme Users' />
</paren>
</paren>
</dlm:audience>
</dlm:fragment>
<dlm:fragment name='Academics' ownerID='mum-lo-academics' precedence='90'>
<dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
<paren mode="AND">
<paren mode="OR">
<paren mode="AND">
<paren mode="OR">
<attribute mode='memberOf' name='Facstaff'/>
<attribute mode='memberOf' name='Facstaff - New Hire'/>
<attribute mode='memberOf' name='Facstaff - Former Appointment'/>
</paren>
<paren mode="NOT">
<paren mode="OR">
<attribute mode='memberOf' name='Users - Instructors'/>
<attribute mode='memberOf' name='Users - Advisors'/>
<attribute mode='memberOf' name='Student'/>
<attribute mode='memberOf' name='Former Student'/>
<attribute mode='memberOf' name='Applicant - Undergraduate'/>
<attribute mode='memberOf' name='Applicant - Graduate'/>
<attribute mode='memberOf' name='Applicant - Professional'/>
<attribute mode='memberOf' name='Applicant - Special'/>
</paren>
</paren>
</paren>
<attribute mode='memberOf' name='AT Support - East'/>
</paren>
<paren mode="NOT">
<attribute mode='memberOf' name='Respondr Theme Users' />
</paren>
</paren>
</dlm:audience>
</dlm:fragment>
<dlm:fragment name='Student Services' ownerID='mum-lo-student-services' precedence='80'>
<dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
<paren mode="AND">
<paren mode="OR">
<attribute mode='memberOf' name='Student'/>
<attribute mode='memberOf' name='Former Student'/>
<attribute mode='memberOf' name='Applicant - Undergraduate'/>
<attribute mode='memberOf' name='Applicant - Graduate'/>
<attribute mode='memberOf' name='Applicant - Professional'/>
<attribute mode='memberOf' name='Applicant - Special'/>
<attribute mode='memberOf' name='Administrators - ISIS'/>
<attribute mode='memberOf' name='AT Support - East'/>
</paren>
<paren mode="NOT">
<attribute mode='memberOf' name='Respondr Theme Users' />
</paren>
</paren>
</dlm:audience>
</dlm:fragment>
<dlm:fragment name='Research' ownerID='mum-lo-research' precedence='40'>
<dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
<paren mode="AND">
<paren mode="OR">
<attribute mode='memberOf' name='Student'/>
<attribute mode='memberOf' name='Former Student'/>
<attribute mode='memberOf' name='Facstaff'/>
<attribute mode='memberOf' name='Facstaff - New Hire'/>
<attribute mode='memberOf' name='Facstaff - Former Appointment'/>
<attribute mode='memberOf' name='Applicant - Undergraduate'/>
<attribute mode='memberOf' name='Applicant - Graduate'/>
<attribute mode='memberOf' name='Applicant - Professional'/>
<attribute mode='memberOf' name='Applicant - Special'/>
<attribute mode='memberOf' name='AT Support - East'/>
</paren>
<paren mode="NOT">
<attribute mode='memberOf' name='Respondr Theme Users' />
</paren>
</paren>
</dlm:audience>
</dlm:fragment>
<dlm:fragment name='Services' ownerID='mum-lo-services' precedence='70'>
<dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
<paren mode="AND">
<paren mode="OR">
<attribute mode='memberOf' name='Student'/>
<attribute mode='memberOf' name='Former Student'/>
<attribute mode='memberOf' name='Facstaff'/>
<attribute mode='memberOf' name='Facstaff - New Hire'/>
<attribute mode='memberOf' name='Facstaff - Former Appointment'/>
<attribute mode='memberOf' name='Applicant - Undergraduate'/>
<attribute mode='memberOf' name='Applicant - Graduate'/>
<attribute mode='memberOf' name='Applicant - Professional'/>
<attribute mode='memberOf' name='Applicant - Special'/>
<attribute mode='memberOf' name='AT Support - East'/>
</paren>
<paren mode="NOT">
<attribute mode='memberOf' name='Respondr Theme Users' />
</paren>
</paren>
</dlm:audience>
</dlm:fragment>
<dlm:fragment name='Work Record' ownerID='mum-lo-work-record' precedence='60'>
<dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
<paren mode="AND">
<paren mode="OR">
<attribute mode='memberOf' name='Facstaff'/>
<attribute mode='memberOf' name='Facstaff - New Hire'/>
<attribute mode='memberOf' name='Facstaff - Former Appointment'/>
<attribute mode='memberOf' name='AT Support - East'/>
</paren>
<paren mode="NOT">
<attribute mode='memberOf' name='Respondr Theme Users' />
</paren>
</paren>
</dlm:audience>
</dlm:fragment>
<dlm:fragment name='News' ownerID='mum-lo-news' precedence='50'>
<dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
<paren mode="AND">
<paren mode="OR">
<attribute mode='memberOf' name='Student'/>
<attribute mode='memberOf' name='Former Student'/>
<attribute mode='memberOf' name='Facstaff'/>
<attribute mode='memberOf' name='Facstaff - New Hire'/>
<attribute mode='memberOf' name='Facstaff - Former Appointment'/>
<attribute mode='memberOf' name='Applicant - Undergraduate'/>
<attribute mode='memberOf' name='Applicant - Graduate'/>
<attribute mode='memberOf' name='Applicant - Professional'/>
<attribute mode='memberOf' name='Applicant - Special'/>
<attribute mode='memberOf' name='AT Support - East'/>
</paren>
<paren mode="NOT">
<attribute mode='memberOf' name='Respondr Theme Users' />
</paren>
</paren>
</dlm:audience>
</dlm:fragment>
<dlm:fragment name='Admin' ownerID='mum-lo-admin' precedence='10'>
<dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
<paren mode="AND">
<paren mode="OR">
<attribute mode='memberOf' name='Developers'/>
<attribute mode='memberOf' name='Portal Administrators'/>
</paren>
<paren mode="NOT">
<attribute mode='memberOf' name='Respondr Theme Users' />
</paren>
</paren>
</dlm:audience>
</dlm:fragment>
<!-- MyUW System Fragments -->
<dlm:fragment name='System Employee' ownerID='mum-lo-system-employee' precedence='10'>
<dlm:audience evaluatorFactory='org.jasig.portal.layout.dlm.providers.GroupMembershipEvaluatorFactory'>
<paren mode="AND">
<paren mode="OR">
<attribute mode='memberOf' name='UW System Facstaff'/>
</paren>
<paren mode="NOT">
<attribute mode='memberOf' name='Respondr Theme Users' />
</paren>
</paren>
</dlm:audience>
</dlm:fragment>
</managedLayoutFragments>
<?xml version="1.0"?>
<Group-Store>
<group>
<group-key>pags_root</group-key>
<group-name>PAGS Root</group-name>
<group-description>Root group for all PAGS groups. Convenience for adding PAGS groups to a local group.</group-description>
<members>
<member-key>all_users</member-key>
<member-key>uw-madison</member-key>
<member-key>uw-system</member-key>
</members>
</group>
<!-- ... redacted irrelevant groups ... -->
<!-- Theme groups -->
<group>
<group-key>respondr_theme_users</group-key>
<group-name>Respondr Theme Users</group-name>
<group-description>User of theme respondr</group-description>
<selection-test>
<test-group>
<test>
<attribute-name></attribute-name>
<tester-class>org.jasig.portal.groups.pags.testers.ThemeNameEqualsIgnoreCaseTester</tester-class>
<test-value>respondr</test-value>
</test>
</test-group>
</selection-test>
</group>
<group>
<group-key>non_respondr_theme_users</group-key>
<group-name>Non Respondr Theme Users</group-name>
<group-description>User of themes other than respondr</group-description>
<selection-test>
<test-group>
<test>
<attribute-name></attribute-name>
<tester-class>org.jasig.portal.groups.pags.testers.ThemeNameNotEqualsIgnoreCaseTester</tester-class>
<test-value>respondr</test-value>
</test>
</test-group>
</selection-test>
</group>
<group>
<group-key>bucky_theme_users</group-key>
<group-name>Bucky Theme Users</group-name>
<group-description>User of theme Bucky</group-description>
<selection-test>
<test-group>
<test>
<attribute-name></attribute-name>
<tester-class>org.jasig.portal.groups.pags.testers.ThemeNameEqualsIgnoreCaseTester</tester-class>
<test-value>bucky</test-value>
</test>
</test-group>
</selection-test>
</group>
<group>
<group-key>non_bucky_theme_users</group-key>
<group-name>Non Bucky Theme Users</group-name>
<group-description>User of themes other than bucky</group-description>
<selection-test>
<test-group>
<test>
<attribute-name></attribute-name>
<tester-class>org.jasig.portal.groups.pags.testers.ThemeNameNotEqualsIgnoreCaseTester</tester-class>
<test-value>bucky</test-value>
</test>
</test-group>
</selection-test>
</group>
<group>
<group-key>mobile_theme_user</group-key>
<group-name>Universality Mobile Theme User</group-name>
<group-description>User of theme Mobile</group-description>
<selection-test>
<test-group>
<test>
<attribute-name></attribute-name>
<tester-class>org.jasig.portal.groups.pags.testers.ThemeNameEqualsIgnoreCaseTester</tester-class>
<test-value>UniversalityMobile</test-value>
</test>
</test-group>
</selection-test>
</group>
<group>
<group-key>my-uw-hr-officers</group-key>
<group-name>MyUW HR Officers</group-name>
<group-description>Users permitted to exercise HR Officer authority using
tooling in MyUW.</group-description>
<selection-test>
<test-group>
<test>
<attribute-name>ismemberof</attribute-name>
<tester-class>org.jasig.portal.groups.pags.testers.RegexTester</tester-class>
<test-value>\S*uw:domain\:my\.wisc\.edu\:my_uw_hr_officers\S*</test-value>
</test>
</test-group>
</selection-test>
</group>
<!-- End Theme groups -->
</Group-Store>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd">
<!-- ... redacted irrelevant stuff ... -->
<util:map id="profileKeyMappings">
<entry key="desktop" value="default"/>
<entry key="mobile" value="mobileDefault"/>
<entry key="universality" value="universality"/>
<entry key="respondr" value="respondr" />
<entry key="bucky" value="bucky" />
</util:map>
<util:map id="profileKeyMappingsNoMobile">
<entry key="desktop" value="default"/>
<entry key="universality" value="universality"/>
<entry key="respondr" value="respondr" />
<entry key="bucky" value="bucky" />
</util:map>
<bean id="profileMapper" class="org.jasig.portal.layout.profile.ChainingProfileMapperImpl">
<property name="subMappers">
<!-- The chaining profile mapper applies the first of these that maps to a non-null profile. -->
<util:list>
<!-- 1. If the user requested a particular profile on this login, apply it.
e.g. /Login?profile=mobile : selects mUniversality . -->
<ref bean="sessionAttributeProfileMapper" />
<!-- 2. If the user previously persisted a profile selection, apply it.
e.g., applying a previously stored opt-in to Bucky -->
<ref bean="stickyProfileMapper" />
<!-- 3. If the user agent seems to be one that would benefit from mUniversality, choose that. -->
<ref bean="userAgentProfileMapper" />
</util:list>
</property>
<!-- 4. Fall back on "default" if no mppper maps. -->
<property name="defaultProfileName" value="default" />
</bean>
<bean id="sessionAttributeProfileMapper" class="org.jasig.portal.layout.profile.SessionAttributeProfileMapperImpl"
p:mappings-ref="profileKeyMappings"/>
<bean id="stickyProfileMapper" class="org.jasig.portal.layout.profile.StickyProfileMapperImpl"
p:mappings-ref="profileKeyMappingsNoMobile"
p:profileKeyForNoSelection="default">
<property name="profileSelectionRegistry">
<bean class="org.jasig.portal.layout.profile.ProfileSelectionRegistry">
<property name="profileSelectionDao">
<bean class="org.jasig.portal.layout.profile.dao.jpa.ProfileSelectionDaoImpl" />
</property>
</bean>
</property>
</bean>
<bean id="userAgentProfileMapper" class="org.jasig.portal.layout.profile.UserAgentProfileMapper">
<property name="mappings">
<list>
<!-- mobile device -->
<bean class="org.jasig.portal.layout.profile.UserAgentProfileMapper.Mapping">
<property name="pattern" value="${mobile.user.agent.regex}"/>
<property name="profileName" value="mobileDefault" />
</bean>
</list>
</property>
</bean>
<!-- ... more redacted irrelevant stuff ... -->
</beans>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment