Skip to content

Instantly share code, notes, and snippets.

@dustingetz
Created October 21, 2010 00:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dustingetz/637619 to your computer and use it in GitHub Desktop.
Save dustingetz/637619 to your computer and use it in GitHub Desktop.
docway.Transfer.requestContentOperation = function(oObject, sCmd, sFormat, nPage, sPageModifier, oWindow)
{
//we used to "defer" the content operation here, and hit the UI to get tickets and an ajax payload.
//now we do everything inline, because reentrant setTimeout blows everything up
if (wsptIsNull(docway.TransferManager.getSharedControl()))
{
if (docway.TransferManager.MustHaveControl)
{
wspt.alertWarning("${transfer.js.operationdisallowed}");
return;
}
oTransfer = new docway.BrowserTransfer();
}
else
{
oTransfer = new docway.Transfer();
}
//do all ticket-getting right here, because we need a centralized spot
//to piggy-back onto the request
var oRequestedOperation = {
sCmd:sCmd
,sFormat:sFormat
,nPage:nPage
,sPageModifier:sPageModifier
};
var requestParams = {}
Ext.applyIf(requestParams, oTransfer.prepareContentOperationHook(oObject, oRequestedOperation));
Ext.applyIf(requestParams, oTransfer.prepareContentOperation(oObject, oRequestedOperation));
//if (requestParams.keys.length === 0) return;
//execute
var url = wspt.getDhtmlClient().getDynamicResourceRoot() + 'raw/';
var qs = wspt.getDhtmlClient().createQueryString();
for (var key in requestParams)
{
qs.add(key, requestParams[key]);
}
var sJson = wspt.getDhtmlClient().executeSynchronousRequest('dwuiOverrideContentOperation', url, qs);
if (wsptIsNull(sJson))
{
throw new Error('${transfer.js.getticketfailed}'); //where does this get caught
}
var oResponse = Ext.util.JSON.decode(sJson);
//fix up oObject--which might need a full-blown ajax component stack to reproject
oTransfer.executeContentOperation(oObject, oResponse, oWindow);
};
docway.Transfer.prototype.prepareContentOperationHook = function(oObject, op)
//signal that content operation should be deferred, so the UI has a chance
//to intercept and override how the operation happens
//they can also modify the operation inline right here
{
//return request parameters to be added to query
if (docway.CONTENTOPERATION_VIEW === op.sCmd)
{
//give UI a chance to override view operations
op.sSystemID = oObject.getID();
return op; //{ overrideRequest:true };
}
return null;
};
docway.Transfer.prototype.prepareContentOperation = function(oObject, op)
{
//all control-based transfer operations except CancelCheckout need a ticket
if (docway.CONTENTOPERATION_CANCELCHECKOUT !== op.sCmd)
{
return { needTicket: true };
}
return null;
}
docway.BrowserTransfer.prototype.prepareContentOperation = function(oObject, op)
{
//which browser-based operations need a ticket?
if (docway.CONTENTOPERATION_CANCELCHECKOUT !== op.sCmd)
{
return { needTicket: true };
}
return null;
}
docway.Transfer.prototype.executeContentOperation = function(oObject, oResponse, oWindow)
{
var op = oResponse.oActualOperation;
var oTicket = oResponse.oTicket;
try
{
switch (op.sCmd)
{
case docway.CONTENTOPERATION_VIEW:
this.view(oObject, oTicket, oWindow);
break;
case docway.CONTENTOPERATION_VIEWRENDITION:
this.viewRendition(oObject, oTicket, op.sFormat, op.nPage, op.sPageModifier, oWindow);
break;
case docway.CONTENTOPERATION_EDIT:
this.edit(oObject, oTicket, oWindow);
break;
case docway.CONTENTOPERATION_EXPORT:
this.exportContent(oObject, oWindow);
break;
case docway.CONTENTOPERATION_CHECKOUT:
this.checkout(oObject, oTicket, oWindow);
break;
case docway.CONTENTOPERATION_CANCELCHECKOUT:
this.cancelCheckout(oObject);
break;
default:
throw new Error(wspt.formatString('${transfer.js.executecontentop}', [ op.sCmd ]));
}
}
catch (e)
{
if(wspt.getDhtmlClient().getDisableExceptionLogging())
{
throw e;
}
wspt.alertError(wsptGetErrorMessage(e));
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment