private static void setEmail(string principalCID, SPListItem item, ADuser aduser) { if (aduser.CID.Equals(principalCID)) { string principalEMail = ConfigurationFile.GetGonfigurationFile(Chalmers.Core.Constants.CoreConstants.ConfigurationFilePath).GetSettingValue("PrincipalEMail"); LoggingService.WriteTrace( EventSeverity.Information, "Principal CID found: '" + aduser.CID + "'. Setting e-mail to: '" + principalEMail + "', based on: '" + Chalmers.Core.Constants.CoreConstants.ConfigurationFilePath + "'.", LogCategory.ChalmersPublicWeb); item["FieldStaffEmail"] = principalEMail; } else { item["FieldStaffEmail"] = aduser.Mail; } }
private static void updateFromAD(Dictionary <string, Guid> indexedTaxonomy, TermSet termSet, string ldapServerUrl, string principalCID, SPListItem item, SPFieldUser staffUserId) { var chalmerUserId = staffUserId.GetFieldValue(item[Constants.ChalmersID].ToString()) as SPFieldUserValue; if (chalmerUserId != null) { string username = chalmerUserId.User.LoginName; LoggingService.WriteTrace(EventSeverity.Information, "Got username: "******"UserLoginName has claims: " + userLoginName, LogCategory.ChalmersPublicWeb); } if (!string.IsNullOrEmpty(userLoginName)) { ADuser aduser = new ADuser(userLoginName) { LdapServerUrl = ldapServerUrl, GivenName = string.Empty, SN = string.Empty, Mail = string.Empty, Organisation = string.Empty, TelephoneNumber = string.Empty, OtherTelephone = string.Empty }; #if DEBUG string value = ConfigurationFile.GetGonfigurationFile(Chalmers.PublicWeb.Core.Constants.ConfigurationFilePath).GetSettingValue("StaffSyncCID"); if (value.ToLower().Contains(aduser.CID.ToLower().Replace("net\\", string.Empty))) { string x = "asdf"; System.Diagnostics.Debug.Print(x.ToString()); } #endif LoggingService.WriteTrace(EventSeverity.Information, "aduser CID = " + aduser.CID, LogCategory.ChalmersPublicWeb); string domain = WebConfigurationManager.AppSettings["CurrentDomain"]; if (string.IsNullOrEmpty(domain)) { aduser.ADDomainName = @"net\"; } else { aduser.ADDomainName = domain + @"\"; } if (aduser.CID.IndexOf(@"\", StringComparison.OrdinalIgnoreCase) > 0) { aduser.CIDWithoutDomain = aduser.CID.Remove(0, aduser.CID.IndexOf(@"\", StringComparison.OrdinalIgnoreCase) + 1); #if DEBUG if (aduser.CIDWithoutDomain.ToString().ToLower().Equals("kain") || aduser.CIDWithoutDomain.ToString().ToLower().Equals("anderska")) { string x = aduser.CIDWithoutDomain.ToString(); System.Diagnostics.Debug.Print(x); } #endif } List <Term> terms = null; TaxonomyField managedField = null; aduser = ADUserProfile.GetUserProfileFromAD(aduser); if (aduser != null) { bool adUnitsHaveChanged = taxFieldChanged(indexedTaxonomy, termSet, item, aduser, ref terms, ref managedField); System.Text.StringBuilder phoneNumbers = new System.Text.StringBuilder(); if (!string.IsNullOrEmpty(aduser.TelephoneNumber)) { phoneNumbers.Append(aduser.TelephoneNumber); } if (phoneNumbers.Length > 0 && !string.IsNullOrEmpty(aduser.OtherTelephone)) { phoneNumbers.Append(", "); } if (!string.IsNullOrEmpty(aduser.OtherTelephone)) { phoneNumbers.Append(aduser.OtherTelephone); } if ( hasUpdatedValues(item, aduser, phoneNumbers) || DateTime.Now.DayOfWeek == DayOfWeek.Saturday || adUnitsHaveChanged || (aduser.CID.Equals(principalCID)) ) { item["EduPersonOrcid"] = aduser.EduPersonOrcid; item["FieldStaffGivenname"] = aduser.GivenName; item["FieldStaffLastName"] = aduser.SN; item["FieldStaffFullName"] = aduser.GivenName + " " + aduser.SN; item["Title"] = aduser.GivenName + " " + aduser.SN; item["FieldStaffOrganisation"] = aduser.Organisation; item["FieldStaffTelephone"] = phoneNumbers.ToString(); item["OfficeRoomNumber"] = aduser.OfficeRoomNumber; item["OfficeStreet"] = aduser.OfficeStreet; item["OfficeFloorNumber"] = aduser.OfficeFloorNumber; setEmail(principalCID, item, aduser); if (adUnitsHaveChanged) { if (terms == null) { terms = new List <Term>(); } managedField.SetFieldValue(item, terms); } trySaveChanges(item, aduser); } } } } }
private void SyncStaffList(SPSite site, Guid stafWebId, Dictionary <string, Guid> indexedTaxonomy, TermSet termSet, ref int itemsProcessed) { string ldapServerUrl = ConfigurationFile.GetGonfigurationFile(Constants.ConfigurationFilePath).GetSettingValue("LdapServerUrl"); if (string.IsNullOrEmpty(ldapServerUrl)) { string msg = string.Format("No LDAP server configured! Unable to sync staff members. Add the key 'LdapServerUrl' to the configuration file {0}", Constants.ConfigurationFilePath); Console.WriteLine(msg); LoggingService.WriteTrace( EventSeverity.Error, msg, LogCategory.ChalmersPublicWeb); return; } using (SPWeb staffWeb = site.OpenWeb(stafWebId)) { PublishingWeb pweb = PublishingWeb.GetPublishingWeb(staffWeb); SPList staffSitePagesList = pweb.PagesList; LoggingService.WriteTrace(EventSeverity.Information, "Got pages list: " + staffSitePagesList.Title, LogCategory.ChalmersPublicWeb); SPListItemCollection col = staffSitePagesList.Items; SPField field = (staffSitePagesList).Fields.GetField(Constants.ChalmersID); LoggingService.WriteTrace(EventSeverity.Information, string.Format("Got department taxonomy, number of items = {0}. Description with text 59fosmig exists = {1}", indexedTaxonomy.Count, indexedTaxonomy.ContainsKey("59fosmig")), LogCategory.ChalmersPublicWeb); string principalCID = ConfigurationFile.GetGonfigurationFile(Chalmers.Core.Constants.CoreConstants.ConfigurationFilePath).GetSettingValue("PrincipalCID"); foreach (SPListItem item in col) { double max = 16000.0; if (itemsProcessed < max) { try { UpdateProgress((int)((itemsProcessed++ / max) * 100)); } //col.Count catch { } Console.Write("\rProcessing " + itemsProcessed + " " + item.Url + " "); } try { if (item.ContentTypeId.ToString().StartsWith(StaffContentTypeid, StringComparison.OrdinalIgnoreCase)) { LoggingService.WriteTrace(EventSeverity.Information, "Passed content type check.", LogCategory.ChalmersPublicWeb); var staffUserId = item.Fields[field.Id] as SPFieldUser; if (staffUserId != null && item[Constants.ChalmersID] != null) { updateFromAD(indexedTaxonomy, termSet, ldapServerUrl, principalCID, item, staffUserId); } } } catch (Exception exception) { string message = string.Format("User Update Failed: {0} Details: {1}", item.Title, exception); Console.WriteLine(Environment.NewLine + message); } } } }