public ExportEdit() { this.RequiresAuthentication(); Get["/export"] = parameters => { if (HasAnyFeedAccess(PartAccess.Demography, AccessRight.Read)) { return(View["View/export.sshtml", new ExportViewModel(Translator, CurrentSession)]); } return(AccessDenied()); }; Get["/export/list"] = parameters => { if (HasAnyFeedAccess(PartAccess.Demography, AccessRight.Read)) { return(View["View/exportlist.sshtml", new ExportListViewModel(Translator, Database)]); } return(null); }; Get["/export/edit/{id}"] = parameters => { string idString = parameters.id; var export = Database.Query <Export>(idString); if (export != null) { if (IsPermittedExport(export)) { return(View["View/exportedit.sshtml", new ExportEditViewModel(Translator, Database, CurrentSession, export)]); } } return(null); }; Post["/export/edit/{id}"] = parameters => { string idString = parameters.id; var model = JsonConvert.DeserializeObject <ExportEditViewModel>(ReadBody()); var export = Database.Query <Export>(idString); var status = CreateStatus(); if (status.ObjectNotNull(export)) { status.AssignStringRequired("Name", export.Name, model.Name); status.AssignObjectIdString("SelectFeed", export.SelectFeed, model.SelectFeed); status.AssignObjectIdString("SelectTag", export.SelectTag, model.SelectTag); status.AssignEnumIntString("SelectLanguage", export.SelectLanguage, model.SelectLanguage); status.AssignStringList("ExportColumns", export.ExportColumns, model.ExportColumns); if (status.IsSuccess) { if (IsPermittedExport(export)) { Database.Save(export); Notice("{0} changed export {1}", CurrentSession.User.UserName.Value, export); } else { status.SetErrorAccessDenied(); } } } return(status.CreateJsonData()); }; Get["/export/add"] = parameters => { if (HasAnyFeedAccess(PartAccess.Demography, AccessRight.Read)) { return(View["View/exportedit.sshtml", new ExportEditViewModel(Translator, Database, CurrentSession)]); } return(null); }; Post["/export/add/new"] = parameters => { string idString = parameters.id; var body = ReadBody(); var model = JsonConvert.DeserializeObject <ExportEditViewModel>(body); var export = new Export(Guid.NewGuid()); var status = CreateStatus(); status.AssignStringRequired("Name", export.Name, model.Name); status.AssignObjectIdString("SelectFeed", export.SelectFeed, model.SelectFeed); status.AssignObjectIdString("SelectTag", export.SelectTag, model.SelectTag); status.AssignEnumIntString("SelectLanguage", export.SelectLanguage, model.SelectLanguage); status.AssignStringList("ExportColumns", export.ExportColumns, model.ExportColumns); if (status.IsSuccess) { if (IsPermittedExport(export)) { Database.Save(export); Notice("{0} added export {1}", CurrentSession.User.UserName.Value, export); } else { status.SetErrorAccessDenied(); } } return(status.CreateJsonData()); }; Get["/export/delete/{id}"] = parameters => { string idString = parameters.id; var export = Database.Query <Export>(idString); var status = CreateStatus(); if (status.ObjectNotNull(export)) { if (IsPermittedExport(export)) { using (var transaction = Database.BeginTransaction()) { export.Delete(Database); transaction.Commit(); Notice("{0} deleted export {1}", CurrentSession.User.UserName.Value, export); } } else { status.SetErrorAccessDenied(); } } return(status.CreateJsonData()); }; Get["/export/download/{id}"] = parameters => { string idString = parameters.id; var export = Database.Query <Export>(idString); if (export != null) { if (IsPermittedExport(export)) { var manager = new ExportColumnManager(Translator); var stream = new MemoryStream(); var textWriter = new StreamWriter(stream); textWriter.WriteLine(manager.ConstructHeader(export.ExportColumns.Value)); foreach (var contact in Query(export)) { textWriter.WriteLine(manager.ConstructRow(contact, export.ExportColumns.Value)); } textWriter.Flush(); stream.Position = 0; var response = new StreamResponse(() => stream, "test/csv"); Notice("{0} exported data", CurrentSession.User.UserName.Value); return(response.AsAttachment("export.csv")); } } return(null); }; }