Author: xlawrence
Date: Wed Jun 27 16:31:41 2007
New Revision: 17803

URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D17803&repname=
=3Djahia
Log:
backport fix on versioning engine locks

Modified:
    trunk/core/src/java/org/jahia/ajax/sitemap/SiteMapAbstractAction.java

Modified: trunk/core/src/java/org/jahia/ajax/sitemap/SiteMapAbstractAction.=
java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/ajax/sitemap/SiteMapAbstractAction.java&rev=3D17803&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/java/org/jahia/ajax/sitemap/SiteMapAbstractAction.java (=
original)
+++ trunk/core/src/java/org/jahia/ajax/sitemap/SiteMapAbstractAction.java W=
ed Jun 27 16:31:41 2007
@@ -32,8 +32,13 @@
 import org.jahia.gui.HTMLToolBox;
 import org.jahia.params.ParamBean;
 import org.jahia.params.ProcessingContext;
+import org.jahia.registries.ServicesRegistry;
 import org.jahia.resourcebundle.JahiaResourceBundle;
+import org.jahia.services.acl.JahiaACLManagerService;
+import org.jahia.services.acl.JahiaBaseACL;
 import org.jahia.services.fields.ContentSmallTextField;
+import org.jahia.services.fields.URLIntegrityValidForActivationResults;
+import org.jahia.services.fields.WAIValidForActivationResults;
 import org.jahia.services.lock.LockKey;
 import org.jahia.services.lock.LockService;
 import org.jahia.services.pages.ContentPage;
@@ -64,6 +69,7 @@
     protected static final WorkflowService workflowService =3D servicesReg=
istry.getWorkflowService();
     protected static final LockService lockRegistry =3D servicesRegistry.g=
etLockService();
     protected static final JahiaVersionService jahiaVersionService =3D ser=
vicesRegistry.getJahiaVersionService();
+    protected static final JahiaACLManagerService aclService =3D servicesR=
egistry.getJahiaACLManagerService();
 =

     protected static final String DISPLAY_PARAM =3D "display";
     protected static final String INACTIVE =3D "Inactive";
@@ -122,11 +128,11 @@
                         final ContentObject main =3D workflowService.getMa=
inLinkObject(contentObject);
                         // check for cyclic situation
                         //if ( main !=3D null && !main.getObjectKey().equa=
