Skip to content
Snippets Groups Projects
Commit 9ad34bc7 authored by srosse's avatar srosse
Browse files

OO-4058: principal have only read-only views on curriculums

parent 467f2eb8
No related branches found
No related tags found
No related merge requests found
...@@ -252,11 +252,14 @@ public class CurriculumDAO { ...@@ -252,11 +252,14 @@ public class CurriculumDAO {
sb.append(")"); sb.append(")");
} }
if(params.getElementOwner() != null || params.getCurriculumAdmin() != null) { if(params.getElementOwner() != null || params.getCurriculumAdmin() != null || params.getCurriculumPrincipal() != null) {
sb.and() sb.and()
.append("("); .append("(");
boolean needOr = false;
if(params.getElementOwner() != null) { if(params.getElementOwner() != null) {
needOr = true;
sb.append("exists (select courseCurEl.key from curriculumelement as courseCurEl") sb.append("exists (select courseCurEl.key from curriculumelement as courseCurEl")
.append(" inner join repoentrytogroup as curRelGroup on (courseCurEl.group.key=curRelGroup.group.key)") .append(" inner join repoentrytogroup as curRelGroup on (courseCurEl.group.key=curRelGroup.group.key)")
.append(" inner join repoentrytogroup as courseRelGroup on (courseRelGroup.entry.key=curRelGroup.entry.key)") .append(" inner join repoentrytogroup as courseRelGroup on (courseRelGroup.entry.key=curRelGroup.entry.key)")
...@@ -273,13 +276,25 @@ public class CurriculumDAO { ...@@ -273,13 +276,25 @@ public class CurriculumDAO {
} }
if(params.getCurriculumAdmin() != null) { if(params.getCurriculumAdmin() != null) {
if(params.getElementOwner() != null) { if(needOr) {
sb.append(" or "); sb.append(" or ");
} }
needOr = true;
sb.append("exists (select membership.key from bgroupmember as membership") sb.append("exists (select membership.key from bgroupmember as membership")
.append(" where membership.identity.key=:managerKey") .append(" where membership.identity.key=:managerKey")
.append(" and (membership.group.key=baseGroup.key or membership.group.key=organis.group.key)") .append(" and (membership.group.key=baseGroup.key or membership.group.key=organis.group.key)")
.append(" and role ").in(CurriculumRoles.curriculumowner, CurriculumRoles.curriculummanager, OrganisationRoles.administrator, OrganisationRoles.principal) .append(" and role ").in(CurriculumRoles.curriculumowner, CurriculumRoles.curriculummanager, OrganisationRoles.administrator)
.append(")");
}
if(params.getCurriculumPrincipal() != null) {
if(needOr) {
sb.append(" or ");
}
sb.append("exists (select membership.key from bgroupmember as membership")
.append(" where membership.identity.key=:principalKey")
.append(" and (membership.group.key=baseGroup.key or membership.group.key=organis.group.key)")
.append(" and role ").in(OrganisationRoles.principal)
.append(")"); .append(")");
} }
...@@ -305,6 +320,9 @@ public class CurriculumDAO { ...@@ -305,6 +320,9 @@ public class CurriculumDAO {
if(params.getCurriculumAdmin() != null) { if(params.getCurriculumAdmin() != null) {
query.setParameter("managerKey", params.getCurriculumAdmin().getKey()); query.setParameter("managerKey", params.getCurriculumAdmin().getKey());
} }
if(params.getCurriculumPrincipal() != null) {
query.setParameter("principalKey", params.getCurriculumPrincipal().getKey());
}
if(params.getElementOwner() != null) { if(params.getElementOwner() != null) {
query.setParameter("ownerKey", params.getElementOwner().getKey()); query.setParameter("ownerKey", params.getElementOwner().getKey());
} }
......
...@@ -36,6 +36,7 @@ public class CurriculumSearchParameters { ...@@ -36,6 +36,7 @@ public class CurriculumSearchParameters {
private String searchString; private String searchString;
private Identity elementOwner; private Identity elementOwner;
private Identity managerIdentity; private Identity managerIdentity;
private Identity principalIdentity;
private List<? extends OrganisationRef> organisations; private List<? extends OrganisationRef> organisations;
public List<? extends OrganisationRef> getOrganisations() { public List<? extends OrganisationRef> getOrganisations() {
...@@ -66,8 +67,16 @@ public class CurriculumSearchParameters { ...@@ -66,8 +67,16 @@ public class CurriculumSearchParameters {
* *
* @param managerIdentity * @param managerIdentity
*/ */
public void setCurriculumAdmin(Identity managerIdentity) { public void setCurriculumAdmin(Identity identity) {
this.managerIdentity = managerIdentity; managerIdentity = identity;
}
public Identity getCurriculumPrincipal() {
return principalIdentity;
}
public void setCurriculumPrincipal(Identity identity) {
principalIdentity = identity;
} }
public Identity getElementOwner() { public Identity getElementOwner() {
...@@ -79,7 +88,7 @@ public class CurriculumSearchParameters { ...@@ -79,7 +88,7 @@ public class CurriculumSearchParameters {
* *
* @param elementOwner * @param elementOwner
*/ */
public void setElementOwner(Identity elementOwner) { public void setElementOwner(Identity identity) {
this.elementOwner = elementOwner; elementOwner = identity;
} }
} }
...@@ -20,7 +20,9 @@ ...@@ -20,7 +20,9 @@
package org.olat.modules.curriculum.ui; package org.olat.modules.curriculum.ui;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.olat.core.gui.UserRequest; import org.olat.core.gui.UserRequest;
...@@ -52,6 +54,7 @@ import org.olat.core.gui.control.controller.BasicController; ...@@ -52,6 +54,7 @@ import org.olat.core.gui.control.controller.BasicController;
import org.olat.core.gui.control.generic.closablewrapper.CloseableCalloutWindowController; import org.olat.core.gui.control.generic.closablewrapper.CloseableCalloutWindowController;
import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController; import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController;
import org.olat.core.gui.control.generic.dtabs.Activateable2; import org.olat.core.gui.control.generic.dtabs.Activateable2;
import org.olat.core.id.Roles;
import org.olat.core.id.context.ContextEntry; import org.olat.core.id.context.ContextEntry;
import org.olat.core.id.context.StateEntry; import org.olat.core.id.context.StateEntry;
import org.olat.core.util.resource.OresHelper; import org.olat.core.util.resource.OresHelper;
...@@ -89,6 +92,7 @@ public class CurriculumListManagerController extends FormBasicController impleme ...@@ -89,6 +92,7 @@ public class CurriculumListManagerController extends FormBasicController impleme
private CloseableCalloutWindowController toolsCalloutCtrl; private CloseableCalloutWindowController toolsCalloutCtrl;
private int counter = 0; private int counter = 0;
private final Roles roles;
private final CurriculumSecurityCallback secCallback; private final CurriculumSecurityCallback secCallback;
@Autowired @Autowired
...@@ -99,6 +103,7 @@ public class CurriculumListManagerController extends FormBasicController impleme ...@@ -99,6 +103,7 @@ public class CurriculumListManagerController extends FormBasicController impleme
super(ureq, wControl, "manage_curriculum"); super(ureq, wControl, "manage_curriculum");
this.toolbarPanel = toolbarPanel; this.toolbarPanel = toolbarPanel;
this.secCallback = secCallback; this.secCallback = secCallback;
roles = ureq.getUserSession().getRoles();
toolbarPanel.addListener(this); toolbarPanel.addListener(this);
initForm(ureq); initForm(ureq);
...@@ -143,12 +148,29 @@ public class CurriculumListManagerController extends FormBasicController impleme ...@@ -143,12 +148,29 @@ public class CurriculumListManagerController extends FormBasicController impleme
} }
private void loadModel(String searchString, boolean reset) { private void loadModel(String searchString, boolean reset) {
// curriculum owners, curriculum manages and administrators can edit curriculums
// principals can only view them
CurriculumSearchParameters managerParams = new CurriculumSearchParameters(); CurriculumSearchParameters managerParams = new CurriculumSearchParameters();
managerParams.setSearchString(searchString); managerParams.setSearchString(searchString);
managerParams.setCurriculumAdmin(getIdentity()); managerParams.setCurriculumAdmin(getIdentity());
List<CurriculumInfos> managerCurriculums = curriculumService.getCurriculumsWithInfos(managerParams); List<CurriculumInfos> managerCurriculums = curriculumService.getCurriculumsWithInfos(managerParams);
List<CurriculumRow> rows = managerCurriculums.stream() List<CurriculumRow> rows = managerCurriculums.stream()
.map(this::forgeManagedRow).collect(Collectors.toList()); .map(cur -> forgeManagedRow(cur, true)).collect(Collectors.toList());
Set<CurriculumRow> deduplicateRows = new HashSet<>(rows);
if(roles.isPrincipal()) {
CurriculumSearchParameters principalParams = new CurriculumSearchParameters();
principalParams.setSearchString(searchString);
principalParams.setCurriculumPrincipal(getIdentity());
List<CurriculumInfos> principalsCurriculums = curriculumService.getCurriculumsWithInfos(principalParams);
List<CurriculumRow> principalsRows = principalsCurriculums.stream()
.map(cur -> forgeManagedRow(cur, false))
.filter(row -> !deduplicateRows.contains(row))
.collect(Collectors.toList());
rows.addAll(principalsRows);
deduplicateRows.addAll(principalsRows);
}
CurriculumSearchParameters ownerParams = new CurriculumSearchParameters(); CurriculumSearchParameters ownerParams = new CurriculumSearchParameters();
ownerParams.setSearchString(searchString); ownerParams.setSearchString(searchString);
...@@ -156,7 +178,9 @@ public class CurriculumListManagerController extends FormBasicController impleme ...@@ -156,7 +178,9 @@ public class CurriculumListManagerController extends FormBasicController impleme
List<CurriculumInfos> reOwnersCurriculums = curriculumService.getCurriculumsWithInfos(ownerParams); List<CurriculumInfos> reOwnersCurriculums = curriculumService.getCurriculumsWithInfos(ownerParams);
List<CurriculumRow> reOwnerRows = reOwnersCurriculums.stream() List<CurriculumRow> reOwnerRows = reOwnersCurriculums.stream()
.filter(c -> !managerCurriculums.contains(c)) .filter(c -> !managerCurriculums.contains(c))
.map(CurriculumRow::new).collect(Collectors.toList()); .map(CurriculumRow::new)
.filter(row -> !deduplicateRows.contains(row))
.collect(Collectors.toList());
rows.addAll(reOwnerRows); rows.addAll(reOwnerRows);
...@@ -170,10 +194,10 @@ public class CurriculumListManagerController extends FormBasicController impleme ...@@ -170,10 +194,10 @@ public class CurriculumListManagerController extends FormBasicController impleme
* @param curriculum The curriculum informations * @param curriculum The curriculum informations
* @return A curriculum row * @return A curriculum row
*/ */
private CurriculumRow forgeManagedRow(CurriculumInfos curriculum) { private CurriculumRow forgeManagedRow(CurriculumInfos curriculum, boolean canManage) {
FormLink toolsLink = uifactory.addFormLink("tools_" + (++counter), "tools", "", null, null, Link.NONTRANSLATED); FormLink toolsLink = uifactory.addFormLink("tools_" + (++counter), "tools", "", null, null, Link.NONTRANSLATED);
toolsLink.setIconLeftCSS("o_icon o_icon_actions o_icon-lg"); toolsLink.setIconLeftCSS("o_icon o_icon_actions o_icon-lg");
CurriculumRow row = new CurriculumRow(curriculum, toolsLink, true); CurriculumRow row = new CurriculumRow(curriculum, toolsLink, canManage);
toolsLink.setUserObject(row); toolsLink.setUserObject(row);
return row; return row;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment