rendered paste bodyusing 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; }
}
}