示例#1
0
        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);
            };
        }