public static void ItemUpdated(SPItemEventProperties properties) { try { if (InTransaction(properties)) { return; } var data = new Dictionary <string, object> { { "Id", properties.ListItemId }, { "Title", GetTitle(properties) }, { "URL", properties.List.Forms[PAGETYPE.PAGE_DISPLAYFORM].Url + "?ID=" + properties.ListItemId }, { "ListTitle", properties.ListTitle }, { "ListId", properties.ListId }, { "WebId", properties.Web.ID }, { "SiteId", properties.SiteId }, { "UserId", new SPFieldUserValue(properties.Web, (string)properties.ListItem["Editor"]).LookupId }, { "ActivityTime", properties.ListItem["Modified"] } }; GetAssignedToUsers(properties, data); GetAssociatedListItems(properties, data); SocialEngineProxy.ProcessActivity(ObjectKind.ListItem, ActivityKind.Updated, data, properties.Web); } catch { } try { ParentItemUpdate.UpdateParent(properties); } catch { } }
public static void ItemDeleting(SPItemEventProperties properties) { try { if (InTransaction(properties)) { return; } var regionalSettings = properties.Web.CurrentUser.RegionalSettings ?? properties.Web.RegionalSettings; var data = new Dictionary <string, object> { { "Id", properties.ListItemId }, { "Title", GetTitle(properties) }, { "URL", properties.List.Forms[PAGETYPE.PAGE_DISPLAYFORM].Url + "?ID=" + properties.ListItemId }, { "ListTitle", properties.ListTitle }, { "ListId", properties.ListId }, { "WebId", properties.Web.ID }, { "SiteId", properties.SiteId }, { "UserId", properties.Web.CurrentUser.ID }, { "ActivityTime", regionalSettings.TimeZone.UTCToLocalTime(DateTime.UtcNow) }, }; GetAssociatedListItems(properties, data); SocialEngineProxy.ProcessActivity(ObjectKind.ListItem, ActivityKind.Deleted, data, properties.Web); } catch { } try { ParentItemUpdate.UpdateParent(properties); } catch { } }
private static bool InTransaction(SPItemEventProperties properties) { Guid?transaction = SocialEngineProxy.GetTransaction(properties.Web.ID, properties.ListId, properties.ListItemId, properties.Web); if (!transaction.HasValue) { return(false); } SocialEngineProxy.ClearTransaction(transaction.Value, properties.Web); return(true); }
private void AddCommentersFields() { SPSecurity.RunWithElevatedPrivileges(delegate() { using (SPSite tempSite = new SPSite(SPContext.Current.Web.Url)) { using (SPWeb tempWeb = tempSite.OpenWeb()) { tempWeb.AllowUnsafeUpdates = true; SPList originList = tempWeb.Lists[new Guid(_listId)]; // add commenters field SPField fldCommenters = null; try { fldCommenters = originList.Fields.GetFieldByInternalName("Commenters"); } catch (System.ArgumentException x) { fldCommenters = null; } tempWeb.AllowUnsafeUpdates = true; if (fldCommenters == null) { string fldCommentersName = originList.Fields.Add("Commenters", SPFieldType.Note, false); fldCommenters = originList.Fields.GetFieldByInternalName(fldCommentersName) as SPFieldMultiLineText; fldCommenters.Sealed = false; fldCommenters.Hidden = true; fldCommenters.AllowDeletion = false; fldCommenters.DefaultValue = string.Empty; fldCommenters.Update(); originList.Update(); } SPField fldCommentersRead = null; // add commentersread field try { fldCommentersRead = originList.Fields.GetFieldByInternalName("CommentersRead"); } catch (System.ArgumentException x) { fldCommentersRead = null; } if (fldCommentersRead == null) { string fldCommentersReadName = originList.Fields.Add("CommentersRead", SPFieldType.Note, false); fldCommentersRead = originList.Fields.GetFieldByInternalName(fldCommentersReadName) as SPFieldMultiLineText; fldCommentersRead.Hidden = true; fldCommentersRead.Sealed = false; fldCommentersRead.AllowDeletion = false; fldCommentersRead.DefaultValue = string.Empty; fldCommentersRead.Update(); originList.Update(); } tempWeb.Update(); SPListItem originListItem = null; List <int> laCommenters = new List <int>(); List <int> laCommentersRead = new List <int>(); if (originList != null) { originListItem = originList.GetItemById(int.Parse(_itemId)); } if (originListItem != null) { string sCommenters = originListItem[originList.Fields.GetFieldByInternalName("Commenters").Id] != null ? originListItem[originList.Fields.GetFieldByInternalName("Commenters").Id].ToString() : string.Empty; foreach (string s in sCommenters.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { if (!string.IsNullOrEmpty(s.Trim())) { laCommenters.Add(int.Parse(s)); } } string sCommentersRead = originListItem[originList.Fields.GetFieldByInternalName("CommentersRead").Id] != null ? originListItem[originList.Fields.GetFieldByInternalName("CommentersRead").Id].ToString() : string.Empty; foreach (string s in sCommentersRead.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) { if (!string.IsNullOrEmpty(s.Trim())) { laCommentersRead.Add(int.Parse(s)); } } // get user object SPFieldUser author = null; author = (SPFieldUser)originListItem.Fields[SPBuiltInFieldId.Author]; SPFieldUserValue userVal = (SPFieldUserValue)author.GetFieldValue(originListItem[SPBuiltInFieldId.Author].ToString()); SPUser authorObj = userVal.User; // (if current user is item creator OR in commenters column OR in the assigned to field) AND not in commentersread column if (((authorObj != null && SPContext.Current.Web.CurrentUser.ID == authorObj.ID) || (laCommenters.Contains(SPContext.Current.Web.CurrentUser.ID)) || (CommentManager.UserIsAssigned(SPContext.Current.Web.CurrentUser.ID, originListItem))) && (!laCommentersRead.Contains(SPContext.Current.Web.CurrentUser.ID))) { string sNewCommentersRead = originListItem[originList.Fields.GetFieldByInternalName("CommentersRead").Id] != null ? originListItem[originList.Fields.GetFieldByInternalName("CommentersRead").Id].ToString() : string.Empty; List <int> newCommenters = new List <int>(); if (!string.IsNullOrEmpty(sNewCommentersRead)) { string[] vals = sNewCommentersRead.Split(','); foreach (string s in vals) { if (!string.IsNullOrEmpty(s.Trim())) { newCommenters.Add(int.Parse(s)); } } } if (!newCommenters.Contains(SPContext.Current.Web.CurrentUser.ID)) { newCommenters.Add(SPContext.Current.Web.CurrentUser.ID); } StringBuilder sb = new StringBuilder(); foreach (int i in newCommenters) { sb.Append(i.ToString() + ","); } string s1 = sb.ToString(); s1 = s1.Remove(s1.LastIndexOf(",")); originListItem[originList.Fields.GetFieldByInternalName("CommentersRead").Id] = s1; } SocialEngineProxy.SetTransaction(originListItem.Web.ID, originListItem.ParentList.ID, originListItem.ID, "Comments", originListItem.Web); originListItem.SystemUpdate(); } } } }); }