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

Reply via email to