Author: bpapez
Date: Thu Jan 3 11:01:13 2008
New Revision: 19451
URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D19451&repname=
=3Djahia
Log:
JAHIA-2653: DeleteContainer_Engine: no checkWriteAcess done if new pages ar=
e created in a sub-container
- added check through sub-container lists
Modified:
trunk/core/src/java/org/jahia/engines/deletecontainer/DeleteContainer_E=
ngine.java
Modified: trunk/core/src/java/org/jahia/engines/deletecontainer/DeleteConta=
iner_Engine.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/engines/deletecontainer/DeleteContainer_Engine.java&rev=3D19451&re=
pname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/core/src/java/org/jahia/engines/deletecontainer/DeleteContainer_E=
ngine.java (original)
+++ trunk/core/src/java/org/jahia/engines/deletecontainer/DeleteContainer_E=
ngine.java Thu Jan 3 11:01:13 2008
@@ -42,6 +42,7 @@
import org.jahia.registries.ServicesRegistry;
import org.jahia.services.acl.JahiaBaseACL;
import org.jahia.services.cache.HtmlCache;
+import org.jahia.services.containers.ContainerFactoryProxy;
import org.jahia.services.containers.ContentContainer;
import org.jahia.services.fields.ContentField;
import org.jahia.services.lock.LockKey;
@@ -84,7 +85,8 @@
private EngineToolBox toolBox;
=
private TransactionTemplate transactionTemplate =3D null;
-
+ private static JahiaPageService pageService;
+ =
/**
* Default constructor, creates a new <code>DeleteContainer_Engine</co=
de> instance.
*/
@@ -102,6 +104,7 @@
public static DeleteContainer_Engine getInstance() {
if (instance =3D=3D null) {
instance =3D new DeleteContainer_Engine();
+ pageService =3D ServicesRegistry.getInstance().getJahiaPageSer=
vice();
}
return instance;
}
@@ -504,78 +507,101 @@
engineMap.put("futureBrokenLinkObjects", new ArrayList());
engineMap.put("warning", Boolean.FALSE);
engineMap.put("errorMessage", Boolean.FALSE);
- Enumeration theFields =3D theContainer.getFields();
- JahiaPageService pageService =3D ServicesRegistry.getInstance().ge=
tJahiaPageService();
+
JahiaPage page =3D pageService.lookupPage(theContainer.getPageID()=
, jParams);
int pageDefID =3D page.getPageTemplateID();
=
Set objectKeysPointingToDeletedContent =3D new HashSet();
=
- while (theFields.hasMoreElements()) {
- JahiaField theField =3D (JahiaField) theFields.nextElement();
- int fieldType =3D theField.getDefinition().getType(pageDefID);
- fieldType =3D (fieldType !=3D 0) ? fieldType : theField.getTyp=
e();
-
- // checks if deleting the container means deleting pages
- if (fieldType =3D=3D FieldTypes.PAGE) {
- JahiaPage thePage =3D (JahiaPage) theField.getObject();
- if (thePage !=3D null) {
- if (!thePage.getContentPage().checkWriteAccess(jParams=
.getUser(), true, true)) {
- engineMap.put("errorMessage", Boolean.TRUE);
- break;
- }
- objectKeysPointingToDeletedContent.addAll(
- contentObjectPointingOnPage(thePage.getID()));
+ checkContainerAccessRights(theContainer, pageDefID, objectKeysPoin=
tingToDeletedContent, jParams, engineMap);
+
+ /**
+ * todo we should also be checking in sub container lists here for
+ * all containers and all fields that contain pages.
+ */
+
+ } // end composeWarningMessages
+ =
+ private boolean checkContainerAccessRights(JahiaContainer theContainer=
, int pageDefID,
+ Set objectKeysPointingToDeletedContent, ProcessingContext jPar=
ams, HashMap engineMap) throws JahiaException {
+ boolean allowed =3D true;
+ JahiaContainer currentContainer =3D (JahiaContainer) engineMap.get=
("theContainer");
+ if (currentContainer !=3D null && currentContainer.getID() =3D=3D =
theContainer.getID()) {
+ ContainerFactoryProxy cFactory =3D new ContainerFactoryProxy(C=
ontainerFactoryProxy.LOAD_SUBCONTAINER_LISTS,
+ jParams, jParams.getEntryLoadRequest(), null, null, nu=
ll);
+ theContainer.setFactoryProxy(cFactory);
+ }
+ Enumeration containerLists =3D theContainer.getContainerLists();
+ while (allowed && containerLists.hasMoreElements()) {
+ JahiaContainerList theList =3D (JahiaContainerList) containerL=
ists.nextElement();
+ Enumeration subContainers =3D theList.getContainers();
+ while (allowed && subContainers.hasMoreElements()) {
+ JahiaContainer subContainer =3D (JahiaContainer) subContai=
ners.nextElement();
+ if (subContainer !=3D null) {
+ allowed =3D checkContainerAccessRights(subContainer, p=
ageDefID, objectKeysPointingToDeletedContent,
+ jParams, engineMap);
+ }
+ }
+ }
+
+ if (allowed) {
+ Enumeration theFields =3D theContainer.getFields();
=
- Set deletedPageIDs =3D pageService.getUncheckedPageSub=
TreeIDs(thePage.getID(),
- true, PAGE_LIST_SIZE_LIMIT + 1);
- List deletedPages =3D new ArrayList(deletedPageIDs.siz=
e());
- List deletedLinks =3D new ArrayList();
- =
- if (deletedPageIDs.size() <=3D PAGE_LIST_SIZE_LIMIT) {
- deletedLinks =3D new ArrayList(ServicesRegistry
- .getInstance().getJahiaPageService()
- .getPagesPointingOnPage(thePage.getID(),
- jParams));
-
- for (Iterator it =3D deletedPageIDs.iterator(); it
- .hasNext();) {
- int aPageID =3D ((Integer) it.next()).intValue=
();
- objectKeysPointingToDeletedContent
- .addAll(contentObjectPointingOnPage(aP=
ageID));
- deletedLinks.addAll(pageService.getPagesPointi=
ngOnPage(aPageID, jParams));
- deletedPages.add(pageService.lookupPage(aPageI=
D, jParams)); =
+ while (allowed && theFields.hasMoreElements()) {
+ JahiaField theField =3D (JahiaField) theFields.nextElement=
();
+ int fieldType =3D theField.getDefinition().getType(pageDef=
ID);
+ fieldType =3D (fieldType !=3D 0) ? fieldType : theField.ge=
tType();
+
+ // checks if deleting the container means deleting pages
+ if (fieldType =3D=3D FieldTypes.PAGE) {
+ JahiaPage thePage =3D (JahiaPage) theField.getObject();
+ if (thePage !=3D null) {
+ if (!thePage.getContentPage().checkWriteAccess(jPa=
rams.getUser(), true, true)) {
+ engineMap.put("errorMessage", Boolean.TRUE);
+ allowed =3D false;
+ break;
}
- } else {
- for (Iterator it =3D deletedPageIDs.iterator(); it
- .hasNext();) {
- deletedPages.add(pageService.lookupPage(((Integ=
er)it.next()).intValue(), jParams));
+
+ objectKeysPointingToDeletedContent.addAll(contentO=
bjectPointingOnPage(thePage.getID()));
+
+ Set deletedPageIDs =3D pageService.getUncheckedPag=
eSubTreeIDs(thePage.getID(), true,
+ PAGE_LIST_SIZE_LIMIT + 1);
+ List deletedPages =3D new ArrayList(deletedPageIDs=
.size());
+ List deletedLinks =3D new ArrayList();
+
+ if (deletedPageIDs.size() <=3D PAGE_LIST_SIZE_LIMI=
T) {
+ deletedLinks =3D new ArrayList(ServicesRegistr=
y.getInstance().getJahiaPageService()
+ .getPagesPointingOnPage(thePage.getID(=
), jParams));
+
+ for (Iterator it =3D deletedPageIDs.iterator()=
; it.hasNext();) {
+ int aPageID =3D ((Integer) it.next()).intV=
alue();
+ objectKeysPointingToDeletedContent.addAll(=
contentObjectPointingOnPage(aPageID));
+ deletedLinks.addAll(pageService.getPagesPo=
intingOnPage(aPageID, jParams));
+ deletedPages.add(pageService.lookupPage(aP=
ageID, jParams));
+ }
+ } else {
+ for (Iterator it =3D deletedPageIDs.iterator()=
; it.hasNext();) {
+ deletedPages.add(pageService.lookupPage(((=
Integer) it.next()).intValue(), jParams));
+ }
+ }
+
+ engineMap.put("deletedPages", deletedPages);
+ engineMap.put("deletedLinks", deletedLinks);
+
+ ArrayList hardcodedLinkSourceObject =3D buildHardc=
odedSourceInfo(
+ objectKeysPointingToDeletedContent, jParam=
s);
+ engineMap.put("futureBrokenLinkObjects", hardcoded=
LinkSourceObject);
+ if (!deletedPages.isEmpty() || !deletedLinks.isEmp=
ty()
+ || !objectKeysPointingToDeletedContent.isE=
mpty()) {
+ engineMap.put("warning", Boolean.TRUE);
}
- }
- =
- engineMap.put("deletedPages", deletedPages);
- engineMap.put("deletedLinks", deletedLinks);
- =
- ArrayList hardcodedLinkSourceObject =3D
- buildHardcodedSourceInfo(
- objectKeysPointingToDeletedContent, jP=
arams);
- engineMap.put("futureBrokenLinkObjects",
- hardcodedLinkSourceObject);
- if (!deletedPages.isEmpty() || !deletedLinks.isEmpty()=
||
- !objectKeysPointingToDeletedContent.isEmpty())=
{
- engineMap.put("warning", Boolean.TRUE);
}
}
}
=
}
-
- /**
- * todo we should also be checking in sub container lists here for
- * all containers and all fields that contain pages.
- */
-
- } // end composeWarningMessages
+ return allowed;
+ }
=
private Set contentObjectPointingOnPage(int pageID)
throws JahiaException {
_______________________________________________
cvs_list mailing list
[email protected]
http://lists.jahia.org/cgi-bin/mailman/listinfo/cvs_list