///
/// 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