private string MatchUserBoxMedals([NotNull] string userBox) { string filler = string.Empty; var rx = this.GetRegex(Constants.UserBox.Medals); if (this.Get<YafBoardSettings>().ShowMedals) { DataTable dt = this.Get<YafDbBroker>().UserMedals(this.UserId); // vzrus: If user doesn't have we shouldn't render this waisting resources if (dt.Rows.Count <= 0) { return rx.Replace(userBox, filler); } var ribbonBar = new StringBuilder(500); var medals = new StringBuilder(500); DataRow r; MedalFlags f; int i = 0; int inRow = 0; // do ribbon bar first while (dt.Rows.Count > i) { r = dt.Rows[i]; f = new MedalFlags(r["Flags"]); // do only ribbon bar items first if (!r["OnlyRibbon"].ToType<bool>()) { break; } // skip hidden medals if (!f.AllowHiding || !r["Hide"].ToType<bool>()) { if (inRow == 3) { // add break - only three ribbons in a row ribbonBar.Append("<br />"); inRow = 0; } var title = "{0}{1}".FormatWith( r["Name"], f.ShowMessage ? ": {0}".FormatWith(r["Message"]) : string.Empty); ribbonBar.AppendFormat( "<img src=\"{0}{5}/{1}\" width=\"{2}\" height=\"{3}\" alt=\"{4}\" title=\"{4}\" />", YafForumInfo.ForumClientFileRoot, r["SmallRibbonURL"], r["SmallRibbonWidth"], r["SmallRibbonHeight"], title, YafBoardFolders.Current.Medals); inRow++; } // move to next row i++; } // follow with the rest while (dt.Rows.Count > i) { r = dt.Rows[i]; f = new MedalFlags(r["Flags"]); // skip hidden medals if (!f.AllowHiding || !r["Hide"].ToType<bool>()) { medals.AppendFormat( "<img src=\"{0}{6}/{1}\" width=\"{2}\" height=\"{3}\" alt=\"{4}{5}\" title=\"{4}{5}\" />", YafForumInfo.ForumClientFileRoot, r["SmallMedalURL"], r["SmallMedalWidth"], r["SmallMedalHeight"], r["Name"], f.ShowMessage ? ": {0}".FormatWith(r["Message"]) : string.Empty, YafBoardFolders.Current.Medals); } // move to next row i++; } filler = this.Get<YafBoardSettings>().UserBoxMedals.FormatWith( this.GetText("MEDALS"), ribbonBar, medals); } // replaces template placeholder with actual medals userBox = rx.Replace(userBox, filler); return userBox; }
/// <summary> /// Bind data for this control. /// </summary> private void BindData() { // load available images from images/medals folder using (var dt = new DataTable("Files")) { // create structure dt.Columns.Add("FileID", typeof(long)); dt.Columns.Add("FileName", typeof(string)); dt.Columns.Add("Description", typeof(string)); // add blank row DataRow dr = dt.NewRow(); dr["FileID"] = 0; dr["FileName"] = YafForumInfo.GetURLToContent("images/spacer.gif"); // use spacer.gif for Description Entry dr["Description"] = this.GetText("ADMIN_EDITMEDAL", "SELECT_IMAGE"); dt.Rows.Add(dr); // add files from medals folder var dir = new DirectoryInfo( this.Request.MapPath("{0}{1}".FormatWith(YafForumInfo.ForumServerFileRoot, YafBoardFolders.Current.Medals))); FileInfo[] files = dir.GetFiles("*.*"); long nFileID = 1; foreach (FileInfo file in from file in files let sExt = file.Extension.ToLower() where sExt == ".png" || sExt == ".gif" || sExt == ".jpg" select file) { dr = dt.NewRow(); dr["FileID"] = nFileID++; dr["FileName"] = file.Name; dr["Description"] = file.Name; dt.Rows.Add(dr); } // medal image this.MedalImage.DataSource = dt; this.MedalImage.DataValueField = "FileName"; this.MedalImage.DataTextField = "Description"; // ribbon bar image this.RibbonImage.DataSource = dt; this.RibbonImage.DataValueField = "FileName"; this.RibbonImage.DataTextField = "Description"; // small medal image this.SmallMedalImage.DataSource = dt; this.SmallMedalImage.DataValueField = "FileName"; this.SmallMedalImage.DataTextField = "Description"; // small ribbon bar image this.SmallRibbonImage.DataSource = dt; this.SmallRibbonImage.DataValueField = "FileName"; this.SmallRibbonImage.DataTextField = "Description"; } // bind data to controls this.DataBind(); // load existing medal if we are editing one if (this.CurrentMedalID.HasValue) { // load users and groups who has been assigned this medal this.UserList.DataSource = LegacyDb.user_medal_list(null, this.CurrentMedalID); this.UserList.DataBind(); this.GroupList.DataSource = LegacyDb.group_medal_list(null, this.CurrentMedalID); this.GroupList.DataBind(); // enable adding users/groups this.AddUserRow.Visible = true; this.AddGroupRow.Visible = true; using (DataTable dt = this.GetRepository<Medal>().List(this.CurrentMedalID)) { // get data row DataRow row = dt.Rows[0]; // load flags var flags = new MedalFlags(row["Flags"]); // set controls this.Name.Text = row["Name"].ToString(); this.Description.Text = row["Description"].ToString(); this.Message.Text = row["Message"].ToString(); this.Category.Text = row["Category"].ToString(); this.SortOrder.Text = row["SortOrder"].ToString(); this.ShowMessage.Checked = flags.ShowMessage; this.AllowRibbon.Checked = flags.AllowRibbon; this.AllowHiding.Checked = flags.AllowHiding; this.AllowReOrdering.Checked = flags.AllowReOrdering; // select images this.SelectImage(this.MedalImage, this.MedalPreview, row["MedalURL"]); this.SelectImage(this.RibbonImage, this.RibbonPreview, row["RibbonURL"]); this.SelectImage(this.SmallMedalImage, this.SmallMedalPreview, row["SmallMedalURL"]); this.SelectImage(this.SmallRibbonImage, this.SmallRibbonPreview, row["SmallRibbonURL"]); } using (DataTable dt = LegacyDb.group_list(this.PageContext.PageBoardID, null)) { this.AvailableGroupList.DataSource = dt; this.AvailableGroupList.DataTextField = "Name"; this.AvailableGroupList.DataValueField = "GroupID"; this.AvailableGroupList.DataBind(); } } else { // set all previews on blank image var spacerPath = YafForumInfo.GetURLToContent("images/spacer.gif"); // use spacer.gif for Description Entry this.MedalPreview.Src = spacerPath; this.RibbonPreview.Src = spacerPath; this.SmallMedalPreview.Src = spacerPath; this.SmallRibbonPreview.Src = spacerPath; } }
/// <summary> /// The setup user profile info. /// </summary> /// <param name="userID">The user id.</param> /// <param name="user">The user.</param> /// <param name="userData">The user data.</param> /// <param name="userDisplayName">The user display name.</param> private void SetupUserProfileInfo( int userID, [NotNull] MembershipUser user, [NotNull] IUserData userData, [NotNull] string userDisplayName) { this.UserLabel1.UserID = userData.UserID; if (this.PageContext.IsAdmin && userData.DisplayName != user.UserName) { this.Name.Text = this.HtmlEncode("{0} ({1})".FormatWith(userData.DisplayName, user.UserName)); } else { this.Name.Text = this.HtmlEncode(userDisplayName); } this.Joined.Text = "{0}".FormatWith(this.Get<IDateTime>().FormatDateLong(Convert.ToDateTime(userData.Joined))); // vzrus: Show last visit only to admins if user is hidden if (!this.PageContext.IsAdmin && Convert.ToBoolean(userData.DBRow["IsActiveExcluded"])) { this.LastVisit.Text = this.GetText("COMMON", "HIDDEN"); this.LastVisit.Visible = true; } else { this.LastVisitDateTime.DateTime = userData.LastVisit; this.LastVisitDateTime.Visible = true; } if (this.User != null && userData.RankName.IsSet()) { this.RankTR.Visible = true; this.Rank.Text = this.HtmlEncode(this.Get<IBadWordReplace>().Replace(userData.RankName)); } if (this.User != null && userData.Profile.Location.IsSet()) { this.LocationTR.Visible = true; this.Location.Text = this.HtmlEncode(this.Get<IBadWordReplace>().Replace(userData.Profile.Location)); } if (this.User != null && userData.Profile.Country.Trim().IsSet() && !userData.Profile.Country.Equals("N/A")) { this.CountryTR.Visible = true; this.CountryLabel.Text = this.HtmlEncode( this.Get<IBadWordReplace>().Replace(this.GetText("COUNTRY", userData.Profile.Country.Trim()))); this.CountryFlagImage.Src = this.Get<ITheme>() .GetItem( "FLAGS", "{0}_MEDIUM".FormatWith(userData.Profile.Country.Trim()), YafForumInfo.GetURLToContent("images/flags/{0}.png".FormatWith(userData.Profile.Country.Trim()))); this.CountryFlagImage.Alt = userData.Profile.Country.Trim(); this.CountryFlagImage.Attributes.Add("title", this.CountryLabel.Text); } if (this.User != null && userData.Profile.Region.IsSet()) { this.RegionTR.Visible = true; try { var tag = "RGN_{0}_{1}".FormatWith( userData.Profile.Country.Trim().IsSet() ? userData.Profile.Country.Trim() : this.Get<ILocalization>().Culture.Name.Remove(0, 3).ToUpperInvariant(), userData.Profile.Region); this.RegionLabel.Text = this.HtmlEncode(this.Get<IBadWordReplace>().Replace(this.GetText("REGION", tag))); } catch (Exception) { this.RegionTR.Visible = false; } } if (this.User != null && userData.Profile.City.IsSet()) { this.CityTR.Visible = true; this.CityLabel.Text = this.HtmlEncode(this.Get<IBadWordReplace>().Replace(userData.Profile.City)); } if (this.User != null && userData.Profile.Location.IsSet()) { this.LocationTR.Visible = true; this.Location.Text = this.HtmlEncode(this.Get<IBadWordReplace>().Replace(userData.Profile.Location)); } if (this.User != null && userData.Profile.RealName.IsSet()) { this.RealNameTR.Visible = true; this.RealName.InnerText = this.HtmlEncode( this.Get<IBadWordReplace>().Replace(userData.Profile.RealName)); } if (this.User != null && userData.Profile.Interests.IsSet()) { this.InterestsTR.Visible = true; this.Interests.InnerText = this.HtmlEncode(this.Get<IBadWordReplace>().Replace(userData.Profile.Interests)); } if (this.User != null && (userData.Profile.Gender > 0)) { string imagePath = string.Empty; string imageAlt = string.Empty; this.GenderTR.Visible = true; switch (userData.Profile.Gender) { case 1: imagePath = this.PageContext.Get<ITheme>().GetItem("ICONS", "GENDER_MALE", null); imageAlt = this.GetText("USERGENDER_MAS"); break; case 2: imagePath = this.PageContext.Get<ITheme>().GetItem("ICONS", "GENDER_FEMALE", null); imageAlt = this.GetText("USERGENDER_FEM"); break; } this.Gender.InnerHtml = @"<a><img src=""{0}"" alt=""{1}"" title=""{1}"" /></a> {1}".FormatWith(imagePath, imageAlt); } if (this.User != null && userData.Profile.Occupation.IsSet()) { this.OccupationTR.Visible = true; this.Occupation.InnerText = this.HtmlEncode(this.Get<IBadWordReplace>().Replace(userData.Profile.Occupation)); } this.ThanksFrom.Text = LegacyDb.user_getthanks_from(userData.DBRow["userID"], this.PageContext.PageUserID).ToString(); int[] thanksToArray = LegacyDb.user_getthanks_to(userData.DBRow["userID"], this.PageContext.PageUserID); this.ThanksToTimes.Text = thanksToArray[0].ToString(); this.ThanksToPosts.Text = thanksToArray[1].ToString(); this.ReputationReceived.Text = YafReputation.GenerateReputationBar(userData.Points.Value, userData.UserID); if (this.Get<YafBoardSettings>().ShowUserOnlineStatus) { this.OnlineStatusImage1.UserID = userID; this.OnlineStatusImage1.Visible = true; var suspended = userData.DBRow["Suspended"].ToType<DateTime?>(); if (suspended.HasValue && suspended.Value > DateTime.UtcNow) { this.ThemeImgSuspended.LocalizedTitle = this.GetText("POSTS", "USERSUSPENDED") .FormatWith(this.Get<IDateTime>().FormatDateTimeShort(suspended.Value)); this.ThemeImgSuspended.Visible = true; this.OnlineStatusImage1.Visible = false; } else { this.ThemeImgSuspended.Visible = false; } } else { this.ThemeImgSuspended.Visible = false; this.OnlineStatusImage1.Visible = false; } if (this.User != null && userData.Profile.XMPP.IsSet()) { this.XmppTR.Visible = true; this.lblxmpp.Text = this.HtmlEncode(this.Get<IBadWordReplace>().Replace(userData.Profile.XMPP)); } if (this.User != null && userData.Profile.AIM.IsSet()) { this.AimTR.Visible = true; this.lblaim.Text = this.HtmlEncode(this.Get<IBadWordReplace>().Replace(userData.Profile.AIM)); } if (this.User != null && userData.Profile.ICQ.IsSet()) { this.IcqTR.Visible = true; this.lblicq.Text = this.HtmlEncode(this.Get<IBadWordReplace>().Replace(userData.Profile.ICQ)); } if (this.User != null && userData.Profile.MSN.IsSet()) { this.MsnTR.Visible = true; this.lblmsn.Text = this.HtmlEncode(this.Get<IBadWordReplace>().Replace(userData.Profile.MSN)); } if (this.User != null && userData.Profile.Skype.IsSet()) { this.SkypeTR.Visible = true; this.lblskype.Text = this.HtmlEncode(this.Get<IBadWordReplace>().Replace(userData.Profile.Skype)); } if (this.User != null && userData.Profile.YIM.IsSet()) { this.YimTR.Visible = true; this.lblyim.Text = this.HtmlEncode(this.Get<IBadWordReplace>().Replace(userData.Profile.YIM)); } var loadHoverCardJs = false; if (this.User != null && userData.Profile.Facebook.IsSet()) { this.FacebookTR.Visible = true; this.lblfacebook.Text = this.HtmlEncode(this.Get<IBadWordReplace>().Replace(userData.Profile.Facebook)); if (this.Get<YafBoardSettings>().EnableUserInfoHoverCards) { this.lblfacebook.Attributes.Add("data-hovercard", this.lblfacebook.Text); this.Facebook.Attributes.Add("data-hovercard", this.lblfacebook.Text); this.lblfacebook.CssClass += " Facebook-HoverCard"; this.Facebook.CssClass += " Facebook-HoverCard"; loadHoverCardJs = true; } } if (this.User != null && userData.Profile.Twitter.IsSet()) { this.TwitterTR.Visible = true; this.lbltwitter.Text = this.HtmlEncode(this.Get<IBadWordReplace>().Replace(userData.Profile.Twitter)); if (this.Get<YafBoardSettings>().EnableUserInfoHoverCards && Config.IsTwitterEnabled) { this.lbltwitter.Attributes.Add("data-hovercard", this.lbltwitter.Text); this.Twitter.Attributes.Add("data-hovercard", this.lbltwitter.Text); this.lbltwitter.CssClass += " Twitter-HoverCard"; this.Twitter.CssClass += " Twitter-HoverCard"; loadHoverCardJs = true; } } if (loadHoverCardJs && this.Get<YafBoardSettings>().EnableUserInfoHoverCards && Config.IsTwitterEnabled) { var hoverCardLoadJs = new StringBuilder(); hoverCardLoadJs.Append( JavaScriptBlocks.HoverCardLoadJs( ".Facebook-HoverCard", "Facebook", this.GetText("DEFAULT", "LOADING_FB_HOVERCARD").ToJsString(), this.GetText("DEFAULT", "ERROR_FB_HOVERCARD").ToJsString())); hoverCardLoadJs.Append( JavaScriptBlocks.HoverCardLoadJs( ".Twitter-HoverCard", "Twitter", this.GetText("DEFAULT", "LOADING_TWIT_HOVERCARD").ToJsString(), this.GetText("DEFAULT", "ERROR_TWIT_HOVERCARD").ToJsString(), "{0}{1}resource.ashx?twitterinfo=".FormatWith( BaseUrlBuilder.BaseUrl.TrimEnd('/'), BaseUrlBuilder.AppPath))); // Setup Hover Card JS YafContext.Current.PageElements.RegisterJsBlockStartup( "hovercardtwitterfacebookjs", hoverCardLoadJs.ToString()); if (this.Get<YafBoardSettings>().EnableUserReputation) { // Setup UserBox Reputation Script Block YafContext.Current.PageElements.RegisterJsBlockStartup( "reputationprogressjs", JavaScriptBlocks.RepuatationProgressLoadJs); } } if (this.User != null && userData.Profile.Birthday >= DateTimeHelper.SqlDbMinTime()) { this.BirthdayTR.Visible = true; this.Birthday.Text = this.Get<IDateTime>() .FormatDateLong(userData.Profile.Birthday.AddMinutes((double)(-userData.TimeZone))); } else { this.BirthdayTR.Visible = false; } // Show User Medals if (this.Get<YafBoardSettings>().ShowMedals) { var userMedalsTable = this.Get<YafDbBroker>().UserMedals(this.UserId); if (userMedalsTable.Rows.Count <= 0) { this.MedalsRow.Visible = false; return; } var ribbonBar = new StringBuilder(500); var medals = new StringBuilder(500); DataRow r; MedalFlags f; int i = 0; int inRow = 0; // do ribbon bar first while (userMedalsTable.Rows.Count > i) { r = userMedalsTable.Rows[i]; f = new MedalFlags(r["Flags"]); // do only ribbon bar items first if (!r["OnlyRibbon"].ToType<bool>()) { break; } // skip hidden medals if (!f.AllowHiding || !r["Hide"].ToType<bool>()) { if (inRow == 3) { // add break - only three ribbons in a row ribbonBar.Append("<br />"); inRow = 0; } var title = "{0}{1}".FormatWith( r["Name"], f.ShowMessage ? ": {0}".FormatWith(r["Message"]) : string.Empty); ribbonBar.AppendFormat( "<img src=\"{0}{5}/{1}\" width=\"{2}\" height=\"{3}\" alt=\"{4}\" title=\"{4}\" />", YafForumInfo.ForumClientFileRoot, r["SmallRibbonURL"], r["SmallRibbonWidth"], r["SmallRibbonHeight"], title, YafBoardFolders.Current.Medals); inRow++; } // move to next row i++; } // follow with the rest while (userMedalsTable.Rows.Count > i) { r = userMedalsTable.Rows[i]; f = new MedalFlags(r["Flags"]); // skip hidden medals if (!f.AllowHiding || !r["Hide"].ToType<bool>()) { medals.AppendFormat( "<img src=\"{0}{6}/{1}\" width=\"{2}\" height=\"{3}\" alt=\"{4}{5}\" title=\"{4}{5}\" />", YafForumInfo.ForumClientFileRoot, r["SmallMedalURL"], r["SmallMedalWidth"], r["SmallMedalHeight"], r["Name"], f.ShowMessage ? ": {0}".FormatWith(r["Message"]) : string.Empty, YafBoardFolders.Current.Medals); } // move to next row i++; } this.MedalsPlaceHolder.Text = "{0}<br />{1}".FormatWith(ribbonBar, medals); this.MedalsRow.Visible = true; } }
/// <summary> /// Handles save button click. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param> protected void Save_Click([NotNull] object sender, [NotNull] EventArgs e) { if (this.MedalImage.SelectedIndex <= 0) { this.PageContext.AddLoadMessage(this.GetText("ADMIN_EDITMEDAL", "MSG_IMAGE"), MessageTypes.Warning); return; } if (this.SmallMedalImage.SelectedIndex <= 0) { this.PageContext.AddLoadMessage(this.GetText("ADMIN_EDITMEDAL", "MSG_SMALL_IMAGE"), MessageTypes.Warning); return; } if (this.SortOrder.Text.Trim().Length == 0) { this.PageContext.AddLoadMessage(this.GetText("ADMIN_EDITFORUM", "MSG_VALUE"), MessageTypes.Warning); return; } byte sortOrder; if (!ValidationHelper.IsValidPosShort(this.SortOrder.Text.Trim())) { this.PageContext.AddLoadMessage(this.GetText("ADMIN_EDITFORUM", "MSG_POSITIVE_VALUE"), MessageTypes.Warning); return; } if (!byte.TryParse(this.SortOrder.Text.Trim(), out sortOrder)) { this.PageContext.AddLoadMessage(this.GetText("ADMIN_EDITFORUM", "MSG_CATEGORY"), MessageTypes.Warning); return; } // data string ribbonURL = null, smallRibbonURL = null; short? ribbonWidth = null, ribbonHeight = null; Size imageSize; // flags var flags = new MedalFlags(0) { ShowMessage = this.ShowMessage.Checked, AllowRibbon = this.AllowRibbon.Checked, AllowReOrdering = this.AllowReOrdering.Checked, AllowHiding = this.AllowHiding.Checked }; // get medal images string imageURL = this.MedalImage.SelectedValue; string smallImageURL = this.SmallMedalImage.SelectedValue; if (this.RibbonImage.SelectedIndex > 0) { ribbonURL = this.RibbonImage.SelectedValue; } if (this.SmallRibbonImage.SelectedIndex > 0) { smallRibbonURL = this.SmallRibbonImage.SelectedValue; imageSize = this.GetImageSize(smallRibbonURL); ribbonWidth = imageSize.Width.ToType<short>(); ribbonHeight = imageSize.Height.ToType<short>(); } // get size of small image imageSize = this.GetImageSize(smallImageURL); // save medal this.GetRepository<Medal>().Save( this.CurrentMedalID, this.Name.Text, this.Description.Text, this.Message.Text, this.Category.Text, imageURL, ribbonURL, smallImageURL, smallRibbonURL, (short)imageSize.Width, (short)imageSize.Height, ribbonWidth, ribbonHeight, sortOrder, flags.BitValue); // go back to medals administration YafBuildLink.Redirect(ForumPages.admin_medals); }
/// <summary> /// Handles save button click. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param> protected void Save_Click([NotNull] object sender, [NotNull] EventArgs e) { if (this.MedalImage.SelectedIndex <= 0) { this.PageContext.AddLoadMessage(this.GetText("ADMIN_EDITMEDAL", "MSG_IMAGE"), MessageTypes.Warning); return; } if (this.SmallMedalImage.SelectedIndex <= 0) { this.PageContext.AddLoadMessage(this.GetText("ADMIN_EDITMEDAL", "MSG_SMALL_IMAGE"), MessageTypes.Warning); return; } if (this.SortOrder.Text.Trim().Length == 0) { this.PageContext.AddLoadMessage(this.GetText("ADMIN_EDITFORUM", "MSG_VALUE"), MessageTypes.Warning); return; } short sortOrder; if (!ValidationHelper.IsValidPosShort(this.SortOrder.Text.Trim())) { this.PageContext.AddLoadMessage(this.GetText("ADMIN_EDITFORUM", "MSG_POSITIVE_VALUE"), MessageTypes.Warning); return; } if (!short.TryParse(this.SortOrder.Text.Trim(), out sortOrder)) { this.PageContext.AddLoadMessage(this.GetText("ADMIN_EDITFORUM", "MSG_CATEGORY"), MessageTypes.Warning); return; } // data object medalID = null; object ribbonURL = null, smallRibbonURL = null; object ribbonWidth = null, ribbonHeight = null; Size imageSize; var flags = new MedalFlags(0); // retrieve medal ID, use null if we are creating new one if (this.Request.QueryString.GetFirstOrDefault("m") != null) { medalID = this.Request.QueryString.GetFirstOrDefault("m"); } // flags flags.ShowMessage = this.ShowMessage.Checked; flags.AllowRibbon = this.AllowRibbon.Checked; flags.AllowReOrdering = this.AllowReOrdering.Checked; flags.AllowHiding = this.AllowHiding.Checked; // get medal images object imageURL = this.MedalImage.SelectedValue; object smallImageURL = this.SmallMedalImage.SelectedValue; if (this.RibbonImage.SelectedIndex > 0) { ribbonURL = this.RibbonImage.SelectedValue; } if (this.SmallRibbonImage.SelectedIndex > 0) { smallRibbonURL = this.SmallRibbonImage.SelectedValue; imageSize = this.GetImageSize(smallRibbonURL.ToString()); ribbonWidth = imageSize.Width; ribbonHeight = imageSize.Height; } // get size of small image imageSize = this.GetImageSize(smallImageURL.ToString()); // save medal CommonDb.medal_save(PageContext.PageModuleID, this.PageContext.PageBoardID, medalID, this.Name.Text, this.Description.Text, this.Message.Text, this.Category.Text, imageURL, ribbonURL, smallImageURL, smallRibbonURL, imageSize.Width, imageSize.Height, ribbonWidth, ribbonHeight, sortOrder, flags.BitValue); // go back to medals administration YafBuildLink.Redirect(ForumPages.admin_medals); }