All pastes #2051952 Raw Edit

Unnamed

public text v1 · immutable
#2051952 ·published 2011-04-29 17:01 UTC
rendered paste body
using System;
using System.Linq;
using System.Runtime.Serialization;
using System.Web.Script.Services;
using System.Web.Services;
using DevFacto.SP2007.Extensions.WSS;
using Ledcor.HRCentral.Resources;
using Ledcor.HRCentral.Resources.Feedback;
using Ledcor.HRCentral.Util;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint.Utilities;

namespace Ledcor.HRCentral._Layouts.Ledcor.Services
{
    [ScriptService]
    [WebService(Namespace = "http://connect.ledcor.net/_layouts/Ledcor/Services/")]
    public class FeedbackService : WebService
    {

        [WebMethod]
        public FeedbackServiceResponse SubmitFeedback(string subject, string contactReason, string comment, int userId, string url, Guid webId)
        {
            var message = "";
            try
            {
                var site = SPContext.Current.Site;
                var rootWeb = site.RootWeb;
                rootWeb.AllowUnsafeUpdates = true;
                var user = rootWeb.SiteUsers.GetByID(userId);
                var submitDate = DateTime.Now;

                SPList list = rootWeb.DFGetList(Ledcor_HRCentral_Core.List_FeedbackComments_Name);

                SPListItem item = list.Items.Add();

                item[FeedbackCommentsList.FieldNames.Subject] = subject;
                item[FeedbackCommentsList.FieldNames.ReasonForContact] = contactReason;
                item[FeedbackCommentsList.FieldNames.FeedbackComment] = comment;
                item[FeedbackCommentsList.FieldNames.Url] = url;

                item[FeedbackCommentsList.FieldNames.FullName] = user.Name;
                item[FeedbackCommentsList.FieldNames.Email] = user.Email;
                item[FeedbackCommentsList.FieldNames.DateSubmitted] = submitDate;

                item.Update();

                var feedbackInfo =
                    string.Format("Subject: {0}" + Environment.NewLine + 
                        "Contact Reason: {1}" + Environment.NewLine+
                        Environment.NewLine+ 
                        "Comment:" + Environment.NewLine+ "{2}" + Environment.NewLine + Environment.NewLine+ 
                        "From Page: {3}" + Environment.NewLine +
                        "User Name: {4}" + Environment.NewLine + 
                        "Email: {5}" + Environment.NewLine+ 
                        "Submitted on: {6:yyyy-MM-dd}" + Environment.NewLine,
                        subject,
                        contactReason,
                        comment,
                        url,
                        user.Name,
                        user.Email,
                        submitDate
                        );

                // send notification to admin(s)
                using (SPWeb ownersWeb = site.OpenWeb(Ledcor_HRCentral_Core.List_SiteOwner_Url))
                using (SPWeb curWeb = site.OpenWeb(webId))
                {
                    var ownersList = ownersWeb.GetList(Ledcor_HRCentral_Core.List_SiteOwner_Url);
                    var query = new SPQuery(ownersList.DefaultView);
                    query.EnsureQueryViewField(ownersList, Ledcor_HRCentral_Core.Field_SiteOwners_Site);
                    query.EnsureQueryViewField(ownersList, Ledcor_HRCentral_Core.Field_SiteOwners_SiteOwners);
                    query.Query +=
                        string.Format("<Where><Or>" +
                                      "<Eq><FieldRef Name='Title' /><Value Type='Text'>{0}</Value></Eq>" +
                                      "<Eq><FieldRef Name='Title' /><Value Type='Text'>{1}</Value></Eq>" +
                                      "</Or></Where>",
                                      curWeb.Title, Ledcor_HRCentral_Core.Const_SiteOwner_DefaultSiteTitle);
                    var matchedRows = ownersList.GetItems(query);
                    if (matchedRows.Count > 0)
                    {
                        var ownerBodyText = "Dear Ledcor Connect Site Owner," + Environment.NewLine + Environment.NewLine +
                                       "New feedback about your site has been submitted: " +
                                       Environment.NewLine +
                                       feedbackInfo + Environment.NewLine;

                        var ownerRows = matchedRows.Cast<SPListItem>().Where(i => i.Title == curWeb.Title);
                        if (ownerRows.Count() == 0)
                            ownerRows = matchedRows.Cast<SPListItem>();
                        
                        var field = ownersList.Fields.Cast<SPField>().First(f => f.Title == Ledcor_HRCentral_Core.Field_SiteOwners_SiteOwners);
                        var owners = ownerRows.SelectMany(o => o.DFGetFieldValueUsers(field, ownersWeb));
                        var allOwnerEmails = string.Join(",", owners.Select(u => u.Email).ToArray());
                        if (!string.IsNullOrEmpty(allOwnerEmails))
                        {
                            SPSecurity.RunWithElevatedPrivileges(() => SendEmail(rootWeb, "New Feedback", ownerBodyText, allOwnerEmails));
                        }
                    }
                }

                // send confirmation email to user
                var userBodyText = "Dear " + user.Name + "," + Environment.NewLine + Environment.NewLine +
                                   "Thank you for your feedback. The following information has been submitted: " +
                                   Environment.NewLine +
                                   feedbackInfo + Environment.NewLine;
                if (!string.IsNullOrEmpty(user.Email))
                {
                    SPSecurity.RunWithElevatedPrivileges(() => SendEmail(rootWeb, "Feedback Submitted", userBodyText, user.Email));
                }

                return new FeedbackServiceResponse { Success = true, Message = "Feedback Submitted" };
            }
            catch (Exception ex)
            {
                DFEventLogging.LogEvent("FeedbackService:" + ex.ToString(), EventSeverity.Error);
                message = ex.ToString();
            }

            return new FeedbackServiceResponse { Success = false, Message = message };

        }

        private void SendEmail(SPWeb web, string title, string body, string emailTo)
        {
            DFEventLogging.LogEvent(string.Format("FeedbackService.SendEmail('{0}','{1}')", emailTo, body), EventSeverity.Information);
            SPUtility.SendEmail(web, true, true, emailTo, title, body);
        }
    }



    [DataContract]
    public class FeedbackServiceResponse
    {
        [DataMember]
        public bool Success { get; set; }

        [DataMember]
        public string Message { get; set; }
    }
}