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