/// <summary>
 /// Assigns users to a SharePoint v3 site according to permissions specified in the User object for every user
 /// </summary>
 /// <param name="SiteURL">SharePoint v3 site URL</param>
 /// <param name="Users">Users to be added to the site</param>
 /// <param name="Log">The method will return log of the operations performed.</param>
 public void AssignUsersToSite(string siteURL, CS4UserCollection users, ref string log)
 {
     for (int userIndex = 0; userIndex < users.Count; userIndex++)
     {
         try
         {
             AddSiteUser(users.Item(userIndex));
             log += String.Format(TextResources.UserAddedToSite, users.Item(userIndex).UserLoginWithDomain, siteURL) + Environment.NewLine;
         }
         catch (System.Exception ex)
         {
             log += String.Format(TextResources.CantAddUserToSite, users.Item(userIndex).UserLoginWithDomain, siteURL) + ex.Message + Environment.NewLine;
         }
     }
 }
        /// <summary>
        /// Adds users to SharePoint group. If user does not belong to the site, it will be added.
        /// </summary>
        /// <param name="SiteURL">A SharePoint site where the group resides</param>
        /// <param name="GroupName">SharePoint group name</param>
        /// <param name="Users">List of users to be added</param>
        /// <param name="Log">Method returns a log of operations performed</param>
        public void AssignUsersToGroup(string siteURL, string groupName, CS4UserCollection users, ref string log)
        {
            SPSite  site    = null;
            SPWeb   siteWeb = null;
            SPGroup group   = null;

            try
            {
                site    = new SPSite(siteURL);
                siteWeb = site.OpenWeb();
                group   = siteWeb.SiteGroups[groupName];
            }
            catch (System.Exception ex)
            {
                log += String.Format(TextResources.CantAddUsersToGroup, groupName) + ex.Message + Environment.NewLine;
                return;
            }
            //ensure user has access to the site
            for (int userIndex = 0; userIndex < users.Count; userIndex++)
            {
                SPUser user       = null;
                bool   createUser = false;
                try
                {
                    user = siteWeb.SiteUsers[users.Item(userIndex).UserLoginWithDomain];
                }
                catch
                {
                    //user does not exist
                    createUser = true;
                }
                try
                {
                    if (createUser)
                    {
                        AddSiteUser(users.Item(userIndex));
                        user = siteWeb.SiteUsers[users.Item(userIndex).UserLoginWithDomain];
                    }
                    group.AddUser(user);
                    log += String.Format(TextResources.UserAddedToGroup, users.Item(userIndex).UserLoginWithDomain, groupName) + Environment.NewLine;
                }
                catch (System.Exception ex)
                {
                    log += String.Format(TextResources.CantAddUserToGroup, users.Item(userIndex).UserLoginWithDomain, groupName) + ex.Message + Environment.NewLine;
                }
            }
        }