Click here to Skip to main content
15,892,298 members
Articles / Web Development / ASP.NET

Update SharePoint UserInfo List with More Active Directory Info

Rate me:
Please Sign up or sign in to vote.
4.45/5 (5 votes)
19 Mar 2009CPOL2 min read 59.7K   371   16  
Shows how to write a job that updates the UserInfo list with more Active Directory information.
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using Microsoft.SharePoint;
using System.IO;
using System.Web.UI;
using System.Xml.Xsl;
using System.Net.Mail;
using System.Data;
using Mullivan.Collections.Generic;
using Microsoft.SharePoint.Administration;
using System.Web;
using System.Reflection;
using System.Collections;

namespace Mullivan.SharePoint.Reminders
{
    public static class RmdUtil
    {
        public static string GetConfigName(Guid listId)
        {
            return listId.ToString().Replace("-","") + "_RmdConfig";
        }

        /// <summary>
        /// This method filters or sets and mail addresses that are related to items
        /// </summary>
        /// <param name="mailToAddresses"></param>
        /// <param name="item"></param>
        /// <returns></returns>
        public static MailAddress[] GetMailToAddresses(string[] mailToAddresses, SPListItem item, SPList list)
        {
            if (mailToAddresses == null || mailToAddresses.Length == 0)
                throw new Exception("Email can not be sent when there are no emails supplied.");
            List<MailAddress> addresses = new List<MailAddress>();

            foreach (string strAddress in mailToAddresses)
            {
                if (strAddress.StartsWith("[#") && strAddress.EndsWith("#]"))
                {
                    if (item == null)
                        continue;

                    MailAddress ma = GetMailAddress(strAddress, item, list);
                    if (ma != null)
                        addresses.Add(ma);
                }
                else
                    addresses.Add(new MailAddress(strAddress));
            }

            return addresses.ToArray();
        }

        private static MailAddress GetMailAddress(string strAddress, SPListItem item, SPList list)
        {
            try
            {
                string userName = string.Empty;
                int id = -1;
                string fieldName = strAddress.Substring(2, strAddress.Length - 2);
                fieldName = fieldName.Substring(0, fieldName.Length - 2);

                if (fieldName.ToLower().Equals("checkoutuser"))
                {
                    if (item.File != null && item.File.CheckedOutBy != null)
                        return new MailAddress(item.File.CheckedOutBy.Email);
                    else
                        return null;
                }
                else
                {
                    SPField field = null;
                    foreach (SPField f in list.Fields)
                    {
                        if (string.Compare(f.InternalName, fieldName, true) == 0
                            || string.Compare(f.Title, fieldName, true) == 0)
                        {
                            field = f;
                            break;
                        }
                    }

                    if (field == null)
                        return null;

                    string val = (string)item[field.Id];

                    if (string.IsNullOrEmpty(val))
                        return null;

                    string[] vals = val.Split(new string[1] { ";#" }, StringSplitOptions.RemoveEmptyEntries);
                    if (vals.Length > 1)
                    {
                        if (!int.TryParse(vals[0], out id))
                        {
                            id = -1;
                            userName = vals[1];
                        }
                    }
                    else
                    {
                        if (!int.TryParse(vals[0], out id))
                        {
                            id = -1;
                            userName = vals[0];
                        }
                    }
                }

                using (SPWeb web = list.ParentWeb)
                {
                    SPListItem user = null;

                    if (id < 0)
                        user = GetUserInfo(web, userName);
                    else
                        user = GetUserInfo(web, id);

                    if(user == null)
                        return null;

                    object email = user["EMail"];
                    if (email != null)
                        return new MailAddress(email.ToString());
                    else
                        return null;
                }
            }
            catch (Exception ex)
            {
                Logging.ServiceLog.LogException(ex);
                return null;
            }
        }

