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