using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; using Filtr.Core.FacebookUsers.Data; using Nancy; using Sony.Filtr.Applications; using Sony.Filtr.Core.Facebook; namespace Sony.Filtr.AdminAPI.Modules { public class FacebookModule : BaseModule { public FacebookModule(FacebookUserManager facebookUserManager, ApplicationInstanceManager applicationInstanceManager) : base(applicationInstanceManager) { Get["GetFacebookUsers", "/{countryCode}/facebookUsers"] = parameters => { var culture = (CurrentApplication != null ? CurrentApplication.CultureInfo : null); var users = facebookUserManager.GetFacebookUsers(culture); return Response.AsJson(users); }; Get["GetFacebookUsersExcel", "/{countryCode}/facebookUsers/excel"] = parameters => { var culture = (CurrentApplication != null ? CurrentApplication.CultureInfo : null); var users = facebookUserManager.GetFacebookUsers(culture); var sb = GetFacebookUsersCsv(users); var cultureString = (culture != null) ? culture.ToString() : "all"; var fileName = string.Format("FBUserExport-{0}-{1}.csv", cultureString, DateTime.Now.ToShortDateString()); return Response.AsText(sb.ToString(), "text/csv").WithHeader("Content-disposition", "attachment;filename=\"" + fileName + "\""); }; } private string GetFacebookUsersCsv(List users) { StringBuilder sb = new StringBuilder(); sb.AppendLine("FacebookID;UserName;Name;Email;Gender;Locale;Artists;Education;Athletes;Hometown;Languages;TimeZone;Work"); foreach (var user in users) { var info = user; var lang = GetValuesString(info.Languages); var education = (info.Education != null) ? string.Join(",", info.Education.Select(e => e.School.Name)) : string.Empty; var athlethes = GetValuesString(info.FavoriteAthletes); var work = (info.Work != null) ? string.Join(",", info.Work.Select(w => w.Employer.Name)) : string.Empty; var artists = (info.Artists != null) ? string.Join(",", info.Artists) : string.Empty; var homeTown = (info.HomeTown != null) ? info.HomeTown.Name : string.Empty; var timeZone = info.TimeZone.ToString(CultureInfo.InvariantCulture); //var teams = GetValuesString(info.FavoriteTeams); //var inspirationalPeople = GetValuesString(info.InspirationalPeople); //var quotes = string.Join(",", info.Quotes); //var sports = (info.Sports != null) ? string.Join(",", info.Sports) : string.Empty; var values = new[] { info.ID, info.UserName, info.Name, info.Email, info.Gender, info.Locale, artists, education, athlethes, homeTown, lang, timeZone, work }.ToList(); sb.AppendLine(string.Join(";", values.Select(v => (v != null) ? v.Replace(";", "").Replace('\n', ' ').Replace('\r', ' ') : string.Empty))); } return sb.ToString(); } private string GetValuesString(List list) { if (list != null && list.Any()) return string.Join(",", list.Select(l => l.Name)); return string.Empty; } } }