async public Task <IHttpActionResult> RemoveMentor([FromUri] SPHostedParameters parameters, [FromBody] UserMentorSubmissionModel model) { var userid = 0; try { var spContext = SharePointApiControllerAcsContextProvider.Current.GetSharePointContext(ControllerContext); //var searchName = parameters.searchName; using (var clientContext = spContext.CreateUserClientContextForSPAppWeb()) { if (clientContext != null) { var spuser = clientContext.Web.CurrentUser; clientContext.Load(spuser, l => l.Title, l => l.Id, l => l.LoginName, l => l.Email); clientContext.ExecuteQuery(); userid = spuser.Id; var userInList = GetUserById(clientContext, userid); var mentorInList = GetUserById(clientContext, model.mentorId); var mentorUser = clientContext.Web.GetUserById(mentorInList.IdentityLoginId); clientContext.Load(mentorUser, l => l.Title, l => l.Id, l => l.LoginName, l => l.Email); clientContext.ExecuteQuery(); using (var pfeContext = new PfeContext()) { var currentProfile = await pfeContext.UserEntities.FirstOrDefaultAsync(w => w.IdentityObjectId == userid); var mentorProfile = await pfeContext.UserEntities.FirstOrDefaultAsync(f => f.IdentityObjectId == model.mentorId); var currentRelationship = await pfeContext.RelationshipEntities .FirstOrDefaultAsync(w => w.MenteeId == currentProfile.Id && w.MentorId == mentorProfile.Id); if (currentRelationship != null) { pfeContext.RelationshipEntities.Remove(currentRelationship); } var totalRows = pfeContext.SaveChanges(); LogProvider.LogInformation("Saving profile and removing relationships for {0} with total commit rows:{1}", userid, totalRows); } } } } catch (Exception ex) { LogProvider.LogError(ex, "Failed to save relatonships {0}", model.mentorId); return(BadRequest(string.Format("Failed to remove relationship for {0}", model.mentorId))); } return(Ok("successfully removed relationships, if they existed")); }
async public Task <IHttpActionResult> GetRelationships([FromUri] SPHostedParameters parameters) { var users = new List <UserWithSkillsModel>(); var userid = 0; var spContext = SharePointApiControllerAcsContextProvider.Current.GetSharePointContext(ControllerContext); //var searchName = parameters.searchName; using (var clientContext = spContext.CreateUserClientContextForSPAppWeb()) { if (clientContext != null) { var spuser = clientContext.Web.CurrentUser; clientContext.Load(spuser, l => l.Title, l => l.Id); clientContext.ExecuteQuery(); userid = spuser.Id; using (var pfeContext = new PfeContext()) { var relationships = await pfeContext.RelationshipEntities.Include(i => i.MentorLookup) .Where(w => w.MenteeLookup.IdentityObjectId == userid).ToListAsync(); foreach (var requestItem in relationships) { var mentorLkup = requestItem.MentorLookup; users.Add(new UserWithSkillsModel() { UserId = mentorLkup.Id, IdentityObjectId = mentorLkup.IdentityObjectId, SuggestedOutcome = requestItem.SuggestedOutcome, DisplayName = mentorLkup.DisplayName, EstablishedDate = requestItem.Established }); } LogProvider.LogInformation("User has {0} relationships", relationships.Count()); } } } return(Ok(users)); }
async public Task <IHttpActionResult> SearchMentors([FromUri] SPHostedParameters parameters, string searchName) { var users = new List <UserWithSkillsModel>(); var userId = 0; try { var spContext = SharePointApiControllerAcsContextProvider.Current.GetSharePointContext(ControllerContext); //var searchName = parameters.searchName; using (var clientContext = spContext.CreateUserClientContextForSPAppWeb()) { if (clientContext != null) { var spuser = clientContext.Web.CurrentUser; clientContext.Load(spuser, l => l.Title, l => l.Id); clientContext.ExecuteQuery(); userId = spuser.Id; var splist = clientContext.Web.Lists.GetByTitle("yMentors"); clientContext.Load(splist, l => l.Title, l => l.RootFolder); clientContext.ExecuteQuery(); var xmlQuery = @" <Where> <And> <Neq><FieldRef Name='MentorName' LookupId='TRUE' /><Value Type='User'>{1}</Value></Neq> <Or> <Or> <Contains><FieldRef Name='MentorName' /><Value Type='User'>{0}</Value></Contains> <Contains><FieldRef Name='MentorLkupCareer' /><Value Type='Lookup'>{0}</Value></Contains> </Or> <Contains><FieldRef Name='MentorSkillsTechnical' /><Value Type='Text'>{0}</Value></Contains> </Or> </And> </Where>"; ListItemCollectionPosition ListItemCollectionPosition = null; var camlQuery = CamlQuery.CreateAllItemsQuery(); camlQuery.ViewXml = "<View><Query>"; camlQuery.ViewXml += string.Format(xmlQuery, searchName, userId); camlQuery.ViewXml += "<ViewFields><FieldRef Name='MentorName'/><FieldRef Name='MentorBio'/><FieldRef Name='MentorLkupCareer'/></ViewFields>"; camlQuery.ViewXml += "<RowLimit>50</RowLimit>"; camlQuery.ViewXml += "</Query></View>"; camlQuery.ListItemCollectionPosition = ListItemCollectionPosition; var splistitems = splist.GetItems(camlQuery); clientContext.Load(splistitems); clientContext.ExecuteQuery(); foreach (var requestItem in splistitems) { var displayName = RetrieveListItemUserValue(requestItem, "MentorName"); var bio = RetrieveListItemValue(requestItem, "MentorBio"); var career = RetrieveListItemLookupValue(requestItem, "MentorLkupCareer"); users.Add(new UserWithSkillsModel() { UserId = requestItem.Id, IdentityObjectId = displayName.LookupId, DisplayName = displayName.LookupValue, UserBio = bio, CareerOptions = career.LookupValue }); } } } using (var pfeContext = new PfeContext()) { var profiles = await pfeContext.UserEntities.Where(w => w.DisplayName.Contains(searchName)).ToListAsync(); var relationships = await pfeContext.RelationshipEntities.Where(w => w.MentorLookup.DisplayName.Contains(searchName)).ToListAsync(); LogProvider.LogInformation("User found {0}", profiles.Count()); LogProvider.LogInformation("User has {0} relaitonships", relationships.Count()); } } catch (Exception ex) { LogProvider.LogError(ex, "failed to query mentor list for {0}", searchName); return(BadRequest(ex.Message)); } return(Ok(users)); }
async public Task <IHttpActionResult> AddMentor([FromUri] SPHostedParameters parameters, [FromBody] UserMentorSubmissionModel model) { var userid = 0; if (!ModelState.IsValid) { return(BadRequest(ModelState)); } try { var spContext = SharePointApiControllerAcsContextProvider.Current.GetSharePointContext(ControllerContext); //var searchName = parameters.searchName; using (var clientContext = spContext.CreateUserClientContextForSPAppWeb()) { if (clientContext != null) { var spuser = clientContext.Web.CurrentUser; clientContext.Load(spuser, l => l.Title, l => l.Id, l => l.LoginName, l => l.Email); clientContext.ExecuteQuery(); userid = spuser.Id; var userInList = GetUserById(clientContext, userid); var mentorInList = GetUserById(clientContext, model.mentorId); var mentorUser = clientContext.Web.GetUserById(mentorInList.IdentityLoginId); clientContext.Load(mentorUser, l => l.Title, l => l.Id, l => l.LoginName, l => l.Email); clientContext.ExecuteQuery(); using (var pfeContext = new PfeContext()) { var currentProfile = await pfeContext.UserEntities.FirstOrDefaultAsync(w => w.IdentityObjectId == userid); if (currentProfile == null) { // new up currentProfile = new Data.Entities.ProfileEntity() { DisplayName = spuser.Title, Email = spuser.Email, IdentityObjectId = spuser.Id, IdentityLogin = spuser.LoginName }; pfeContext.UserEntities.Add(currentProfile); } var mentorProfile = await pfeContext.UserEntities.FirstOrDefaultAsync(f => f.IdentityObjectId == model.mentorId); if (mentorProfile == null) { // new up mentorProfile = new Data.Entities.ProfileEntity() { DisplayName = mentorUser.Title, Email = mentorUser.Email, Id = mentorUser.Id, IdentityLogin = mentorUser.LoginName, IdentityObjectId = mentorUser.Id }; pfeContext.UserEntities.Add(mentorProfile); } var mentorRelationships = new Data.Entities.ProfileRelationshipEntity() { MenteeLookup = currentProfile, MentorLookup = mentorProfile, Established = DateTime.Now, SuggestedOutcome = model.comments ?? "This demo is awesome" }; pfeContext.RelationshipEntities.Add(mentorRelationships); var totalRows = pfeContext.SaveChanges(); LogProvider.LogInformation("Saving profile and relationships for {0} with total commit rows:{1}", userid, totalRows); } } } } catch (Exception ex) { LogProvider.LogError(ex, "Failed to save relatonships {0}", model.mentorId); return(BadRequest(string.Format("Failed to save relationships for mentor {0}", model.mentorId))); } return(Ok("Successfully saved relationships.")); }