ls(object.getObjectKey()) ){
-
-                        if ((main instanceof ContentPage && ((ContentPage)=
main).getParentID(EntryLoadRequest.STAGED) !=3D object.getPageID()) ||
-                             (!(main instanceof ContentPage) && main.getPa=
geID() !=3D object.getPageID())) {
+                        if ((main instanceof ContentPage && ((ContentPage)=
 main).getParentID(EntryLoadRequest.STAGED) !=3D object.getPageID()) ||
+                                (!(main instanceof ContentPage) && main.ge=
tPageID() !=3D object.getPageID())) {
                             continue;
                         }
+
                         v.add(main);
 =

                     } else {
@@ -167,8 +173,7 @@
                                final PagesFilter pagesFilter) throws Jahia=
Exception {
 =

         // Moved page, only show the actual moved page, not where it was p=
reviously
-        if ((page.hasSameParentID() !=3D ContentPage.SAME_PARENT) && (page=
.getParentID(jParams) !=3D parentID)
-                && (page.getID() !=3D parentID) ) {
+        if ((page.getParentID(jParams) !=3D parentID) && (page.getID() !=
=3D parentID)) {
             return;
         }
 =

@@ -314,7 +319,9 @@
                         }
                     }
 =

-                    if (languageState =3D=3D null || languageState.intValu=
e() =3D=3D -1) {
+                    final String langTitle =3D (String) titles.get(languag=
eCode);
+                    if (languageState =3D=3D null || languageState.intValu=
e() =3D=3D -1 || langTitle =3D=3D null || langTitle.length() =3D=3D 0)
+                    {
                         lang.appendChild(resp.createTextNode("-1"));
                     } else {
                         lang.appendChild(resp.createTextNode(languageState=
.toString()));
@@ -388,24 +395,45 @@
                                 languageState =3D new Integer(EntryLoadReq=
uest.STAGING_WORKFLOW_STATE);
                             }
                         }
-                        boolean isStaging =3D languageState.intValue() > E=
ntryLoadRequest.ACTIVE_WORKFLOW_STATE;
+                        final boolean isStaging =3D languageState.intValue=
() > EntryLoadRequest.ACTIVE_WORKFLOW_STATE;
+                        final boolean isLocked;
+                        if (jParams.settings().areLocksActivated()) {
+                            final LockKey lockKey =3D LockKey.composeLockK=
ey(LockKey.WORKFLOW_ACTION + "_" +
+                                    ContentPageKey.PAGE_TYPE, page.getID()=
);
+                            final LockService lockService =3D ServicesRegi=
stry.getInstance().getLockService();
+                            isLocked =3D ! lockService.acquire(lockKey, cu=
rrentUser,
+                                    currentUser.getUserKey(),
+                                    jParams.getSessionState().getMaxInacti=
veInterval());
+                            if (isLocked) {
+                                item.setAttribute("locked", "locked");
+                            } else {
+                                Set locks =3D (Set) jParams.getSessionStat=
e().getAttribute("VersionningLocks");
+                                if (locks =3D=3D null) {
+                                    locks =3D new HashSet();
+                                }
+                                locks.add(lockKey);
+                                jParams.getSessionState().setAttribute("Ve=
rsionningLocks", locks);
+                            }
+                        } else {
+                            isLocked =3D false;
+                        }
 =

                         final boolean allowPageSelection =3D page.checkWri=
teAccess(jParams.getUser());
                         final Set selectedPages =3D pagesVersViewHelper.ge=
tSelectedPages();
 =

                         if (pagesVersViewHelper.getOperationType() =3D=3D =
1) { // Undo Staging
-                            if (!allowPageSelection || existOnlyInStaging =
|| !isStaging) {
+                            if (isLocked || !allowPageSelection || existOn=
lyInStaging || !isStaging) {
                                 lang.setAttribute("Disable", "Disable");
                             }
-                            if (isStaging && hasArchiveEntryBeforeRestoreD=
ate &&
+                            if (! isLocked && isStaging && hasArchiveEntry=
BeforeRestoreDate &&
                                     selectedPages.contains(page.getObjectK=
ey())) {
                                 lang.setAttribute("checked", "checked");
                             }
                         } else if (pagesVersViewHelper.getOperationType() =
=3D=3D 2) { // Restore Archive
-                            if (!allowPageSelection || !hasArchiveEntryBef=
oreRestoreDate || wasDeleted) {
+                            if (isLocked || !allowPageSelection || !hasArc=
hiveEntryBeforeRestoreDate || wasDeleted) {
                                 lang.setAttribute("Disable", "Disable");
                             }
-                            if (!(!hasArchiveEntryBeforeRestoreDate || was=
Deleted) &&
+                            if (!isLocked && hasArchiveEntryBeforeRestoreD=
ate && !wasDeleted &&
                                     selectedPages.contains(page.getObjectK=
ey())) {
                                 lang.setAttribute("checked", "checked");
                             }
@@ -423,6 +451,7 @@
                             logger.debug("Page: " + key + " is deleted");
                         } else {
                             lang.appendChild(resp.createTextNode(languageS=
tate.toString()));
+
                         }
                     } else {
                         lang.appendChild(resp.createTextNode("-3"));
@@ -554,7 +583,12 @@
         final HTMLToolBox html =3D new GuiBean(jParams).html();
         final Set languageCodes =3D getLanguageSet(locales);
 =

-        final ActivationTestResults results =3D workflowService.isValidFor=
Activation(object, languageCodes,
+        boolean errors =3D false;
+        ActivationTestResults results =3D null;
+        if (languagesStates.containsValue(new Integer(EntryLoadRequest.STA=
GING_WORKFLOW_STATE)) ||
+                languagesStates.containsValue(new Integer(EntryLoadRequest=
.WAITING_WORKFLOW_STATE))) {
+
+            results =3D workflowService.isValidForActivation(object, langu=
ageCodes,
                 jParams, new StateModificationContext(objectKey, languageC=
odes, false));
 =

         if (results.getWarnings().size() > 0) {
@@ -563,26 +597,65 @@
         }
 =

         if (results.getErrors().size() > 0) {
+                errors =3D true;
             item.setAttribute("errors", html.drawShowReportLauncher(object=
Key.toString()));
             ((ParamBean) jParams).getRequest().getSession().setAttribute(o=
bjectKey.toString(), results);
         }
+        }
 =

         boolean doLock =3D false;
         boolean accessAuthorized =3D object.checkWriteAccess(currentUser);
         if(!accessAuthorized) {
             // test the linked childs
-            List list =3D WorkflowService.getInstance().getLinkedContentOb=
jects(object, false);
+            final List list =3D WorkflowService.getInstance().getLinkedCon=
tentObjects(object, false);
             for (int i =3D 0; i < list.size() && !accessAuthorized; i++) {
                 ContentObject contentObject =3D (ContentObject) list.get(i=
);
                 accessAuthorized =3D contentObject.checkWriteAccess(curren=
tUser);
             }
         }
         if (accessAuthorized) {
+            boolean hasIntegrityBypassRole =3D true;
+            boolean hasWAIBypassRole =3D true;
+            if ((jParams.getSite().getWAIComplianceCheck() +
+                    jParams.getSite().getURLIntegrityCheck() > 0)) {
+                hasIntegrityBypassRole =3D aclService.getSiteActionPermiss=
ion("engines.actions.byPassIntegrityChecks",
+                        currentUser, JahiaBaseACL.READ_RIGHTS, jParams.get=
SiteID()) > 0;
+                hasWAIBypassRole =3D aclService.getSiteActionPermission("e=
ngines.actions.byPassWAIChecks",
+                        currentUser, JahiaBaseACL.READ_RIGHTS, jParams.get=
SiteID()) > 0;
+            }
+
             for (int j =3D 0; j < locales.size(); j++) {
                 final String languageCode =3D ((SiteLanguageSettings) loca=
les.get(j)).getCode();
                 logger.debug("Found object: " + objectKey + " in " + langu=
ageCode);
                 final Element lang =3D resp.createElement("lang");
                 lang.setAttribute("code", languageCode);
+                if (errors && ! currentUser.isAdminMember(jParams.getSiteI=
D())) {
+                    final List validationErrors =3D results.getErrors();
+                    boolean dontShowButton =3D false;
+                    for (int i =3D 0; i < validationErrors.size(); i++) {
+                        final NodeOperationResult o =3D (NodeOperationResu=
lt)validationErrors.get(i);
+                        if (! o.getLanguageCode().equals(languageCode)) co=
ntinue;
+                        if (o.getClass() =3D=3D URLIntegrityValidForActiva=
tionResults.class) {
+                            if (! hasIntegrityBypassRole) {
+                                lang.appendChild(resp.createTextNode("-1")=
);
+                                item.appendChild(lang);
+                                dontShowButton =3D true;
+                                break;
+                            }
+                        } else if (o.getClass() =3D=3D WAIValidForActivati=
onResults.class) {
+                            if (! hasWAIBypassRole) {
+                                lang.appendChild(resp.createTextNode("-1")=
);
+                                item.appendChild(lang);
+                                dontShowButton =3D true;
+                                break;
+                            }
+                        }
+                    }
+                    if (dontShowButton) {
+                        continue;
+                    }
+                }
+
                 Integer languageState =3D (Integer) languagesStates.get(la=
nguageCode);
                 final Iterator optionsIter =3D additionalOptions.iterator(=
);
                 int i =3D 0;

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

Reply via email to