Author: tdraier
Date: Fri Sep 14 13:47:17 2007
New Revision: 18498

URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D18498&repname=
=3Djahia
Log:
fixed and optimized update script (port 18378)

Modified:
    trunk/core/src/webapp/WEB-INF/etc/patches/aclpatch_17886.groovy

Modified: trunk/core/src/webapp/WEB-INF/etc/patches/aclpatch_17886.groovy
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/webapp=
/WEB-INF/etc/patches/aclpatch_17886.groovy&rev=3D18498&repname=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/webapp/WEB-INF/etc/patches/aclpatch_17886.groovy (origin=
al)
+++ trunk/core/src/webapp/WEB-INF/etc/patches/aclpatch_17886.groovy Fri Sep=
 14 13:47:17 2007
@@ -13,110 +13,145 @@
 import org.jahia.services.version.EntryLoadRequest
 import org.jahia.services.fields.ContentField
 import org.jahia.services.containers.ContentContainerList
-
-    JahiaACLManagerService service =3D ServicesRegistry.getInstance().getJ=
ahiaACLManagerService();
-
-    private void parseObject (ContentObject object, JahiaBaseACL currentAc=
l, Set toDelete) throws Exception {
-        JahiaAcl currentObjectAcl =3D object.getACL().getACL();
-
-        print(object.getObjectKey().toString() + " , aclid =3D "+currentOb=
jectAcl.getAclID());
-        print(" - " + WorkflowService.getInstance().getStagingLanguages((C=
ontentObjectKey) object.getObjectKey(), object.getSiteID()));
-        if (currentObjectAcl.getAclID() !=3D currentAcl.getID()) {
-            if (!currentObjectAcl.getEntries().isEmpty()) {
-                JahiaBaseACL parentAcl =3D currentAcl;
-                currentAcl =3D object.getACL();
-                currentAcl.getACL().setHasEntries(new Integer(1));
-                currentAcl.setParentID(parentAcl.getID());
-                print(" has entries, set parentacl to "+parentAcl.getID());
-            } else if (object.getPickedObject() !=3D null && (
-                    object.getParent(null).getPickedObject() =3D=3D null ||
-                    (!object.getPickedObject().getACL().getACL().getEntrie=
s().isEmpty() && !object.getPickedObject().isAclSameAsParent()))) {
-
-                JahiaBaseACL parentAcl =3D currentAcl;
-                currentAcl =3D object.getACL();
-                currentAcl.getACL().setHasEntries(new Integer(0));
-                currentAcl.setParentID(parentAcl.getID());
-
-                print(" is a picker, keep it" + object.getParent(null).get=
PickedObject() + "/ "+object.getPickedObject().getACL().getACL().getEntries=
());
-            } else {
-                print(" is empty, set to "+currentAcl.getID());
-                int old =3D object.getACL().getID();
-                toDelete.add(new Integer(old));
-                object.setAclID(currentAcl.getID());
-                if (!(object instanceof ContentField)) {
-                    List mds =3D object.getMetadatas();
-                    Iterator iterator =3D mds.iterator();
-                    while (iterator.hasNext()) {
-                        ContentField md =3D (ContentField) iterator.next();
-                        md.setAclID(currentAcl.getID());
-                    }
-                }
-                if (object instanceof ContentContainerList) {
-                    Map properties =3D ((ContentContainerList)object).getP=
roperties();
-                    Iterator iterator =3D properties.keySet().iterator();
-                    while(iterator.hasNext()) {
-                        String key =3D (String) iterator.next();
-                        if (key.startsWith("view_field_acl_")) {
-                            int acl =3D Integer.parseInt((String) properti=
es.get(key));
-                            if (acl =3D=3D old) {
-                                object.setProperty(key, Integer.toString(c=
urrentAcl.getID()));
-                            } else {
-                                JahiaBaseACL.getACL(acl, null).setParentID=
(currentAcl.getID());
-                            }
+import org.jahia.services.containers.ContentContainer
+import org.jahia.content.*
+import org.jahia.services.database.ConnectionDispenser
+import java.sql.*;
+
+Connection connection =3D ConnectionDispenser.getConnection();
+Map statements =3D new HashMap()
+statements.put(ContentFieldKey.FIELD_TYPE,connection.prepareStatement("upd=
ate jahia_fields_data set rights_jahia_fields_data=3D? where id_jahia_field=
s_data=3D?"))
+statements.put(ContentPageKey.PAGE_TYPE,connection.prepareStatement("updat=
e jahia_pages_data set rights_jahia_pages_data=3D? where id_jahia_pages_dat=
a=3D?"))
+statements.put(ContentContainerKey.CONTAINER_TYPE,connection.prepareStatem=
ent("update jahia_ctn_entries set rights_jahia_ctn_entries=3D? where id_jah=
ia_ctn_entries=3D?"))
+statements.put(ContentContainerListKey.CONTAINERLIST_TYPE,connection.prepa=
reStatement("update jahia_ctn_lists set rights_jahia_ctn_lists=3D? where id=
_jahia_ctn_lists=3D?"))
+statements.put(ContentMetadataKey.METADATA_TYPE,connection.prepareStatemen=
t("update jahia_fields_data set rights_jahia_fields_data=3D? where id_jahia=
_obj=3D? and type_jahia_obj=3D?"))
+
+private void parseObject (ContentObject object, JahiaBaseACL currentAcl, S=
et toDelete, Connection connection, Set ctnlistprops, Map statements) throw=
s Exception {
+    JahiaAcl currentObjectAcl =3D object.getACL().getACL();
+
+    print(object.getObjectKey().toString() + " , aclid =3D "+currentObject=
Acl.getAclID());
+//    print(" - " + WorkflowService.getInstance().getStagingLanguages((Con=
tentObjectKey) object.getObjectKey(), object.getSiteID()));
+    if (currentObjectAcl.getAclID() !=3D currentAcl.getID()) {
+        if (!currentObjectAcl.getEntries().isEmpty()) {
+            JahiaBaseACL parentAcl =3D currentAcl;
+            currentAcl =3D object.getACL();
+            currentAcl.getACL().setHasEntries(new Integer(1));
+            currentAcl.setParentID(parentAcl.getID());
+            print(" has entries, set parentacl to "+parentAcl.getID());
+        } else if (object.getPickedObject() !=3D null && (
+        object.getParent(null).getPickedObject() =3D=3D null ||
+                (!object.getPickedObject().getACL().getACL().getEntries().=
isEmpty() && !object.getPickedObject().isAclSameAsParent()))) {
+
+            JahiaBaseACL parentAcl =3D currentAcl;
+            currentAcl =3D object.getACL();
+            currentAcl.getACL().setHasEntries(new Integer(0));
+            currentAcl.setParentID(parentAcl.getID());
+
+            print(" is a picker, keep it" + object.getParent(null).getPick=
edObject() + "/ "+object.getPickedObject().getACL().getACL().getEntries());
+        } else {
+            print(" is empty, set to "+currentAcl.getID());
+            int old =3D object.getACL().getID();
+            toDelete.add(new Integer(old));
+            updateAcl(object,currentAcl.getID(), connection,statements);
+            if (object instanceof ContentContainerList && ctnlistprops.con=
tains(object.getID())) {
+                Map properties =3D ((ContentContainerList)object).getPrope=
rties();
+                Iterator iterator =3D properties.keySet().iterator();
+                while(iterator.hasNext()) {
+                    String key =3D (String) iterator.next();
+                    if (key.startsWith("view_field_acl_")) {
+                        int acl =3D Integer.parseInt((String) properties.g=
et(key));
+                        JahiaBaseACL jacl =3D new JahiaBaseACL(acl);
+                        if (acl =3D=3D old || jacl.getACL().getEntries().i=
sEmpty()) {
+                            ((ContentContainerList)object).setProperty(key=
, ""+currentAcl.getID());
+                            toDelete.add(new Integer(acl));
+                        } else {
+                            JahiaBaseACL.getACL(acl, null).setParentID(cur=
rentAcl.getID());
                         }
                     }
-
                 }
+                ServicesRegistry.getInstance().getJahiaContainersService()=
.setContainerListProperties(object.getID(), object.getSiteID(), properties);
             }
         }
+    }
 =

-        println();
-
-        List objects =3D object.getChilds(null, null);
-        Iterator iterator =3D objects.iterator();
-        while(iterator.hasNext()) {
-            ContentObject child =3D (ContentObject) iterator.next();
-            parseObject(child, currentAcl, toDelete);
-        }
+    println();
 =

+    List objects =3D object.getChilds(null, null);
+    Iterator iterator =3D objects.iterator();
+    while(iterator.hasNext()) {
+        ContentObject child =3D (ContentObject) iterator.next();
+        parseObject(child, currentAcl, toDelete, connection, ctnlistprops,=
 statements);
     }
 =

-    private void parseObjectForPickers(ContentObject object) throws Except=
ion {
-        JahiaAcl currentObjectAcl =3D object.getACL().getACL();
+}
+
+private void updateAcl(ContentObject object, int aclId, Connection connect=
ion, Map statements) {
+    PreparedStatement ps =3D (PreparedStatement) statements.get(object.get=
ObjectKey().getType())
+
+    ps.setInt(1,aclId);
+    ps.setInt(2,object.getID());
+    ps.execute();
+
+    if (!(object instanceof ContentField)) {
+        ps =3D (PreparedStatement) statements.get(ContentMetadataKey.METAD=
ATA_TYPE);
+        ps.setInt(1,aclId);
+        ps.setInt(2,object.getID());
+        ps.setString(3,object.getObjectKey().getType());
+        ps.execute();
+    }
+}
 =

-        if (!object.isAclSameAsParent()) {
-            ContentObject picked =3D object.getPickedObject();
+private void parseObjectForPickers(Connection connection) throws Exception=
 {
 =

-            if (picked !=3D null) {
-                print(object.getObjectKey().toString() + " , aclid =3D "+c=
urrentObjectAcl.getAclID());
-                print(" is a picker, update acl link to "+picked.getAclID(=
));
-                currentObjectAcl.setPickedAclId(new Integer(picked.getAclI=
D()));
-                service.updateCache(currentObjectAcl);
+    Statement st =3D connection.createStatement();
+    ResultSet rs =3D st.executeQuery("select left_oid, right_oid from jahi=
a_link where type like '%_picker_relationship' order by id");
+    while (rs.next()) {
+        ContentObjectKey source =3D (ContentObjectKey) ContentObjectKey.ge=
tInstance(rs.getString(1));
+        ContentObjectKey dest =3D (ContentObjectKey) ContentObjectKey.getI=
nstance(rs.getString(2));
+        ContentObject object =3D (ContentObject)ContentObject.getInstance(=
source);
+        ContentObject picker =3D (ContentObject)ContentObject.getInstance(=
dest);
+
+        JahiaAcl pickerObjectAcl =3D picker.getACL().getACL();
+
+        if (!picker.isAclSameAsParent()) {
+            if (picker !=3D null) {
+                print(object.getObjectKey().toString() + " , aclid =3D "+p=
icker.getAclID());
+                print(" is a picker, update acl link to "+object.getAclID(=
));
+                pickerObjectAcl.setPickedAclId(new Integer(object.getAclID=
()));
+                ServicesRegistry.getInstance().getJahiaACLManagerService()=
.updateCache(pickerObjectAcl);
                 println();
             }
         }
-        List objects =3D object.getChilds(null, null);
-        Iterator iterator =3D objects.iterator();
-        while(iterator.hasNext()) {
-            ContentObject child =3D (ContentObject) iterator.next();
-            parseObjectForPickers(child);
-        }
     }
+}
 =

-    Set toDelete =3D new HashSet();
-    Enumeration en =3D ServicesRegistry.getInstance().getJahiaSitesService=
().getSites();
-    while (en.hasMoreElements()) {
-        JahiaSite jahiaSite =3D (JahiaSite) en.nextElement()
-        ContentPage homePage =3D jahiaSite.getHomeContentPage()
-        parseObject(homePage, homePage.getACL(), toDelete)
-        parseObjectForPickers(homePage)
-    }
-    JahiaAclManager aclManager =3D (JahiaAclManager) SpringContextSingleto=
n.getInstance().getContext().getBean(JahiaAclManager.class.getName());
-    Iterator iterator =3D toDelete.iterator();
-    while (iterator.hasNext()) {
-        try {
-            Integer acl =3D (Integer) iterator.next();
-            aclManager.remove(""+acl);
-        } catch (Exception e) {
-        }
+Set toDelete =3D new HashSet();
+
+Statement st =3D connection.createStatement();
+ResultSet rs =3D st.executeQuery("select distinct ctnlistid_ctnlists_prop =
from jahia_ctnlists_prop where name_ctnlists_prop like 'view_field_acl_%'")
+Set ctnlistprops =3D new HashSet();
+while (rs.next()) {
+    int id =3D rs.getInt(1);
+     ctnlistprops.add(id);
+}
+println ("list :"+ctnlistprops)
+
+Enumeration en =3D ServicesRegistry.getInstance().getJahiaSitesService().g=
etSites();
+while (en.hasMoreElements()) {
+    JahiaSite jahiaSite =3D (JahiaSite) en.nextElement()
+    ContentPage homePage =3D jahiaSite.getHomeContentPage()
+    parseObject(homePage, homePage.getACL(), toDelete, connection,ctnlistp=
rops, statements)
+}
+
+parseObjectForPickers(connection)
+
+JahiaAclManager aclManager =3D (JahiaAclManager) SpringContextSingleton.ge=
tInstance().getContext().getBean(JahiaAclManager.class.getName());
+Iterator iterator =3D toDelete.iterator();
+while (iterator.hasNext()) {
+    try {
+        Integer acl =3D (Integer) iterator.next();
+        aclManager.remove(""+acl);
+    } catch (Exception e) {
     }
+}
+connection.close();

_______________________________________________
cvs_list mailing list
[email protected]
http://lists.jahia.org/cgi-bin/mailman/listinfo/cvs_list

Reply via email to