/// /// Code extract from 'Recent Changes' web part /// No warranties provided, proof of concept only /// Author: Scott Samuels /// Date: 12 April 2009 /// /// Gets the recent changes for the web in context occuring in the /// given timespan. /// private string[] getRecentChangesWeb(TimeSpan timespan) { ArrayList result = new ArrayList(); SPSite siteCollection = SPContext.Current.Site; SPWeb site = SPContext.Current.Web; SPListCollection lists = site.Lists; SPRegionalSettings regionSettings = site.RegionalSettings; SPTimeZone timeZone = regionSettings.TimeZone; /// Get all the changes in the last timespan /// If the site collection has been created in the last 24 hours then /// make sure you are only getting changes that have occured after it has been set-up SPChangeToken token = new SPChangeToken(SPChangeCollection.CollectionScope.Web, site.ID, DateTime.Now - timespan); SPChangeQuery query = new SPChangeQuery(true, true); query.ChangeTokenStart = token; SPChangeCollection changes = site.GetChanges(query); foreach (SPChange changedObject in changes) { switch (changedObject.GetType().ToString()) { case "Microsoft.SharePoint.SPChangeItem": SPChangeItem changedItem = (SPChangeItem)changedObject; try { if ((string.Compare(lists[changedItem.ListId].Title, "User Information List") == 0 && changedItem.ChangeType == SPChangeType.MemberAdd) || ((string.Compare(lists[changedItem.ListId].Title, "User Information List") != 0) && (string.Compare(lists[changedItem.ListId].Title, "Web Part Gallery") != 0) && (string.Compare(lists[changedItem.ListId].Title, "Master Page Gallery") != 0) && (string.Compare(lists[changedItem.ListId].Title, "Reporting Templates") != 0) && (string.Compare(lists[changedItem.ListId].Title, "Reporting Metadata") != 0) && (string.Compare(lists[changedItem.ListId].GetItemByUniqueId(changedItem.UniqueId).Name, "Get Started with Windows SharePoint Services!") != 0))) { string str; SPUserCollection users = site.AllUsers; switch (changedItem.ChangeType) { /// create a string that represents the adding of an item case SPChangeType.Add: str = lists[changedItem.ListId].GetItemByUniqueId(changedItem.UniqueId)["Created By"].ToString(); /// get the user SPUser user1 = users.GetByID(Convert.ToInt32(str.Split(';')[0])); /// get their My Site public URL if it exists Uri mysiteUri = getUserPublicMySite(user1.LoginName, siteCollection); result.Add((string)"" + str.Split('#')[1] + " created \"" + lists[changedItem.ListId].GetItemByUniqueId(changedItem.UniqueId).Name + "\" at " + timeZone.UTCToLocalTime(changedItem.Time)); break; /// do for more change types... /// case SPChangeType.Update: } } } catch { Console.WriteLine("The object to which item " + changedItem.UniqueId + " belongs does not exist.
"); } break; } } return (string[])result.ToArray(typeof(string)); }/// end getRecentChanges