using System; using System.Data; using System.Text; using System.Web.UI; using System.Web.UI.WebControls; using CMS.Community; using CMS.ExtendedControls; using CMS.GlobalHelper; using CMS.SettingsProvider; using CMS.SiteProvider; using CMS.UIControls; public partial class CMSModules_Friends_Controls_FriendsRequestedList : CMSAdminListControl { #region "Public properties" /// /// Gets and sets User ID. /// public int UserID { get; set; } /// /// Zero rows text. /// public string ZeroRowsText { get { return gridElem.ZeroRowsText; } set { gridElem.ZeroRowsText = value; } } #endregion #region "Page events" protected void Page_Load(object sender, EventArgs e) { if (StopProcessing) { Visible = false; // Do not load data gridElem.StopProcessing = true; } else { RaiseOnCheckPermissions(PERMISSION_READ, this); Visible = true; // Register the dialog script ScriptHelper.RegisterDialogScript(Page); // Register script for displaying label StringBuilder showLabelScript = new StringBuilder(); showLabelScript.AppendLine("function FM_ShowLabel(labelId)"); showLabelScript.AppendLine("{"); showLabelScript.AppendLine(" var label = document.getElementById(labelId);"); showLabelScript.AppendLine(" if (label != null)"); showLabelScript.AppendLine(" {"); showLabelScript.AppendLine(" label.innerHTML = '" + GetString("friends.selectfriends") + "';"); showLabelScript.AppendLine(" label.style['display'] = 'block';"); showLabelScript.AppendLine(" }"); showLabelScript.AppendLine("}"); ScriptHelper.RegisterClientScriptBlock(Page, typeof(string), "showLabel", ScriptHelper.GetScript(showLabelScript.ToString())); // Register script for action 'Remove' StringBuilder actionScript = new StringBuilder(); actionScript.AppendLine("function FM_RemoveAction_" + ClientID + "()"); actionScript.AppendLine("{"); actionScript.AppendLine(" if(!" + gridElem.GetCheckSelectionScript(false) + ")"); actionScript.AppendLine(" {"); actionScript.AppendLine(" if (confirm(" + ScriptHelper.GetString(GetString("friends.ConfirmRemove")) + "))"); actionScript.AppendLine(" {"); actionScript.AppendLine(Page.ClientScript.GetPostBackEventReference(btnRemoveSelected, null) + ";"); actionScript.AppendLine(" }"); actionScript.AppendLine(" }"); actionScript.AppendLine(" else"); actionScript.AppendLine(" {"); actionScript.AppendLine(" FM_ShowLabel('" + lblInfo.ClientID + "');"); actionScript.AppendLine(" }"); actionScript.AppendLine(" return false;"); actionScript.AppendLine("}"); ScriptHelper.RegisterClientScriptBlock(this, typeof(string), "actionScript_" + ClientID, ScriptHelper.GetScript(actionScript.ToString())); // Add action to button btnRemoveSelected.OnClientClick = "return FM_RemoveAction_" + ClientID + "();"; // Hide label lblInfo.Attributes["style"] = "display: none;"; // Register the refreshing script string refreshScript = ScriptHelper.GetScript("function refreshList(){" + Page.ClientScript.GetPostBackEventReference(hdnRefresh, string.Empty) + "}"); ScriptHelper.RegisterClientScriptBlock(Page, typeof(string), "friendsListRefresh", refreshScript); gridElem.OnAction += gridElem_OnAction; gridElem.OnExternalDataBound += gridElem_OnExternalDataBound; gridElem.OrderBy = "UserName"; gridElem.IsLiveSite = IsLiveSite; // Default where condition gridElem.WhereCondition = "((FriendStatus = " + Convert.ToInt32(FriendshipStatusEnum.Waiting) + " AND FriendUserID = " + UserID + ") OR (FriendStatus = " + Convert.ToInt32(FriendshipStatusEnum.Rejected) + " AND FriendRejectedBy <> " + UserID + "))"; // Add parameter @UserID if (gridElem.QueryParameters == null) { gridElem.QueryParameters = new QueryDataParameters(); } gridElem.QueryParameters.Add("@UserID", UserID); } } protected override void OnPreRender(EventArgs e) { plcNoData.Visible = HasData() || gridElem.FilterIsSet; base.OnPreRender(e); // Reset grid selection after multiple action if (RequestHelper.IsPostBack()) { string invokerName = Page.Request.Params.Get("__EVENTTARGET"); Control invokeControl = !string.IsNullOrEmpty(invokerName) ? Page.FindControl(invokerName) : null; if (invokeControl == hdnRefresh) { gridElem.ResetSelection(); } } } #endregion #region "Grid events" protected object gridElem_OnExternalDataBound(object sender, string sourceName, object parameter) { switch (sourceName.ToLowerCSafe()) { case "remove": bool rejected = ValidationHelper.GetString(((DataRowView)((GridViewRow)parameter).DataItem).Row["FriendStatus"], string.Empty) == "1"; // Disable checkbox GridViewRow row = (GridViewRow)parameter; Control control = ControlsHelper.GetChildControl(row, typeof(CheckBox)); if (control != null) { CheckBox checkBox = (CheckBox)control; checkBox.Enabled = !rejected; } // Disable button if (rejected) { ImageButton button = ((ImageButton)sender); button.ImageUrl = GetImageUrl("Design/Controls/UniGrid/Actions/deletedisabled.png"); button.Enabled = false; } break; case "status": // Set status (rejected/waiting) FriendshipStatusEnum status = (FriendshipStatusEnum)Enum.Parse(typeof(FriendshipStatusEnum), parameter.ToString()); switch (status) { case FriendshipStatusEnum.Waiting: parameter = "" + GetString("friends.waiting") + ""; break; case FriendshipStatusEnum.Rejected: parameter = "" + GetString("general.rejected") + ""; break; } break; case "formattedusername": return HTMLHelper.HTMLEncode(Functions.GetFormattedUserName(Convert.ToString(parameter), IsLiveSite)); } return parameter; } /// /// Handles the UniGrid's OnAction event. /// /// Name of item (button) that throws event /// ID (value of Primary key) of corresponding data row protected void gridElem_OnAction(string actionName, object actionArgument) { RaiseOnCheckPermissions(PERMISSION_MANAGE, this); FriendInfo fi = FriendInfoProvider.GetFriendInfo(ValidationHelper.GetInteger(actionArgument, 0)); if (fi != null) { switch (actionName) { case "remove": if (fi.FriendStatus != FriendshipStatusEnum.Rejected) { FriendInfoProvider.DeleteFriendInfo(fi); } gridElem.ReloadData(); break; } } } #endregion #region "Button handling" protected void btnRemoveSelected_Click(object sender, EventArgs e) { // If there user selected some items if (gridElem.SelectedItems.Count > 0) { RaiseOnCheckPermissions(PERMISSION_MANAGE, this); // Create where condition string where = "FriendID IN ("; foreach (object friendId in gridElem.SelectedItems) { where += ValidationHelper.GetInteger(friendId, 0) + ","; } where = where.TrimEnd(',') + ")"; // Get all needed friendships DataSet friendships = FriendInfoProvider.GetFriends(where, null); if (!DataHelper.DataSourceIsEmpty(friendships)) { // Delete all these friendships foreach (DataRow friendship in friendships.Tables[0].Rows) { FriendInfo fi = new FriendInfo(friendship); if (fi.FriendStatus != FriendshipStatusEnum.Rejected) { FriendInfoProvider.DeleteFriendInfo(fi); } } } gridElem.ResetSelection(); // Reload grid gridElem.ReloadData(); } } #endregion #region "Methods" /// /// Indicates if there are some data. /// public bool HasData() { return (!DataHelper.DataSourceIsEmpty(gridElem.GridView.DataSource)); } #endregion }