public static async Task <List <AdaptiveCard> > GetApprovalsForUserCard(string accessToken, string userId) { // Get all approvals requested by current user var approvals = await DatabaseHelper.GetApprovalsAsync(a => a.Requestor == userId); if (approvals.Count() == 0) { // Return a simple message return(null); } else if (approvals.Count() == 1) { // Return status card of the only approval return(new List <AdaptiveCard>() { GetApprovalStatusCard(approvals.First()) }); } else { var approvalCardList = new List <AdaptiveCard>(); foreach (var approval in approvals) { var approvalDetailCard = new AdaptiveCard(); var approvalColumnSet = new AdaptiveColumnSet(); // Get thumbnail var thumbnailUri = await GraphHelper.GetFileThumbnailDataUri(accessToken, approval.File.Id); var fileThumbCol = new AdaptiveColumn() { Width = AdaptiveColumnWidth.Auto.ToLower() }; fileThumbCol.Items.Add(new AdaptiveImage() { Url = new Uri(thumbnailUri), AltText = "File thumbnail", Size = AdaptiveImageSize.Small }); approvalColumnSet.Columns.Add(fileThumbCol); var fileNameCol = new AdaptiveColumn() { Width = AdaptiveColumnWidth.Stretch.ToLower() }; fileNameCol.Items.Add(new AdaptiveTextBlock() { Size = AdaptiveTextSize.Medium, Text = approval.File.Name }); fileNameCol.Items.Add(new AdaptiveTextBlock() { IsSubtle = true, Spacing = AdaptiveSpacing.None, Text = $"Requested: {TimeZoneHelper.GetAdaptiveDateTimeString(approval.RequestDate)}" }); approvalColumnSet.Columns.Add(fileNameCol); approvalDetailCard.Body.Add(approvalColumnSet); approvalDetailCard.Actions.Add(new AdaptiveSubmitAction() { Title = "This one", DataJson = $@"{{ ""cardAction"": ""{CardActionTypes.SelectApproval}"", ""selectedApproval"": ""{approval.Id}"" }}" }); approvalCardList.Add(approvalDetailCard); } return(approvalCardList); } }
public static async Task <AdaptiveCard> GetFileDetailCard(string accessToken, string fileId) { var client = GetAuthenticatedClient(accessToken); // Get the file with thumbnails var file = await client.Me.Drive.Items[fileId].Request() .Expand("thumbnails") .GetAsync(); // Get people user interacts with regularly var potentialApprovers = await client.Me.People.Request() // Only want organizational users, and do not want to send back to bot .Filter("personType/subclass eq 'OrganizationUser' and displayName ne 'Approval Bot'") .Top(10) .GetAsync(); var fileCard = new AdaptiveCard(); fileCard.Body.Add(new AdaptiveTextBlock() { Text = "Get approval for this file?", Size = AdaptiveTextSize.Large, Weight = AdaptiveTextWeight.Bolder }); fileCard.Body.Add(new AdaptiveTextBlock() { Text = file.Name, Weight = AdaptiveTextWeight.Bolder }); fileCard.Body.Add(new AdaptiveFactSet() { Facts = new List <AdaptiveFact>() { new AdaptiveFact("Size", $"{file.Size / 1024} KB"), new AdaptiveFact("Last modified", TimeZoneHelper.GetAdaptiveDateTimeString(file.LastModifiedDateTime.Value)), new AdaptiveFact("Last modified by", file.LastModifiedBy.User.DisplayName) } }); if (file.Thumbnails != null && file.Thumbnails.Count > 0) { fileCard.Body.Add(new AdaptiveImage() { Size = AdaptiveImageSize.Stretch, AltText = "File thumbnail", Url = new Uri(file.Thumbnails[0].Large.Url) }); } var recipientPromptCard = new AdaptiveCard(); recipientPromptCard.Body.Add(new AdaptiveTextBlock() { Text = "Who should I ask for approval?", Weight = AdaptiveTextWeight.Bolder }); var recipientPicker = new AdaptiveChoiceSetInput() { Id = "approvers", IsMultiSelect = true, Style = AdaptiveChoiceInputStyle.Compact }; foreach (var potentialApprover in potentialApprovers) { recipientPicker.Choices.Add(new AdaptiveChoice() { Title = potentialApprover.DisplayName, Value = potentialApprover.ScoredEmailAddresses.First().Address }); } recipientPromptCard.Body.Add(recipientPicker); recipientPromptCard.Actions.Add(new AdaptiveSubmitAction() { Title = "Send Request", DataJson = $@"{{ ""cardAction"": ""{CardActionTypes.SendApprovalRequest}"", ""selectedFile"": ""{fileId}"" }}" }); fileCard.Actions.Add(new AdaptiveShowCardAction() { Title = "Yes", Card = recipientPromptCard }); fileCard.Actions.Add(new AdaptiveSubmitAction() { Title = "No", DataJson = $@"{{ ""cardAction"": ""{CardActionTypes.WrongFile}"" }}" }); return(fileCard); }