        public static List<RmdConfiguration> GetRmdConfigs(SPList list)
        {
            string configName = GetConfigName(list.ID);
            string configuration = string.Empty;

            //I used the ParentWeb because the SPList object doesn't have a property bag
            using (SPWeb web = list.ParentWeb)
            {
                if (web.Properties.ContainsKey(configName))
                    configuration = list.ParentWeb.Properties[configName];
            }

            if (string.IsNullOrEmpty(configuration))
                return null;

            return RmdConfiguration.ReadConfigurations(configuration);
        }

        public static void SetRmdConfigs(SPList list, List<RmdConfiguration> rmdConfigs)
        {
            string configName = GetConfigName(list.ID);
            string configuration = string.Empty;

            //I used the ParentWeb because the SPList object doesn't have a property bag
            configuration = RmdConfiguration.WriteConfigurations(rmdConfigs);
            using (SPWeb web = list.ParentWeb)
            {
                if (!web.Properties.ContainsKey(configName))
                    web.Properties.Add(configName, configuration);
                else
                    web.Properties[configName] = configuration;
                web.Properties.Update();
                web.Update();
            }
        }

        public static RmdConfiguration FindReminder(Guid id, List<RmdConfiguration> rmdConfigs)
        {
            foreach(RmdConfiguration rmdConfig in rmdConfigs)
            {
                if (rmdConfig.Id == id)
                    return rmdConfig;
            }
            return null;
        }

        public static SPListItem GetUserInfo(SPWeb web, string loginName)
        {
            try
            {
                SPUser u = web.SiteUsers[loginName];
                
                if (u == null)
                    return null;

                return GetUserInfo(web, u.ID);
            }
            catch (Exception ex)
            {
                Logging.ServiceLog.LogException(ex);
            }
            return null;
        }

        public static SPListItem GetUserInfo(SPWeb web, int id)
        {
            try
            {
                SPList userList = web.SiteUserInfoList;
                SPQuery query = new SPQuery();

                query.ViewFields = "<FieldRef Name=\"Title\"/><FieldRef Name=\"Name\"/><FieldRef Name=\"EMail\"/>";
                query.Query = string.Format(@"<Where><Eq><FieldRef Name='ID'/><Value Type='Int'>{0}</Value></Eq></Where>", id); // u.ID is the ID of logged in user

                SPListItemCollection items = userList.GetItems(query);
                if (items.Count > 0)
                    return items[0];
            }
            catch (Exception ex)
            {
                Logging.ServiceLog.LogException(ex);
            }
            return null;
        }

        public static XsltArgumentList GetXsltArgList(SPList list)
        {
            XsltArgumentList argList = new XsltArgumentList();
            string defaultViewUrl, siteUrl, url, imageUrl, editFormUrl;

            MullivanUtility.GetFullListUrls(list, out defaultViewUrl, out imageUrl, out url, out editFormUrl, out siteUrl);

            
            argList.AddParam("listId", "", list.ID.ToString());
            argList.AddParam("listTitle", "", list.Title);
            argList.AddParam("listUrl", "", url);
            argList.AddParam("listImageUrl", "", imageUrl);
            argList.AddParam("listEditFormUrl", "", editFormUrl);
            argList.AddParam("listDefaultViewUrl", "", defaultViewUrl);
            argList.AddParam("siteUrl", "", siteUrl);

            return argList;
        }

        public static string GetXml(SPListItem item)
        {
            return string.Format(
@"<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882' 
xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882' 
xmlns:rs='urn:schemas-microsoft-com:rowset' 
xmlns:z='#RowsetSchema'> 
<rs:data ItemCount=""1"">
{0} 
</rs:data> 
</xml>", item.Xml);
        }

        public static string GetXml(SPListItemCollection spItems)
        {
            string strXml = spItems.Xml;

            XmlDocument xDoc = new XmlDocument();
            xDoc.LoadXml(strXml);

            XmlNode xnSchema = xDoc.DocumentElement.ChildNodes[0];
            xDoc.DocumentElement.RemoveChild(xnSchema);

            return xDoc.InnerXml;
        }
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions