Ejemplo n.º 1
0
        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 { }
        }
Ejemplo n.º 2
0
        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 { }
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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();
                        }
                    }
                }
            });
        }