private ActionValidationResult ValidateAction(StateAction stateAction)
{
if (!HasPermission(stateAction))
return ActionValidationResult.Invalid;
if (this.Node.Id == 0)
{
if (stateAction == StateAction.Save || stateAction == StateAction.SaveAndCheckIn)
return ActionValidationResult.Valid;
return ActionValidationResult.InvalidOnNewNode;
}
var action = 0;
switch (stateAction)
{
case StateAction.Save: action = 0; break;
case StateAction.CheckOut: action = 1; break;
case StateAction.CheckIn: action = 2; break;
case StateAction.UndoCheckOut: action = 3; break;
case StateAction.Publish: action = 4; break;
case StateAction.Approve: action = 5; break;
case StateAction.Reject: action = 6; break;
case StateAction.SaveAndCheckIn: action = 7; break;
default:
throw new NotImplementedException("Unknown StateAction: " + stateAction);
}
var status = 0;
var versionStatus = this.Node.Locked ? VersionStatus.Locked : this.CurrentVersion.Status;
switch (versionStatus)
{
case VersionStatus.Approved: status = 0; break;
case VersionStatus.Locked: status = 1; break;
case VersionStatus.Draft: status = 2; break;
case VersionStatus.Rejected: status = 3; break;
case VersionStatus.Pending: status = 4; break;
default:
throw new NotImplementedException("Unknown VersionStatus: " + this.CurrentVersion.Status);
}
var mode = 0;
switch (this.VersioningMode)
{
case VersioningMode.None: mode = 0; break;
case VersioningMode.Major: mode = 1; break;
case VersioningMode.Full: mode = 2; break;
default:
throw new NotImplementedException("Unknown VersioningMode: " + this.VersioningMode);
}
var approving = this.HasApproving ? 1 : 0;
if (!EnabledActions[15 * approving + 5 * mode + status][action])
return ActionValidationResult.Invalid;
return ActionValidationResult.Valid;
}