diff --git a/WorkFlowProvider/NpgsqlContentProvider.cs b/WorkFlowProvider/NpgsqlContentProvider.cs index 791ae821..1f457ab4 100644 --- a/WorkFlowProvider/NpgsqlContentProvider.cs +++ b/WorkFlowProvider/NpgsqlContentProvider.cs @@ -138,22 +138,21 @@ namespace WorkFlowProvider using (NpgsqlConnection cnx = CreateConnection ()) { using (NpgsqlCommand cmd = cnx.CreateCommand ()) { cmd.CommandText = - "select _id,title,username from estimate where _id = @estid"; + "select title,username from estimate where _id = @estid"; cmd.Parameters.Add ("@estid", estimid); cnx.Open (); Estimate est = null; using (NpgsqlDataReader rdr = cmd.ExecuteReader ()) { if (!rdr.Read ()) { - throw new Exception ( - string.Format("Estimate not found : {0}", estimid)); + return null; } est = new Estimate (); est.Title = rdr.GetString( rdr.GetOrdinal("title")); est.Owner = rdr.GetString( rdr.GetOrdinal("username")); - + est.Id = estimid; using (NpgsqlCommand cmdw = new NpgsqlCommand ("select _id, productid, ucost, count, description from writtings where _id = @estid", cnx)) { cmdw.Parameters.Add("@estid", estimid); using (NpgsqlDataReader rdrw = cmdw.ExecuteReader ()) { diff --git a/web/Admin/DataManager.cs b/web/Admin/DataManager.cs index c3650d21..a6700980 100644 --- a/web/Admin/DataManager.cs +++ b/web/Admin/DataManager.cs @@ -18,11 +18,16 @@ namespace Yavsc.Admin { Environment.SetEnvironmentVariable("PGPASSWORD", da.Password); Export e = new Export (); - string fileName = da.BackupPrefix + "-" + DateTime.Now.ToString ("yyyyMMdd"); + string fileName = da.BackupPrefix + "-" + DateTime.Now.ToString ("yyyyMMddhhmmss")+".tar"; FileInfo ofi = new FileInfo (fileName); e.FileName = ofi.FullName; + /* Exec ("pg_dump", string.Format ( - "-wb -Z3 -f {0} -Fd -h {1} -U {2} -p {3} {4}", + "-wb -Z3 -f {0} -Ft -h {1} -U {2} -p {3} {4}", + fileName, da.Host, da.Dbuser, da.Port, da.Dbname ),e); + */ + Exec ("pg_dump", string.Format ( + "-f {0} -Ft -h {1} -U {2} -p {3} {4}", fileName, da.Host, da.Dbuser, da.Port, da.Dbname ),e); return e; } @@ -50,9 +55,14 @@ namespace Yavsc.Admin { Environment.SetEnvironmentVariable("PGPASSWORD", da.Password); var t = new TaskOutput (); + Exec ("pg_restore", (dataOnly?"-a ":"")+string.Format ( + "-1 -Ft -O -h {0} -U {1} -p {2} -d {3} {4}", + da.Host, da.Dbuser, da.Port, da.Dbname, fileName ),t); + /* Exec ("pg_restore", (dataOnly?"-a ":"")+string.Format ( "-1 -w -Fd -O -h {0} -U {1} -p {2} -d {3} {4}", da.Host, da.Dbuser, da.Port, da.Dbname, fileName ),t); + */ return t; } public TaskOutput CreateDb () diff --git a/web/Controllers/AdminController.cs b/web/Controllers/AdminController.cs index c08080e5..6833a59d 100644 --- a/web/Controllers/AdminController.cs +++ b/web/Controllers/AdminController.cs @@ -8,6 +8,7 @@ using System.Web.Security; using Yavsc.Model.RolesAndMembers; using Yavsc.Model.Admin; using Yavsc.Admin; +using System.IO; namespace Yavsc.Controllers @@ -27,6 +28,7 @@ namespace Yavsc.Controllers [Authorize(Roles="Admin")] public ActionResult Backups(DataAccess model) { + return View (model); } @@ -37,6 +39,7 @@ namespace Yavsc.Controllers if (ModelState.IsValid) { if (string.IsNullOrEmpty (datac.Password)) ModelState.AddModelError ("Password", "Invalid passord"); + datac.BackupPrefix = Server.MapPath (datac.BackupPrefix); DataManager ex = new DataManager (datac); Export e = ex.CreateBackup (); if (e.ExitCode > 0) @@ -65,14 +68,30 @@ namespace Yavsc.Controllers { ViewData ["BackupName"] = backupName; if (ModelState.IsValid) { + // TODO BETTER + datac.BackupPrefix = Server.MapPath (datac.BackupPrefix); DataManager mgr = new DataManager (datac); ViewData ["BackupName"] = backupName; ViewData ["DataOnly"] = dataOnly; - TaskOutput t = mgr.Restore (backupName,dataOnly); + + TaskOutput t = mgr.Restore ( + Path.Combine(new FileInfo(datac.BackupPrefix).DirectoryName, + backupName),dataOnly); return View ("Restored", t); } + BuildBackupList (datac); return View (datac); } + private void BuildBackupList(DataAccess datac) + { + // build ViewData ["Backups"]; + string bckd=Server.MapPath (datac.BackupPrefix); + DirectoryInfo di = new DirectoryInfo (new FileInfo(bckd).DirectoryName); + List bks = new List (); + foreach (FileInfo ti in di.GetFiles("*.tar")) + bks.Add (ti.Name); + ViewData ["Backups"] = bks.ToArray (); + } [Authorize(Roles="Admin")] public ActionResult RemoveFromRole(string username, string rolename, string returnUrl) diff --git a/web/Controllers/FrontOfficeController.cs b/web/Controllers/FrontOfficeController.cs index 18f80182..f88eaf3c 100644 --- a/web/Controllers/FrontOfficeController.cs +++ b/web/Controllers/FrontOfficeController.cs @@ -20,19 +20,37 @@ namespace Yavsc.Controllers /// public class FrontOfficeController : Controller { - [HttpGet] - [HttpPost] - public ActionResult Estimate(Estimate e) + [Authorize] + public ActionResult Estimate(Estimate model,string submit) { if (ModelState.IsValid) { - if (e.Id > 0) { - Estimate f = WorkFlowManager.GetEstimate (e.Id); - if (e.Owner != f.Owner) + string username = HttpContext.User.Identity.Name; + if (model.Id > 0) { + Estimate f = WorkFlowManager.GetEstimate (model.Id); + if (f == null) { + ModelState.AddModelError ("Id", "Wrong Id"); + return View (model); + } + + if (username != f.Owner) if (!Roles.IsUserInRole ("FrontOffice")) - throw new UnauthorizedAccessException ("You're not allowed to modify this estimate"); + throw new UnauthorizedAccessException ("You're not allowed to view/modify this estimate"); + if (submit == "Update") { + if (model != f) { + WorkFlowManager.SetTitle (model.Id, model.Title); + } + } else if (submit == null) { + model = f; + } + + } else if (model.Id == 0 && submit=="Create") { + // Create the estimate + model.Id=WorkFlowManager.CreateEstimate (username, + model.Title); + model.Owner = username; } } - return View (e); + return View(model); } [AcceptVerbs("GET")] diff --git a/web/Controllers/WorkFlowController.cs b/web/Controllers/WorkFlowController.cs index 80d85b03..ed9f4d4e 100644 --- a/web/Controllers/WorkFlowController.cs +++ b/web/Controllers/WorkFlowController.cs @@ -52,6 +52,7 @@ namespace Yavsc.ApiControllers { WorkFlowManager.DropEstimate (estid); } + [HttpGet] [Authorize] public object Index() @@ -60,48 +61,12 @@ namespace Yavsc.ApiControllers string username = Membership.GetUser ().UserName; return new { test=string.Format("Hello {0}!",username) }; } - - [HttpGet] [Authorize] public long Write (long estid, string desc, decimal ucost, int count, long productid=0) { // TODO ensure estid owner matches the current one - return WorkFlowManager.Write(estid, desc, ucost, count, productid); } - - - /* - public object Details(int id) - { - throw new NotImplementedException (); - } - - public object Create() - { - throw new NotImplementedException (); - } - - public object Edit(int id) - { - throw new NotImplementedException (); - } - - public object Delete(int id) - { - throw new NotImplementedException (); - } - - IContentProvider contentProvider = null; - IContentProvider ContentProvider { - get { - if (contentProvider == null ) - contentProvider = WFManager.GetContentProviderFWC (); - return contentProvider; - } - } - -*/ } } diff --git a/web/Helpers/BBCodeHelper.cs b/web/Helpers/BBCodeHelper.cs index 18860988..421ed6b5 100644 --- a/web/Helpers/BBCodeHelper.cs +++ b/web/Helpers/BBCodeHelper.cs @@ -305,7 +305,7 @@ namespace Yavsc.Helpers new BBTag ("h", "

", "

"), bblist, new BBTag ("*", "
  • ", "
  • ", true, false), - new BBTag ("url", "", "", true, false, new BBAttribute ("href", ""), new BBAttribute ("href", "href")), + new BBTag ("url", "", "", true, true, new BBAttribute ("href", ""), new BBAttribute ("href", "href")), new BBTag ("br", "
    ", "", true, false), new BBTag ("video", "