/// <summary> /// Handles the Click event of the VoteButton control. /// </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 VoteButtonClick(object sender, EventArgs e) { if (!User.Identity.IsAuthenticated) { Response.Redirect(string.Format("~/Account/Login.aspx?ReturnUrl={0}", Server.UrlEncode(Request.RawUrl))); } var vote = new IssueVote { IssueId = IssueId, VoteUsername = Security.GetUserName() }; IssueVoteManager.SaveOrUpdate(vote); var count = Convert.ToInt32(IssueVoteCount.Text) + 1; IssueVoteCount.Text = count.ToString(); VoteButton.Visible = false; VotedLabel.Visible = true; }
/// <summary> /// Binds the values. /// </summary> private void BindValues(Issue currentIssue) { BindOptions(); lblIssueNumber.Text = string.Concat(currentIssue.FullId, ":"); TitleLabel.Text = Server.HtmlDecode(currentIssue.Title); DropIssueType.SelectedValue = currentIssue.IssueTypeId; DropResolution.SelectedValue = currentIssue.ResolutionId; DropStatus.SelectedValue = currentIssue.StatusId; DropPriority.SelectedValue = currentIssue.PriorityId; DropOwned.SelectedValue = currentIssue.OwnerUserName; // SMOSS: XSS Bugfix Description.Text = (currentIssue.Description); // WARNING: Do Not html decode the text for the editor. // The editor is expecting HtmlEncoded text as input. DescriptionHtmlEditor.Text = currentIssue.Description; lblLastUpdateUser.Text = currentIssue.LastUpdateDisplayName; lblReporter.Text = currentIssue.CreatorDisplayName; // XSS Bugfix // The text box is expecting raw html TitleTextBox.Text = Server.HtmlDecode(currentIssue.Title); DisplayTitleLabel.Text = currentIssue.Title; lblDateCreated.Text = currentIssue.DateCreated.ToString("g"); lblLastModified.Text = currentIssue.LastUpdate.ToString("g"); lblIssueNumber.Text = currentIssue.FullId; DropCategory.SelectedValue = currentIssue.CategoryId; DropMilestone.SelectedValue = currentIssue.MilestoneId; DropAffectedMilestone.SelectedValue = currentIssue.AffectedMilestoneId; DropAssignedTo.SelectedValue = currentIssue.AssignedUserName; lblLoggedTime.Text = currentIssue.TimeLogged.ToString(); txtEstimation.Text = currentIssue.Estimation == 0 ? string.Empty : currentIssue.Estimation.ToString(); DueDatePicker.SelectedValue = currentIssue.DueDate == DateTime.MinValue ? null : (DateTime?)currentIssue.DueDate; chkPrivate.Checked = currentIssue.Visibility != 0; ProgressSlider.Text = currentIssue.Progress.ToString(); IssueVoteCount.Text = currentIssue.Votes.ToString(); if (User.Identity.IsAuthenticated && IssueVoteManager.HasUserVoted(currentIssue.Id, Security.GetUserName())) { VoteButton.Visible = false; VotedLabel.Visible = true; VotedLabel.Text = GetLocalResourceObject("Voted").ToString(); } else { VoteButton.Visible = true; VotedLabel.Visible = false; } if (currentIssue.StatusId != 0 && StatusManager.GetById(currentIssue.StatusId).IsClosedState) { VoteButton.Visible = false; VotedLabel.Visible = false; } List <DefaultValue> defValues = IssueManager.GetDefaultIssueTypeByProjectId(ProjectId); DefaultValue selectedValue = defValues.FirstOrDefault(); if (selectedValue != null) { // Visibility Section IssueTypeField.Visible = selectedValue.TypeEditVisibility; StatusField.Visible = selectedValue.StatusEditVisibility; PriorityField.Visible = selectedValue.PriorityEditVisibility; PrivateField.Visible = selectedValue.PrivateEditVisibility; CategoryField.Visible = selectedValue.CategoryEditVisibility; DueDateField.Visible = selectedValue.DueDateEditVisibility; ProgressField.Visible = selectedValue.PercentCompleteEditVisibility; MilestoneField.Visible = selectedValue.MilestoneEditVisibility; EstimationField.Visible = selectedValue.EstimationEditVisibility; ResolutionField.Visible = selectedValue.ResolutionEditVisibility; AffectedMilestoneField.Visible = selectedValue.AffectedMilestoneEditVisibility; AssignedToField.Visible = selectedValue.AssignedToEditVisibility; OwnedByField.Visible = selectedValue.OwnedByEditVisibility; } }
/// <summary> /// Saves the issue. /// </summary> /// <returns></returns> private bool SaveIssue() { decimal estimation; decimal.TryParse(txtEstimation.Text.Trim(), out estimation); var dueDate = DueDatePicker.SelectedValue ?? DateTime.MinValue; var issue = new Issue { AffectedMilestoneId = DropAffectedMilestone.SelectedValue, AffectedMilestoneImageUrl = string.Empty, AffectedMilestoneName = DropAffectedMilestone.SelectedText, AssignedDisplayName = DropAssignedTo.SelectedText, AssignedUserId = Guid.Empty, AssignedUserName = DropAssignedTo.SelectedValue, CategoryId = DropCategory.SelectedValue, CategoryName = DropCategory.SelectedText, CreatorDisplayName = Security.GetDisplayName(), CreatorUserId = Guid.Empty, CreatorUserName = Security.GetUserName(), DateCreated = DateTime.Now, Description = DescriptionHtmlEditor.Text.Trim(), Disabled = false, DueDate = dueDate, Estimation = estimation, Id = 0, IsClosed = false, IssueTypeId = DropIssueType.SelectedValue, IssueTypeName = DropIssueType.SelectedText, IssueTypeImageUrl = string.Empty, LastUpdate = DateTime.Now, LastUpdateDisplayName = Security.GetDisplayName(), LastUpdateUserName = Security.GetUserName(), MilestoneDueDate = null, MilestoneId = DropMilestone.SelectedValue, MilestoneImageUrl = string.Empty, MilestoneName = DropMilestone.SelectedText, OwnerDisplayName = DropOwned.SelectedText, OwnerUserId = Guid.Empty, OwnerUserName = DropOwned.SelectedValue, PriorityId = DropPriority.SelectedValue, PriorityImageUrl = string.Empty, PriorityName = DropPriority.SelectedText, Progress = Convert.ToInt32(ProgressSlider.Text), ProjectCode = string.Empty, ProjectId = ProjectId, ProjectName = string.Empty, ResolutionId = DropResolution.SelectedValue, ResolutionImageUrl = string.Empty, ResolutionName = DropResolution.SelectedText, StatusId = DropStatus.SelectedValue, StatusImageUrl = string.Empty, StatusName = DropStatus.SelectedText, Title = Server.HtmlEncode(TitleTextBox.Text), TimeLogged = 0, Visibility = chkPrivate.Checked ? 1 : 0, Votes = 0 }; if (!IssueManager.SaveOrUpdate(issue)) { Message1.ShowErrorMessage(Resources.Exceptions.SaveIssueError); return(false); } if (!CustomFieldManager.SaveCustomFieldValues(issue.Id, ctlCustomFields.Values, true)) { Message1.ShowErrorMessage(Resources.Exceptions.SaveCustomFieldValuesError); return(false); } IssueId = issue.Id; //add attachment if present. if (AspUploadFile.HasFile) { // get the current file var uploadFile = AspUploadFile.PostedFile; string inValidReason; var validFile = IssueAttachmentManager.IsValidFile(uploadFile.FileName, out inValidReason); if (validFile) { if (uploadFile.ContentLength > 0) { byte[] fileBytes; using (var input = uploadFile.InputStream) { fileBytes = new byte[uploadFile.ContentLength]; input.Read(fileBytes, 0, uploadFile.ContentLength); } var issueAttachment = new IssueAttachment { Id = Globals.NEW_ID, Attachment = fileBytes, Description = AttachmentDescription.Text.Trim(), DateCreated = DateTime.Now, ContentType = uploadFile.ContentType, CreatorDisplayName = string.Empty, CreatorUserName = Security.GetUserName(), FileName = uploadFile.FileName, IssueId = issue.Id, Size = fileBytes.Length }; if (!IssueAttachmentManager.SaveOrUpdate(issueAttachment)) { Message1.ShowErrorMessage(string.Format(GetGlobalResourceObject("Exceptions", "SaveAttachmentError").ToString(), uploadFile.FileName)); } } } else { Message1.ShowErrorMessage(inValidReason); return(false); } } //create a vote for the new issue var vote = new IssueVote { IssueId = issue.Id, VoteUsername = Security.GetUserName() }; if (!IssueVoteManager.SaveOrUpdate(vote)) { Message1.ShowErrorMessage(Resources.Exceptions.SaveIssueVoteError); return(false); } if (chkNotifyOwner.Checked && !string.IsNullOrEmpty(issue.OwnerUserName)) { var oUser = UserManager.GetUser(issue.OwnerUserName); if (oUser != null) { var notify = new IssueNotification { IssueId = issue.Id, NotificationUsername = oUser.UserName }; IssueNotificationManager.SaveOrUpdate(notify); } } if (chkNotifyAssignedTo.Checked && !string.IsNullOrEmpty(issue.AssignedUserName)) { var oUser = UserManager.GetUser(issue.AssignedUserName); if (oUser != null) { var notify = new IssueNotification { IssueId = issue.Id, NotificationUsername = oUser.UserName }; IssueNotificationManager.SaveOrUpdate(notify); } } //send issue notifications IssueNotificationManager.SendIssueAddNotifications(issue.Id); return(true); }