/// <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;
            }
        }
Exemple #3
0
        /// <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);
        }