/// <summary> /// Update the invitation UI (button, textbox and linklabel) so that /// the controls are enabled at the right moment. /// </summary> private void UpdateInviteStatus(Workspace kws) { if (kws == null) { btnInvite.Enabled = false; btnCustomInvite.Enabled = false; return; } bool enable = (kws.LoginStatus == KwsLoginStatus.LoggedIn && kws.IsOnlineCapable() && !kws.IsPublicKws()); btnInvite.Enabled = enable; btnCustomInvite.Enabled = enable; }
/// <summary> /// Return true if the workspace has a level of functionality equal to /// the online mode. /// </summary> public bool IsOnlineCapable() { return(Kws.IsOnlineCapable()); }
private void SetHomeTabInfos(Workspace kws) { if (kws == null) { panelHome.Visible = false; return; } panelHome.Visible = true; lblKAS.Text = kws.Kas.KasID.Host + ":" + kws.Kas.KasID.Port + " (ID: " + kws.GetExternalKwsID().ToString() + ")"; if (kws.AppException != null) { lblKasError.Text = Base.FormatErrorMsg("application error", kws.AppException); } else if (kws.Kas.ErrorEx != null) { lblKasError.Text = Base.FormatErrorMsg("KAS error", kws.Kas.ErrorEx); } else if ((kws.Sm.GetCurrentTask() != KwsTask.WorkOnline || (kws.Kas.ConnStatus != KasConnStatus.Connected && kws.Kas.ConnStatus != KasConnStatus.Connecting)) && (kws.KasLoginHandler.LoginResult != KwsLoginResult.Accepted && kws.KasLoginHandler.LoginResult != KwsLoginResult.None)) { lblKasError.Text = Base.FormatErrorMsg("login error", kws.KasLoginHandler.LoginResultString); if (kws.KasLoginHandler.LoginResult == KwsLoginResult.BadSecurityCreds && kws.KasLoginHandler.TicketRefusalString != "") { lblKasError.Text += Environment.NewLine + Base.FormatErrorMsg(kws.KasLoginHandler.TicketRefusalString); } } else { lblKasError.Text = ""; } // Determine the status to display and the task the user would // most likely want to undertake. KwsTask curTask = kws.Sm.GetCurrentTask(); String statusText = ""; bool btnEnabled = false; KwsTask btnTask = KwsTask.WorkOnline; String btnText = "Work online"; if (curTask == KwsTask.Spawn) { statusText = "Creating " + Base.GetKwsString(); } else if (curTask == KwsTask.Delete) { statusText = "Deleting " + Base.GetKwsString(); } else if (curTask == KwsTask.Rebuild) { statusText = "Rebuilding " + Base.GetKwsString(); } else if (curTask == KwsTask.Stop) { if (kws.MainStatus == KwsMainStatus.RebuildRequired) { statusText = "Rebuild required"; btnEnabled = true; btnTask = KwsTask.Rebuild; btnText = "Rebuild " + Base.GetKwsString(); } // Assume the workspace was disabled voluntarily and that // the user can work online. This is normally the case. else { statusText = Base.GetKwsString() + " disabled"; btnEnabled = true; } } else if (curTask == KwsTask.WorkOffline) { statusText = "Working offline"; btnEnabled = true; } else if (curTask == KwsTask.WorkOnline) { if (kws.IsOnlineCapable()) { statusText = "Working online"; btnEnabled = true; btnTask = KwsTask.WorkOffline; btnText = "Work offline"; } // We're not currently connecting but we can request to. else if (kws.Sm.CanWorkOnline()) { statusText = "Working offline"; btnEnabled = true; } // We're connecting, allow disconnection. else { statusText = "Connecting"; btnEnabled = true; btnTask = KwsTask.WorkOffline; btnText = "Cancel"; } } // Update the information. KwsStatus.Text = statusText; KwsStatus.ForeColor = m_uiBroker.Browser.GetKwsNodeByKws(kws).GetKwsIconImageKey(); KwsTaskBtn.Enabled = btnEnabled; KwsTaskBtn.Text = btnText; m_kwsTaskBtnTask = btnTask; // Set the workspace general information. picSecure.Visible = kws.CoreData.Credentials.SecureFlag; lblSecureNote.Visible = kws.CoreData.Credentials.SecureFlag; lblName.Text = kws.GetKwsName(); KwsUser creator = kws.CoreData.UserInfo.Creator; if (creator != null) { lblByName.Text = creator.UiFullName; lblByOrgName.Text = creator.OrgName; lblCreationDate.Text = Base.KDateToDateTime(creator.InvitationDate).ToString(); } else { lblByName.Text = lblByOrgName.Text = lblCreationDate.Text = ""; } }
//////////////////////////////////// // Complex user request handlers. // //////////////////////////////////// /// <summary> /// Return true if the user is allowed to perform the requested action on /// the given user in the given workspace. If the user is not allowed, false is returned and denyReason /// is set with a user-friendly string. /// </summary> public bool CanPerformUserAction(UserAction action, Workspace kws, KwsUser target, ref String denyReason) { // To perform any action, we must be connected to the workspace. if (!kws.IsOnlineCapable()) { denyReason = "You are not allowed to perform this operation: the " + Base.GetKwsString() + " is not connected."; return false; } switch (action) { case UserAction.ChangeRole: { denyReason = "Feature not available yet."; return false; } case UserAction.Copy: { return true; } case UserAction.Delete: { denyReason = "Feature not available yet."; return false; } case UserAction.ChangeDisabledAccountFlag: { denyReason = "Feature not available yet."; return false; } case UserAction.ShowProperties: { return true; } case UserAction.ResendInvitation: { denyReason = "Feature not available yet."; return false; } case UserAction.ResetPassword: { if (!kws.CoreData.Credentials.SecureFlag) { denyReason = "Feature available in Secure " + Base.GetKwsString() + " only."; return false; } // Everyone can reset his own password. Only admins can set other // people's. if (target.UserID != kws.CoreData.Credentials.UserID && !kws.CoreData.Credentials.AdminFlag) { denyReason = "This functionnality is only available to " + Base.GetKwsString() + " Administrators and Managers."; return false; } return true; } case UserAction.SetName: { denyReason = "Changing the name of a user is not supported yet."; // FIXME adapt for new user powers. if (kws.CoreData.Credentials.AdminFlag) { return false; } // A normal user cannot change his name if he has an // Admin name set. else if (kws.CoreData.Credentials.UserID == target.UserID && target.HasAdminName()) { denyReason = "Your name has been set by an Administrator. Only an Administrator may change it."; } // A normal user cannot change someone else's Admin name. else if (kws.CoreData.Credentials.UserID != target.UserID) { denyReason = "Only Administrators can change someone else's username."; } return false; } default: denyReason = "unknown action"; return false; } }
public void UpdateUI(Workspace kws) { if (kws == null) return; // Determine the status to display and the task the user would // most likely want to undertake. KwsTask curTask = kws.Sm.GetCurrentTask(); String statusText = ""; bool btnEnabled = false; KwsTask btnTask = KwsTask.WorkOnline; String btnText = "Connect"; if (curTask == KwsTask.Spawn) { statusText = "Creating " + Base.GetKwsString(); } else if (curTask == KwsTask.Remove) { statusText = "Deleting " + Base.GetKwsString(); } else if (curTask == KwsTask.Rebuild) { statusText = "Rebuilding " + Base.GetKwsString(); } else if (curTask == KwsTask.Stop) { if (kws.MainStatus == KwsMainStatus.RebuildRequired) { statusText = "Rebuild required"; btnEnabled = true; btnTask = KwsTask.Rebuild; btnText = "Rebuild " + Base.GetKwsString(); } // Assume the workspace was disabled voluntarily and that // the user can work online. This is normally the case. else { statusText = Base.GetKwsString() + " disabled"; btnEnabled = true; } } else if (curTask == KwsTask.WorkOffline) { statusText = "Disconnected"; btnEnabled = true; } else if (curTask == KwsTask.WorkOnline) { if (kws.IsOnlineCapable()) { statusText = "Connected"; btnEnabled = true; btnTask = KwsTask.WorkOffline; btnText = "Disconnect"; } // We're not currently connecting but we can request to. else if (kws.Sm.CanWorkOnline()) { statusText = "Disconnected"; btnEnabled = true; } // We're connecting, allow disconnection. else { statusText = "Connecting"; btnEnabled = true; btnTask = KwsTask.WorkOffline; btnText = "Cancel"; } } else if (curTask == KwsTask.DeleteOnServer) { statusText = "Deleting from server..."; } // Update the information. KwsBrowserKwsNode node = UiBroker.Browser.GetKwsNodeByKws(kws); lblStatus.Text = statusText; lblStatus.ForeColor = node.GetKwsIconImageKey(); imgKwsStatus.Image = KwmMisc.GetKwmStateImageFromKey(lblStatus.ForeColor); btnKwsTask.Enabled = btnEnabled; btnKwsTask.Text = btnText; m_kwsTaskBtnTask = btnTask; picSecure.Visible = kws.CoreData.Credentials.SecureFlag; UpdateKwsNameLocation(); lblKwsName.Text = kws.GetKwsName(); KwsUser creator = kws.CoreData.UserInfo.Creator; if (creator != null) { DateTime creationDate = Base.KDateToDateTime(creator.InvitationDate); lblCreator.Text = creator.EmailAddress + " (" + creationDate.ToString("ddd, dd MMM yyyy") + ")"; } else { lblCreator.Text = "unkown"; } lblServer.Text = kws.Kas.KasID.Host + " (ID: " + kws.GetExternalKwsID() + ")"; SetKasErrorField(kws); }