* YavscModel.csproj:

* NewProjectModel.cs:
* ITContentProvider.csproj: refactoring

* WebApiConfig.cs: Web Api Config

* IModule.cs:
* RssFeeds.cs:
* IRenderer.cs:
* Blog.cs:
* ITagHandler.cs:
* ViewRenderer.cs:
* Comment.cs:
* IViewRenderer.cs:
* People.cs:
* SignIn.cs:
* BlogEntry.cs:
* AuthToken.cs:
* BlogHelper.cs:
* DataAccess.cs:
* Estimate.cs:
* BlogManager.cs:
* Writting.cs:
* AskForADate.cs:
* RestoreQuery.cs:
* Basket.cs:
* BlogProvider.cs:
* CalendarList.cs:
* Commande.cs:
* StatusChange.cs:
* WebFileInfo.cs:
* WorkFlowManager.cs:
* Euro.cs:
* Unit.cs:
* Text.cs:
* Profile.cs:
* Note.cs:
* Link.cs:
* BlogEditEntryModel.cs:
* FindBlogEntryFlags.cs:
* NewProjectModel.cs:
* CalendarListEntry.cs:
* CalendarEntryList.cs:
* IContentProvider.cs:
* CommandStatus.cs:
* Label.cs:
* Price.cs:
* BlogEntryCollection.cs:
* Period.cs:
* Scalar.cs:
* BlogEditCommentModel.cs:
* Option.cs:
* NpgsqlContentProvider.cs:
* Product.cs:
* LoginModel.cs:
* Service.cs:
* Catalog.cs:
* Currency.cs:
* NewEstimateEvenArgs.cs:
* CheckBox.cs:
* SaleForm.cs:
* FileSystemManager.cs:
* FormInput.cs:
* TextInput.cs:
* NewRoleModel.cs:
* FileInfoCollection.cs:
* FilesInput.cs:
* NewAdminModel.cs:
* SelectItem.cs:
* SelectInput.cs:
* RadioButton.cs:
* StockStatus.cs:
* Provider.cs:
* DirNotFoundException.cs:
* FormElement.cs:
* ProductImage.cs:
* WebFileInfoCollection.cs:
* CatalogHelper.cs:
* CatalogManager.cs:
* RegisterViewModel.cs:
* InvalidDirNameException.cs:
* PhysicalProduct.cs:
* CatalogProvider.cs:
* ProductCategory.cs:
* OrderStatusChangedEventArgs.cs:
* ProviderCollection.cs:
* WorkflowConfiguration.cs:
* BlogProviderConfigurationElement.cs:
* BlogProvidersConfigurationSection.cs:
* BlogProvidersConfigurationCollection.cs:
* CatalogProviderConfigurationElement.cs:
* CatalogProvidersConfigurationSection.cs:
* CatalogProvidersConfigurationCollection.cs: 
xml doc

* SalesCatalog.csproj:
* XmlCatalogProvider.cs: Maps the catalog using System.Web

* BasketController.cs:
* FrontOfficeController.cs: a Basket controller

* Global.asax.cs: Session in Web Api

* App.master: WebApi bas url as Javascript var 'apiBaseUrl'

* Index.aspx: !!not sure of this change.

* Web.csproj: compiles now includes WebApiConfig.cs

* style.css: link background color

* FileSystemController.cs: a file system controller
This commit is contained in:
Paul Schneider 2015-02-17 13:57:39 +01:00
commit b505ad90e7
100 changed files with 2520 additions and 212 deletions

View file

@ -7,6 +7,7 @@ using System.Web.Http;
using Yavsc.Model.WorkFlow;
using System.Collections.Specialized;
using Yavsc.Model.FrontOffice;
using System.Web.SessionState;
namespace Yavsc.ApiControllers
{
@ -32,23 +33,40 @@ namespace Yavsc.ApiControllers
wfmgr = new WorkFlowManager ();
}
/// <summary>
/// Gets the current basket, creates a new one, if it doesn't exist.
/// </summary>
/// <value>The current basket.</value>
protected Basket CurrentBasket {
get {
HttpSessionState session = HttpContext.Current.Session;
Basket b = (Basket) session ["Basket"];
if (b == null)
session ["Basket"] = b = new Basket ();
return b;
}
}
/// <summary>
/// Create the specified basket item using specified command parameters.
/// </summary>
/// <param name="cmdParams">Command parameters.</param>
[AcceptVerbs("CREATE")]
[Authorize]
public long Create(NameValueCollection cmdParams)
{
throw new NotImplementedException ();
// HttpContext.Current.Request.Files
Commande cmd = new Commande(cmdParams, HttpContext.Current.Request.Files);
CurrentBasket.Add (cmd);
return cmd.Id;
}
/// <summary>
/// Read the specified basket item.
/// </summary>
/// <param name="itemid">Itemid.</param>
[AcceptVerbs("READ")]
[Authorize]
Commande Read(long itemid){
throw new NotImplementedException ();
return CurrentBasket[itemid];
}
/// <summary>
@ -57,29 +75,21 @@ namespace Yavsc.ApiControllers
/// <param name="itemid">Item identifier.</param>
/// <param name="param">Parameter name.</param>
/// <param name="value">Value.</param>
[AcceptVerbs("UPDATE")]
public void Update(long itemid, string param, string value)
[Authorize]
public void UpdateParam(long itemid, string param, string value)
{
throw new NotImplementedException ();
CurrentBasket [itemid].Parameters [param] = value;
}
/// <summary>
/// Delete the specified item.
/// </summary>
/// <param name="itemid">Item identifier.</param>
[Authorize]
public void Delete(long itemid)
{
throw new NotImplementedException ();
CurrentBasket.Remove (itemid);
}
/// <summary>
/// Post a file, as attached document to the specified
/// Item
/// </summary>
[AcceptVerbs("POST")]
public void Post(long itemId)
{
throw new NotImplementedException ();
}
}
}

View file

@ -6,6 +6,7 @@ using System.Web.Mvc;
using System.IO;
using System.Web.Security;
using System.Text.RegularExpressions;
using Yavsc.Model.FileSystem;
namespace Yavsc.Controllers
{
@ -14,34 +15,37 @@ namespace Yavsc.Controllers
/// </summary>
public class FileSystemController : Controller
{
private static string usersDir = "~/users";
private string usersDir = "~/users";
/// <summary>
/// Gets the users dir.
/// Gets the users base directory.
/// </summary>
/// <value>The users dir.</value>
public static string UsersDir {
public string UsersDir {
get {
return usersDir;
}
}
FileSystemManager mgr = null ;
/// <summary>
/// Initialize the specified requestContext.
/// </summary>
/// <param name="requestContext">Request context.</param>
protected override void Initialize (System.Web.Routing.RequestContext requestContext)
{
base.Initialize (requestContext);
mgr = new FileSystemManager (UsersDir);
}
/// <summary>
/// Index this instance.
/// </summary>
[Authorize]
public ActionResult Index ()
public ActionResult Index (string id)
{
string user = Membership.GetUser ().UserName;
ViewData ["UserName"] = user;
DirectoryInfo di = new DirectoryInfo (
Path.Combine (
Server.MapPath (UsersDir),
user));
if (!di.Exists)
di.Create ();
return View (new FileInfoCollection (di.GetFiles ()));
return View (mgr.GetFiles (Membership.GetUser().UserName+"/"+id));
}
/// <summary>
@ -59,7 +63,7 @@ namespace Yavsc.Controllers
return RedirectToAction ("Index");
}
}
string fpath = Path.Combine (BaseDir, id);
string fpath = Path.Combine (UserBaseDir, id);
ViewData ["Content"] = Url.Content (fpath);
FileInfo fi = new FileInfo (fpath);
@ -67,54 +71,23 @@ namespace Yavsc.Controllers
}
/// <summary>
/// Create this instance.
/// Create the specified id.
/// </summary>
public ActionResult Create ()
{
return View ();
}
/// <summary>
/// Create the specified collection.
/// </summary>
/// <param name="collection">Collection.</param>
/// <param name="id">Identifier.</param>
[HttpPost]
[Authorize]
public ActionResult Create (FormCollection collection)
public ActionResult Create (string id)
{
try {
string fnre = "[A-Za-z0-9~\\-.]+";
HttpFileCollectionBase hfc = Request.Files;
for (int i = 0; i < hfc.Count; i++) {
if (!Regex.Match (hfc [i].FileName, fnre).Success) {
ViewData ["Message"] += string.Format ("<p>File name '{0}' refused</p>", hfc [i].FileName);
ModelState.AddModelError (
"AFile",
string.Format (
"The file name {0} dosn't match an acceptable file name {1}",
hfc [i].FileName, fnre));
return View ();
}
}
for (int i = 0; i < hfc.Count; i++) {
// TODO Limit with hfc[h].ContentLength
string filename = Path.Combine (Server.MapPath (BaseDir), hfc [i].FileName);
hfc [i].SaveAs (filename);
ViewData ["Message"] += string.Format ("<p>File name '{0}' saved</p>", hfc [i].FileName);
}
return RedirectToAction ("Index", "FileSystem");
} catch (Exception e) {
ViewData ["Message"] = "Exception:" + e.Message;
return View ();
}
string path=Membership.GetUser().UserName+"/"+id;
mgr.Put ( path, Request.Files);
return View ("Index",mgr.GetFiles(path));
}
/// <summary>
/// Gets the base dir.
/// Gets the user's base dir.
/// </summary>
/// <value>The base dir.</value>
public static string BaseDir { get { return Path.Combine (UsersDir, Membership.GetUser ().UserName); } }
public string UserBaseDir { get { return Path.Combine (UsersDir, Membership.GetUser ().UserName); } }
/// <summary>
/// Edit the specified id.
@ -122,7 +95,7 @@ namespace Yavsc.Controllers
/// <param name="id">Identifier.</param>
public ActionResult Edit (int id)
{
return View ();
throw new NotImplementedException ();
}
/// <summary>
@ -133,11 +106,7 @@ namespace Yavsc.Controllers
[HttpPost]
public ActionResult Edit (int id, FormCollection collection)
{
try {
return RedirectToAction ("Index");
} catch {
return View ();
}
throw new NotImplementedException ();
}
/// <summary>
@ -146,7 +115,7 @@ namespace Yavsc.Controllers
/// <param name="id">Identifier.</param>
public ActionResult Delete (int id)
{
return View ();
throw new NotImplementedException ();
}
/// <summary>
@ -157,11 +126,7 @@ namespace Yavsc.Controllers
[HttpPost]
public ActionResult Delete (int id, FormCollection collection)
{
try {
return RedirectToAction ("Index");
} catch {
return View ();
}
throw new NotImplementedException ();
}
}
}

View file

@ -12,6 +12,7 @@ using WorkFlowProvider;
using System.Web.Security;
using System.Threading;
using Yavsc.Model.FrontOffice;
using Yavsc.Model.FileSystem;
namespace Yavsc.Controllers
{
@ -218,12 +219,14 @@ namespace Yavsc.Controllers
return View (collection);
}
}
string usersdir = Server.MapPath("~/users");
FileSystemManager fsmgr = new FileSystemManager(usersdir);
foreach (String h in hfc.AllKeys) {
// TODO Limit with hfc[h].ContentLength
hfc [h].SaveAs (Path.Combine (FileSystemController.BaseDir, hfc [h].FileName));
hfc [h].SaveAs (Path.Combine (usersdir, hfc [h].FileName));
}
// Add specified product command to the basket,
GetBasket().Add (Commande.Create (collection));
GetBasket().Add (new Commande(collection,HttpContext.Request.Files));
ViewData ["Message"] = LocalizedText.Item_added_to_basket;
return View (collection);
} catch (Exception e) {

View file

@ -9,9 +9,11 @@ using System.Web.Routing;
using Yavsc.Formatters;
using Yavsc.Model.FrontOffice;
using System.Web.Http;
using System.Web.SessionState;
namespace Yavsc
{
/// <summary>
/// Mvc application.
/// </summary>
@ -28,6 +30,9 @@ namespace Yavsc
routes.IgnoreRoute ("Scripts/{*pathInfo}");
routes.IgnoreRoute ("Theme/{*pathInfo}");
routes.IgnoreRoute ("images/{*pathInfo}");
routes.IgnoreRoute ("users/{*pathInfo}");
routes.IgnoreRoute ("files/{*pathInfo}");
routes.IgnoreRoute ("avatars/{*pathInfo}");
routes.IgnoreRoute ("xmldoc/{*pathInfo}"); // xml doc
routes.IgnoreRoute ("htmldoc/{*pathInfo}"); // html doc
routes.IgnoreRoute ("favicon.ico");
@ -56,13 +61,25 @@ namespace Yavsc
protected void Application_Start ()
{
AreaRegistration.RegisterAllAreas ();
GlobalConfiguration.Configuration.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{*id}",
defaults: new { controller = "WorkFlow", action="Index", id=0 }
);
WebApiConfig.Register (GlobalConfiguration.Configuration);
RegisterRoutes (RouteTable.Routes);
}
/// <summary>
/// Applications the post authorize request.
/// </summary>
protected void Application_PostAuthorizeRequest()
{
if (IsWebApiRequest())
{
HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required);
}
}
private bool IsWebApiRequest()
{
return HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath.StartsWith(WebApiConfig.UrlPrefixRelative);
}
}
}

View file

@ -73,6 +73,9 @@
<%= link %>
<% } %>
</footer>
<script type="text/javascript">
var apiBaseUrl = '@Url.Content(ProjectNameSpace.WebApiConfig.UrlPrefixRelative)';
</script>
</body>
</html>

View file

@ -57,7 +57,7 @@ footer img { max-height: 2em; }
a {
text-decoration: none;
color: #B0B080;
background-color:rgba(0,30,0,0.5);
background-color:rgba(20,0,20,0.5);
}
a:hover {

View file

@ -1,6 +1,6 @@
<%@ Page Language="C#" MasterPageFile="~/Models/App.master" Inherits="System.Web.Mvc.ViewPage<Yavsc.FileInfoCollection>" %>
<asp:Content ID="MainContentContent" ContentPlaceHolderID="MainContent" runat="server">
<h1> Index of <%=ViewData["UserName"] %>'s files (<%= Html.Encode(Model.Count) %>) </h1>
<h1> Index of <%= Model.Owner %>'s files (<%= Html.Encode(Model.Count) %>) </h1>
<ul>
<% foreach (System.IO.FileInfo fi in Model) { %>
<li> <%= Html.ActionLink(fi.Name,"Details",new {id = fi.Name}) %> </li>

View file

@ -191,6 +191,7 @@
<Compile Include="Formatters\RssFeedsFormatter.cs" />
<Compile Include="Controllers\PaypalApiController.cs" />
<Compile Include="Formatters\TexToPdfFormatter.cs" />
<Compile Include="WebApiConfig.cs" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Web.config" />

66
web/WebApiConfig.cs Normal file
View file

@ -0,0 +1,66 @@
//
// WebApiConfig.cs
//
// Author:
// Paul Schneider <paulschneider@free.fr>
//
// Copyright (c) 2015 Paul Schneider
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using Yavsc.Formatters;
using Yavsc.Model.FrontOffice;
using System.Web.Http;
namespace Yavsc
{
/// <summary>
/// Web API config.
/// </summary>
public static class WebApiConfig
{
/// <summary>
/// Gets the URL prefix.
/// </summary>
/// <value>The URL prefix.</value>
public static string UrlPrefix { get { return "api"; } }
/// <summary>
/// Gets the URL prefix relative.
/// </summary>
/// <value>The URL prefix relative.</value>
public static string UrlPrefixRelative { get { return "~/api"; } }
/// <summary>
/// Register the specified config.
/// </summary>
/// <param name="config">Config.</param>
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: WebApiConfig.UrlPrefix + "/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}