diff --git a/NpgsqlBlogProvider/ChangeLog b/NpgsqlBlogProvider/ChangeLog new file mode 100644 index 00000000..ecc22d5b --- /dev/null +++ b/NpgsqlBlogProvider/ChangeLog @@ -0,0 +1,4 @@ +2015-10-10 Paul Schneider + + * NpgsqlBlogProvider.cs: + diff --git a/NpgsqlBlogProvider/NpgsqlBlogProvider.cs b/NpgsqlBlogProvider/NpgsqlBlogProvider.cs index d72cd624..7b8bba2e 100644 --- a/NpgsqlBlogProvider/NpgsqlBlogProvider.cs +++ b/NpgsqlBlogProvider/NpgsqlBlogProvider.cs @@ -28,9 +28,9 @@ namespace Npgsql.Web.Blog { using (NpgsqlConnection cnx = new NpgsqlConnection (connectionString)) using (NpgsqlCommand cmd = cnx.CreateCommand ()) { - cmd.CommandText = "insert into bltag (blid,tag) values (@postid,@tag) returning _id"; - cmd.Parameters.AddWithValue("@tag",tag); - cmd.Parameters.AddWithValue("@postid",postid); + cmd.CommandText = "insert into bltag (blid,tag) values (:postid,:tag) returning _id"; + cmd.Parameters.AddWithValue("tag",tag); + cmd.Parameters.AddWithValue("postid",postid); cnx.Open (); return (long) cmd.ExecuteScalar (); } @@ -43,8 +43,8 @@ namespace Npgsql.Web.Blog { using (NpgsqlConnection cnx = new NpgsqlConnection (connectionString)) using (NpgsqlCommand cmd = cnx.CreateCommand ()) { - cmd.CommandText = "delete from bltag where _id = @tagid"; - cmd.Parameters.AddWithValue("@tagid",tagid); + cmd.CommandText = "delete from bltag where _id = :tagid"; + cmd.Parameters.AddWithValue("tagid",tagid); cnx.Open (); cmd.ExecuteNonQuery (); } @@ -63,11 +63,11 @@ namespace Npgsql.Web.Blog using (NpgsqlCommand cmd = cnx.CreateCommand()) { cmd.CommandText = "select _id, username, bcontent, modified, posted, visible from comment " + - "where applicationname = @appname and postid = @id" + + "where applicationname = :appname and postid = :id" + ((getHidden) ? " and visible = true ":" ") + "order by posted asc" ; - cmd.Parameters.AddWithValue ("@appname", applicationName); - cmd.Parameters.AddWithValue ("@id", postid); + cmd.Parameters.AddWithValue ("appname", applicationName); + cmd.Parameters.AddWithValue ("id", postid); cnx.Open (); using (NpgsqlDataReader rdr = cmd.ExecuteReader()) { while (rdr.Read ()) { @@ -100,16 +100,16 @@ namespace Npgsql.Web.Blog using (NpgsqlCommand cmd = cnx.CreateCommand ()) { DateTime now = DateTime.Now; cmd.CommandText = - "update blog set modified=@now," + - " title = @title," + - " bcontent=@content, " + - " visible = @visible " + - "where _id = @id"; - cmd.Parameters.AddWithValue ("@now", now); - cmd.Parameters.AddWithValue ("@title", title); - cmd.Parameters.AddWithValue ("@content", content); - cmd.Parameters.AddWithValue ("@visible", visible); - cmd.Parameters.AddWithValue ("@id", postid); + "update blog set modified=:now," + + " title = :title," + + " bcontent=:content, " + + " visible = :visible " + + "where _id = :id"; + cmd.Parameters.AddWithValue ("now", now); + cmd.Parameters.AddWithValue ("title", title); + cmd.Parameters.AddWithValue ("content", content); + cmd.Parameters.AddWithValue ("visible", visible); + cmd.Parameters.AddWithValue ("id", postid); cnx.Open (); cmd.ExecuteNonQuery (); } @@ -125,7 +125,7 @@ namespace Npgsql.Web.Blog { using (NpgsqlConnection cnx = new NpgsqlConnection (connectionString)) using (NpgsqlCommand cmd = cnx.CreateCommand ()) { - cmd.CommandText = "delete from blog where _id = @id"; + cmd.CommandText = "delete from blog where _id = :id"; cmd.Parameters.AddWithValue ("id", postid); cnx.Open (); cmd.ExecuteNonQuery(); @@ -149,16 +149,16 @@ namespace Npgsql.Web.Blog using (NpgsqlCommand cmd = cnx.CreateCommand()) { cmd.CommandText = "insert into comment (postid,bcontent," + "modified,posted,visible,username,applicationname)" + - "values (@postid,@bcontent,@modified,@posted," + - "@visible,@username,@appname) returning _id"; - cmd.Parameters.AddWithValue ("@postid", postid); - cmd.Parameters.AddWithValue ("@bcontent", content); + "values (:postid,:bcontent,:modified,:posted," + + ":visible,:username,:appname) returning _id"; + cmd.Parameters.AddWithValue ("postid", postid); + cmd.Parameters.AddWithValue ("bcontent", content); DateTime now = DateTime.Now; - cmd.Parameters.AddWithValue ("@modified", now); - cmd.Parameters.AddWithValue ("@posted", now); - cmd.Parameters.AddWithValue ("@visible", visible); - cmd.Parameters.AddWithValue ("@username", from); - cmd.Parameters.AddWithValue ("@appname", applicationName); + cmd.Parameters.AddWithValue ("modified", now); + cmd.Parameters.AddWithValue ("posted", now); + cmd.Parameters.AddWithValue ("visible", visible); + cmd.Parameters.AddWithValue ("username", from); + cmd.Parameters.AddWithValue ("appname", applicationName); cnx.Open (); return (long) cmd.ExecuteScalar(); } @@ -237,9 +237,9 @@ namespace Npgsql.Web.Blog using (NpgsqlConnection cnx=new NpgsqlConnection(connectionString)) using (NpgsqlCommand cmd = cnx.CreateCommand()) { cmd.CommandText = "select username, title, bcontent, modified, posted, visible, photo from blog " + - "where applicationname = @appname and _id = @id"; - cmd.Parameters.AddWithValue ("@appname", applicationName); - cmd.Parameters.AddWithValue ("@id", postid); + "where applicationname = :appname and _id = :id"; + cmd.Parameters.AddWithValue ("appname", applicationName); + cmd.Parameters.AddWithValue ("id", postid); cnx.Open (); using (NpgsqlDataReader rdr = cmd.ExecuteReader()) { if (rdr.Read ()) { @@ -271,7 +271,7 @@ namespace Npgsql.Web.Blog long postid = 0; using (NpgsqlConnection cnx = new NpgsqlConnection (connectionString)) using (NpgsqlCommand cmd = cnx.CreateCommand ()) { - cmd.CommandText = "delete from comment where _id = @id returning postid"; + cmd.CommandText = "delete from comment where _id = :id returning postid"; cmd.Parameters.AddWithValue ("id", cmtid); cnx.Open (); postid = (long) cmd.ExecuteScalar (); @@ -463,7 +463,7 @@ namespace Npgsql.Web.Blog using (NpgsqlCommand cmd = cnx.CreateCommand()) { if (readersName != null) { cmd.CommandText = "select _id, title,bcontent, modified," + - "posted,username,visible " + + "posted,username,visible,photo " + "from blog b left outer join " + "(select count(*)>0 acc, a.post_id pid " + "from blog_access a," + @@ -475,7 +475,7 @@ namespace Npgsql.Web.Blog cmd.Parameters.AddWithValue ("uname", readersName); } else { cmd.CommandText = "select _id, title,bcontent,modified," + - "posted,username,visible " + + "posted,username,visible,photo " + "from blog b left outer join " + "(select count(*)>0 acc, a.post_id pid " + "from blog_access a" + @@ -485,18 +485,20 @@ namespace Npgsql.Web.Blog " b.Visible IS TRUE and " + " applicationname = :appname"; } - cmd.Parameters.AddWithValue ("@appname", applicationName); - if ((searchflags & FindBlogEntryFlags.MatchContent) > 0) { - cmd.CommandText += " and bcontent like :bcontent"; - cmd.Parameters.AddWithValue (":bcontent", pattern); - } - if ((searchflags & FindBlogEntryFlags.MatchTitle) > 0) { - cmd.CommandText += " and title like :title"; - cmd.Parameters.AddWithValue (":title", pattern); - } - if ((searchflags & FindBlogEntryFlags.MatchUserName) > 0) { - cmd.CommandText += " and username like :username"; - cmd.Parameters.AddWithValue (":username", pattern); + cmd.Parameters.AddWithValue ("appname", applicationName); + if (pattern != null) { + if ((searchflags & FindBlogEntryFlags.MatchContent) > 0) { + cmd.CommandText += " and bcontent like :bcontent"; + cmd.Parameters.AddWithValue ("bcontent", pattern); + } + if ((searchflags & FindBlogEntryFlags.MatchTitle) > 0) { + cmd.CommandText += " and title like :title"; + cmd.Parameters.AddWithValue ("title", pattern); + } + if ((searchflags & FindBlogEntryFlags.MatchUserName) > 0) { + cmd.CommandText += " and username like :username"; + cmd.Parameters.AddWithValue ("username", pattern); + } } if ((searchflags & FindBlogEntryFlags.MatchInvisible) == 0) { cmd.CommandText += " and visible = true"; @@ -518,6 +520,11 @@ namespace Npgsql.Web.Blog be.Posted = rdr.GetDateTime (rdr.GetOrdinal ("posted")); be.Modified = rdr.GetDateTime (rdr.GetOrdinal ("modified")); be.Visible = rdr.GetBoolean (rdr.GetOrdinal ("visible")); + { + int oph = rdr.GetOrdinal ("photo"); + if (!rdr.IsDBNull (oph)) + be.Photo = rdr.GetString (oph); + } c.Add (be); } totalRecords++; @@ -539,10 +546,10 @@ namespace Npgsql.Web.Blog { using (NpgsqlConnection cnx=new NpgsqlConnection(connectionString)) using (NpgsqlCommand cmd = cnx.CreateCommand()) { - cmd.CommandText = "delete from blog where username = @username and applicationname = @appname and title=@title"; - cmd.Parameters.AddWithValue ("@username",username); - cmd.Parameters.AddWithValue ("@appname", applicationName); - cmd.Parameters.AddWithValue ("@title",title); + cmd.CommandText = "delete from blog where username = :username and applicationname = :appname and title=:title"; + cmd.Parameters.AddWithValue ("username",username); + cmd.Parameters.AddWithValue ("appname", applicationName); + cmd.Parameters.AddWithValue ("title",title); cnx.Open (); cmd.ExecuteNonQuery (); cnx.Close(); @@ -563,13 +570,6 @@ namespace Npgsql.Web.Blog BlogEntryCollection c = new BlogEntryCollection (); using (NpgsqlConnection cnx=new NpgsqlConnection(connectionString)) using (NpgsqlCommand cmd = cnx.CreateCommand()) { - - /*cmd.CommandText = "select blog.* from blog, " + - "(select max(posted) lpost, username " + - "from blog where applicationname = @appname " + - "group by username) as lblog " + - "where blog.posted = lblog.lpost and blog.username = lblog.username " ; - */ cmd.CommandText = "select * " + "from blog where applicationname = :appname and visible = true " + " order by posted desc limit :len" ; @@ -591,6 +591,11 @@ namespace Npgsql.Web.Blog be.Posted = rdr.GetDateTime (rdr.GetOrdinal ("posted")); be.Modified = rdr.GetDateTime (rdr.GetOrdinal ("modified")); be.Visible = true; // because of sql code used + { + int oph = rdr.GetOrdinal ("photo"); + if (!rdr.IsDBNull (oph)) + be.Photo = rdr.GetString (oph); + } c.Add (be); } totalRecords++; diff --git a/web/ChangeLog b/web/ChangeLog new file mode 100644 index 00000000..a0b30c97 --- /dev/null +++ b/web/ChangeLog @@ -0,0 +1,17 @@ +2015-10-10 Paul Schneider + + * Web.csproj: + * Global.asax.cs: + * App.master: + * Index.aspx: + * NoLogin.master: + * Title.aspx: + * Index.aspx: + * YavscHelpers.cs: + * Profile.aspx: + * UserPosts.aspx: + * HomeController.cs: + * BlogsController.cs: + * GoogleController.cs: + * AccountController.cs: + diff --git a/web/Controllers/AccountController.cs b/web/Controllers/AccountController.cs index 43804f3b..e7a74cc6 100644 --- a/web/Controllers/AccountController.cs +++ b/web/Controllers/AccountController.cs @@ -24,12 +24,6 @@ namespace Yavsc.Controllers /// public class AccountController : Controller { - - string avatarDir = "~/avatars"; - string defaultAvatar; - string defaultAvatarMimetype; - - /// /// Avatar the specified user. /// @@ -50,17 +44,7 @@ namespace Yavsc.Controllers } } } - /// - /// Gets or sets the avatar dir. - /// This value is past to Server.MapPath, - /// it should start with ~/, and we assume it - /// to be relative to the application path. - /// - /// The avatar dir. - public string AvatarDir { - get { return avatarDir; } - set { avatarDir = value; } - } + /// /// Index this instance. @@ -94,17 +78,7 @@ namespace Yavsc.Controllers ViewData ["returnUrl"] = returnUrl; return View (model); } - /// - /// Initializes a new instance of the class. - /// - private void GetAvatarConfig () - { - string[] defaultAvatarSpec = ConfigurationManager.AppSettings.Get ("DefaultAvatar").Split (';'); - if (defaultAvatarSpec.Length != 2) - throw new ConfigurationErrorsException ("the DefaultAvatar spec should be found as ; "); - defaultAvatar = defaultAvatarSpec [0]; - defaultAvatarMimetype = defaultAvatarSpec [1]; - } + /// /// Login the specified returnUrl. @@ -117,6 +91,10 @@ namespace Yavsc.Controllers return View (); } + /// + /// Registers the form. + /// + /// The form. public ActionResult RegisterForm() { return View ("Register"); @@ -307,13 +285,13 @@ namespace Yavsc.Controllers // if said valid, move as avatar file // else invalidate the model if (AvatarFile.ContentType == "image/png") { - string avdir = Server.MapPath (AvatarDir); + string avdir = Server.MapPath (YavscHelpers.AvatarDir); var di = new DirectoryInfo (avdir); if (!di.Exists) di.Create (); string avpath = Path.Combine (avdir, id + ".png"); AvatarFile.SaveAs (avpath); - model.avatar = Url.Content( AvatarDir + "/" + id + ".png"); + model.avatar = Url.Content( YavscHelpers.AvatarDir + "/" + id + ".png"); } else ModelState.AddModelError ("Avatar", string.Format ("Image type {0} is not supported (suported formats : {1})", diff --git a/web/Controllers/BlogsController.cs b/web/Controllers/BlogsController.cs index 29985fb4..2a1c7514 100644 --- a/web/Controllers/BlogsController.cs +++ b/web/Controllers/BlogsController.cs @@ -29,46 +29,22 @@ namespace Yavsc.Controllers { private string sitename = WebConfigurationManager.AppSettings ["Name"]; - string avatarDir = "~/avatars"; /// - /// Gets or sets the avatar dir. + /// Index the specified title, pageIndex and pageSize. /// - /// The avatar dir. - public string AvatarDir { - get { return avatarDir; } - set { avatarDir = value; } - } - - - - /// - /// Index the specified user, title, pageIndex and pageSize. - /// - /// User. /// Title. /// Page index. /// Page size. - public ActionResult Index (string user = null, string title = null, int pageIndex = 0, int pageSize = 10) + public ActionResult Index (int pageIndex = 0, int pageSize = 10) { - if (string.IsNullOrEmpty (user)) { - return BlogList (pageIndex, pageSize); - } else { - MembershipUser u = null; - if (Membership.FindUsersByName (user) != null) - u = Membership.GetUser (user, false); - if (u == null) { - ModelState.AddModelError ("Author", - string.Format ("Utilisateur inconu : {0}", user)); - return BlogList (); - } else { - if (string.IsNullOrEmpty (title)) - return UserPosts (user, pageIndex, pageSize); - return UserPost (user, title, pageIndex, pageSize); - } - } + return BlogList (pageIndex, pageSize); } - + /// + /// Chooses the media. + /// + /// The media. + /// Identifier. public ActionResult ChooseMedia(long id) { return View (); @@ -87,7 +63,33 @@ namespace Yavsc.Controllers ViewData ["ResultCount"] = totalRecords; ViewData ["PageSize"] = pageSize; ViewData ["PageIndex"] = pageIndex; - return View ("Index", new BlogEntryCollection(bs) ); + var bec = new BlogEntryCollection (bs); + return View ("Index", bec ); + } + + + /// + /// Title the specified title, pageIndex and pageSize. + /// + /// Title. + /// Page index. + /// Page size. + /// + [HttpGet] + public ActionResult Title (string id, int pageIndex = 0, int pageSize = 10) + { + int recordCount; + MembershipUser u = Membership.GetUser (); + string username = u == null ? null : u.UserName; + FindBlogEntryFlags sf = FindBlogEntryFlags.MatchTitle; + BlogEntryCollection c = + BlogManager.FindPost (username, id, sf, pageIndex, pageSize, out recordCount); + var utc = new UTBlogEntryCollection (id); + utc.AddRange (c); + ViewData ["RecordCount"] = recordCount; + ViewData ["PageIndex"] = pageIndex; + ViewData ["PageSize"] = pageSize; + return View (utc); } /// @@ -98,33 +100,37 @@ namespace Yavsc.Controllers /// Page index. /// Page size. [HttpGet] - public ActionResult UserPosts (string user, int pageIndex = 0, int pageSize = 10) + public ActionResult UserPosts (string id, int pageIndex = 0, int pageSize = 10) { - int tr; + int recordcount=0; MembershipUser u = Membership.GetUser (); FindBlogEntryFlags sf = FindBlogEntryFlags.MatchUserName; ViewData ["SiteName"] = sitename; - ViewData ["BlogUser"] = user; + ViewData ["BlogUser"] = id; string readersName = null; ViewData ["PageIndex"] = pageIndex; ViewData ["pageSize"] = pageSize; // displays invisible items when the logged user is also the author if (u != null) { - if (u.UserName == user || Roles.IsUserInRole ("Admin")) + if (u.UserName == id || Roles.IsUserInRole ("Admin")) sf |= FindBlogEntryFlags.MatchInvisible; readersName = u.UserName; } // find entries BlogEntryCollection c = - BlogManager.FindPost (readersName, user, sf, pageIndex, pageSize, out tr); + BlogManager.FindPost (readersName, id, sf, pageIndex, pageSize, out recordcount); // Get author's meta data - Profile bupr = new Profile (ProfileBase.Create (user)); - ViewData ["BlogUserProfile"] = bupr; + var pr = ProfileBase.Create (id); + if (pr != null) { + Profile bupr = new Profile (pr); + ViewData ["BlogUserProfile"] = bupr; + // Inform of listing meta data ViewData ["BlogTitle"] = bupr.BlogTitle; ViewData ["Avatar"] = bupr.avatar; - ViewData ["RecordCount"] = tr; - UUBlogEntryCollection uuc = new UUBlogEntryCollection (user, c); + } + ViewData ["RecordCount"] = recordcount; + UUBlogEntryCollection uuc = new UUBlogEntryCollection (id, c); return View ("UserPosts", uuc); } @@ -180,7 +186,12 @@ namespace Yavsc.Controllers if (pr == null) // the owner's profile must exist // in order to publish its bills - return View ("NotAuthorized"); + // This should'nt occur, as long as + // a profile must exist for each one of + // existing user record in data base + // and each post is deleted with user deletion + // a post => an author => a profile + throw new Exception("Unexpected error retreiving author's profile"); ViewData ["BlogUserProfile"] = pr; ViewData ["Avatar"] = pr.avatar; ViewData ["BlogTitle"] = pr.BlogTitle; @@ -241,7 +252,7 @@ namespace Yavsc.Controllers /// /// Title. [Authorize] - public ActionResult Post ( string title) + public ActionResult Post (string title) { string un = Membership.GetUser ().UserName; if (String.IsNullOrEmpty (title)) @@ -340,26 +351,26 @@ namespace Yavsc.Controllers /// using returnUrl as the URL to return to, /// and confirm as a proof you really know what you do. /// + /// Title. /// User. - /// Title. /// Return URL. /// If set to true confirm. [Authorize] - public ActionResult RemoveTitle (string user, string title, string returnUrl, bool confirm = false) + public ActionResult RemoveTitle (string id, string user, string returnUrl, bool confirm = false) { if (returnUrl == null) if (Request.UrlReferrer != null) returnUrl = Request.UrlReferrer.AbsoluteUri; ViewData ["returnUrl"] = returnUrl; ViewData ["Author"] = user; - ViewData ["Title"] = title; + ViewData ["Title"] = id; if (Membership.GetUser ().UserName != user) if (!Roles.IsUserInRole("Admin")) throw new AuthorizationDenied (user); if (!confirm) return View ("RemoveTitle"); - BlogManager.RemoveTitle (user, title); + BlogManager.RemoveTitle (user, id); if (returnUrl == null) RedirectToAction ("Index", new { user = user }); return Redirect (returnUrl); diff --git a/web/Controllers/GoogleController.cs b/web/Controllers/GoogleController.cs index 440fd72e..b25824a3 100644 --- a/web/Controllers/GoogleController.cs +++ b/web/Controllers/GoogleController.cs @@ -26,6 +26,11 @@ namespace Yavsc.Controllers /// public class GoogleController : Controller { + public ActionResult Index() + { + return View (); + } + private string SetSessionSate () { string state = "security_token"; diff --git a/web/Controllers/HomeController.cs b/web/Controllers/HomeController.cs index 13d14252..df42f267 100644 --- a/web/Controllers/HomeController.cs +++ b/web/Controllers/HomeController.cs @@ -86,6 +86,7 @@ namespace Yavsc.Controllers { return View (); } + public ActionResult Credits () { return View (); diff --git a/web/Global.asax.cs b/web/Global.asax.cs index 41747c1d..05aaf410 100644 --- a/web/Global.asax.cs +++ b/web/Global.asax.cs @@ -47,28 +47,29 @@ namespace Yavsc routes.IgnoreRoute ("favicon.png"); // favorite icon routes.IgnoreRoute ("robots.txt"); // for search engine robots routes.MapRoute ( - "Blogs", - "Blogs/{action}/{user}/{title}", - new { controller = "Blogs", action = "Index", user=UrlParameter.Optional, title = UrlParameter.Optional } - ); - routes.MapRoute ( - "BlogByTitleRO", - "Blog/{user}/{title}", - new { controller = "Blogs", action = "Index", user=UrlParameter.Optional, title = UrlParameter.Optional } - ); + "View", + "v/{title}", + new { controller = "Blogs", action = "Index", + title=UrlParameter.Optional } + ); routes.MapRoute ( - "BlogById", - "B/{action}/{id}", - new { controller = "Blogs", action = "UserPost", id = UrlParameter.Optional } + "Blogs", + "b/{user}/{title}", + new { controller = "Blogs", action = "Index", + user=UrlParameter.Optional, + title=UrlParameter.Optional } ); + /* routes.MapRoute ( + "Artistes", + "a/{artiste}", + new { controller = "Artistes", action = "Index", artiste = UrlParameter.Optional } + ); */ routes.MapRoute ( "Default", "{controller}/{action}/{id}", - new { controller = defaultController, - action = "Index", - user=UrlParameter.Optional, - id = UrlParameter.Optional } + new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); + } /// diff --git a/web/Helpers/YavscHelpers.cs b/web/Helpers/YavscHelpers.cs index 161d1589..5941034c 100644 --- a/web/Helpers/YavscHelpers.cs +++ b/web/Helpers/YavscHelpers.cs @@ -157,7 +157,7 @@ namespace Yavsc.Helpers ProfileBase pr = ProfileBase.Create (username); object avpath = null; if (pr != null) avpath = pr.GetPropertyValue("Avatar"); - if (avpath == null) return "/bfiles/"+username+".png"; + if (avpath == null) return DefaultAvatar==null?"/bfiles/"+username+".png":DefaultAvatar; string avatarLocation = avpath as string; if (avatarLocation.StartsWith ("~/")) { avatarLocation = helper.RequestContext.HttpContext.Server.MapPath(avatarLocation); @@ -165,6 +165,34 @@ namespace Yavsc.Helpers return avatarLocation; } + + private static string avatarDir = "~/avatars"; + private static string defaultAvatar = null; + private static string defaultAvatarMimetype = null; + public static string DefaultAvatar { + get { + if (defaultAvatar == null) + GetAvatarConfig (); + return defaultAvatar; + } + } + public static string AvatarDir { + get { + return avatarDir; + } + } + /// + /// Initializes a new instance of the class. + /// + private static void GetAvatarConfig () + { + string[] defaultAvatarSpec = ConfigurationManager.AppSettings.Get ("DefaultAvatar").Split (';'); + if (defaultAvatarSpec.Length != 2) + throw new ConfigurationErrorsException ("the DefaultAvatar spec should be found as ; "); + defaultAvatar = defaultAvatarSpec [0]; + defaultAvatarMimetype = defaultAvatarSpec [1]; + } + /// /// Javas the script. /// diff --git a/web/Models/App.master b/web/Models/App.master index 13a1fda4..13d6f066 100644 --- a/web/Models/App.master +++ b/web/Models/App.master @@ -50,7 +50,7 @@ Yavsc.notice('<%=notice%>'); <% } else { %> - +" accesskey = "B" class="menuitem" > vos billets Vos billets diff --git a/web/Models/NoLogin.master b/web/Models/NoLogin.master index 2cb237ac..bc55f1bd 100644 --- a/web/Models/NoLogin.master +++ b/web/Models/NoLogin.master @@ -19,7 +19,7 @@ ViewState["orgtitle"] = T.GetString(Page.Title);
-

<%=ViewState["orgtitle"]%> - +

"> <%=ViewState["orgtitle"]%> - "><%= YavscHelpers.SiteName %>

<% diff --git a/web/Views/Account/Profile.aspx b/web/Views/Account/Profile.aspx index 8319cff7..e783b526 100644 --- a/web/Views/Account/Profile.aspx +++ b/web/Views/Account/Profile.aspx @@ -28,7 +28,7 @@ table.layout TR TD { max-width:40%; } <%= Html.ValidationMessage("WebSite", "*") %>
-Avatar : avatar +Avatar : avatar <%= Html.ValidationMessage("AvatarFile", "*") %> diff --git a/web/Views/Blogs/Index.aspx b/web/Views/Blogs/Index.aspx index 3877671c..e313f74d 100644 --- a/web/Views/Blogs/Index.aspx +++ b/web/Views/Blogs/Index.aspx @@ -1,15 +1,12 @@ -<%@ Page Title="Blogs - Index" Language="C#" Inherits="System.Web.Mvc.ViewPage" MasterPageFile="~/Models/App.master" EnableTheming="True" StylesheetTheme="dark" %> +<%@ Page Title="Articles" Language="C#" Inherits="System.Web.Mvc.ViewPage" MasterPageFile="~/Models/App.master" EnableTheming="True" StylesheetTheme="dark" %> <%@ Register Assembly="Yavsc.WebControls" TagPrefix="yavsc" Namespace="Yavsc.WebControls" %>
-<% foreach (var g in Model.GroupByUser()) { %> -

" class="actionlink userref"> -<%=g.Key%>

+<% foreach (var g in Model.GroupByTitle()) { %> +

<%=Html.ActionLink(g.Key, "Title", "Blogs", new { id = g.Key } , new { @class="userref" } )%>

<% foreach (var p in g) { %>
-<%= Html.ActionLink(p.Title, "UserPost", - new { user = g.Key, title = p.Title }, new { @class = "usertitleref" } ) %>

<%= Html.Markdown(p.Intro,"/bfiles/"+p.Id+"/") %>

-<% rp1.ResultCount = (int) ViewData["ResultCount"]; +<% + rp1.ResultCount = (int) ViewData["ResultCount"]; rp1.PageSize = (int) ViewData ["PageSize"]; rp1.PageIndex = (int) ViewData["PageIndex"]; rp1.None = Html.Translate("no content"); diff --git a/web/Views/Blogs/Title.aspx b/web/Views/Blogs/Title.aspx new file mode 100644 index 00000000..bd9b15b6 --- /dev/null +++ b/web/Views/Blogs/Title.aspx @@ -0,0 +1,45 @@ +<%@ Page Title="Titre" Language="C#" Inherits="System.Web.Mvc.ViewPage" MasterPageFile="~/Models/App.master"%> +<%@ Register Assembly="Yavsc.WebControls" TagPrefix="yavsc" Namespace="Yavsc.WebControls" %> + +<% Title = Model.Title + " - " + YavscHelpers.SiteName; %> + + + +

+<%=Html.ActionLink(Model.Title, "Title", new{id=Model.Title}, null)%> +- "><%= YavscHelpers.SiteName %> +

+
+ + +<% foreach (BlogEntry e in this.Model) { %> +
+<% if (e.Photo!=null) { %><% } %> +<%= Html.Markdown(e.Content,"/bfiles/"+e.Id+"/") %> + + +
+<% } %> + + + +
diff --git a/web/Views/Blogs/UserPosts.aspx b/web/Views/Blogs/UserPosts.aspx index 14dfed40..63f41a3d 100644 --- a/web/Views/Blogs/UserPosts.aspx +++ b/web/Views/Blogs/UserPosts.aspx @@ -14,8 +14,7 @@

"> <%=Html.Encode(ViewData["BlogTitle"])%> -- -"><%= YavscHelpers.SiteName %> +- "><%= YavscHelpers.SiteName %>

diff --git a/web/Views/Home/Index.aspx b/web/Views/Home/Index.aspx index 31cf39b9..7aec880c 100644 --- a/web/Views/Home/Index.aspx +++ b/web/Views/Home/Index.aspx @@ -1,7 +1,7 @@ <%@ Page Title="Home" Language="C#" Inherits="System.Web.Mvc.ViewPage" MasterPageFile="~/Models/App.master"%>
-<%= Html.ActionLink("Les blogs", "Index", "Blogs",null, new { @class="actionlink" }) %> +<%= Html.ActionLink("Les articles", "Index", "Blogs", null, new { @class="actionlink" }) %> <%= Html.ActionLink("Contact", "Contact", "Home", null, new { @class="actionlink" }) %> <%= Html.ActionLink("Credits", "Credits", "Home", null, new { @class="actionlink" }) %> <%= Html.ActionLink("Version des librairies", "AssemblyInfo", "Home", null, new { @class="actionlink" }) %> diff --git a/web/Web.csproj b/web/Web.csproj index 5d78b335..7d3a1006 100644 --- a/web/Web.csproj +++ b/web/Web.csproj @@ -428,6 +428,7 @@ + diff --git a/yavscModel/Blogs/BlogManager.cs b/yavscModel/Blogs/BlogManager.cs index f6a18ac7..ff680027 100644 --- a/yavscModel/Blogs/BlogManager.cs +++ b/yavscModel/Blogs/BlogManager.cs @@ -100,6 +100,11 @@ namespace Yavsc.Model.Blogs Provider.UpdatePost (postid, title, content, visible, cids); } + /// + /// Updates the post photo. + /// + /// Postid. + /// Photo. public static void UpdatePostPhoto (long postid, string photo) { Provider.UpdatePostPhoto (postid, photo); diff --git a/yavscModel/Blogs/UTBlogEntryCollection.cs b/yavscModel/Blogs/UTBlogEntryCollection.cs new file mode 100644 index 00000000..ec0bd32d --- /dev/null +++ b/yavscModel/Blogs/UTBlogEntryCollection.cs @@ -0,0 +1,59 @@ +// +// UUTBlogEntryCollection.cs +// +// Author: +// Paul Schneider +// +// Copyright (c) 2015 GNU GPL +// +// 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 . +using System; +using System.Collections.Generic; + +namespace Yavsc.Model.Blogs +{ + /// + /// Unique User and Title blog entry collection. + /// + public class UTBlogEntryCollection : BlogEntryCollection { + + /// + /// Initializes a new instance of the class. + /// + /// Title. + public UTBlogEntryCollection(string title) : base() { + _title = title; + } + + private string _title; + /// + /// Gets the title. + /// + /// The title. + public string Title { get { return _title; } } + + /// + /// Returns a that represents the current . + /// + /// A that represents the current . + public override string ToString () + { + return string.Format ("[UUTBlogEntryCollection: " + + "Title={0} Count={2}]", Title, Count); + } + + + } + +} diff --git a/yavscModel/Blogs/UUTBlogEntryCollection.cs b/yavscModel/Blogs/UUTBlogEntryCollection.cs index c11758af..3245f902 100644 --- a/yavscModel/Blogs/UUTBlogEntryCollection.cs +++ b/yavscModel/Blogs/UUTBlogEntryCollection.cs @@ -32,7 +32,6 @@ namespace Yavsc.Model.Blogs ///
/// Username. /// Title. - /// Items. public UUTBlogEntryCollection(string username, string title) : base(username) { _title = title; } diff --git a/yavscModel/ChangeLog b/yavscModel/ChangeLog new file mode 100644 index 00000000..6cecba19 --- /dev/null +++ b/yavscModel/ChangeLog @@ -0,0 +1,8 @@ +2015-10-10 Paul Schneider + + * YavscModel.csproj: + * BlogManager.cs: + * UTBlogEntryCollection.cs: + * UUTBlogEntryCollection.cs: + * FileSystemManager.cs: + diff --git a/yavscModel/FileSystem/FileSystemManager.cs b/yavscModel/FileSystem/FileSystemManager.cs index 4eaf8d29..569eb680 100644 --- a/yavscModel/FileSystem/FileSystemManager.cs +++ b/yavscModel/FileSystem/FileSystemManager.cs @@ -166,7 +166,7 @@ namespace Yavsc.Model.FileSystem return (di.GetFiles ()); } - public IEnumerable GetFiles (string username, string subdir) + public IEnumerable GetFiles (string username, string subdir, bool createNonExistent = false) { string path = Prefix; if (subdir != null) { @@ -174,6 +174,9 @@ namespace Yavsc.Model.FileSystem path = Path.Combine (Prefix, subdir); } DirectoryInfo di = new DirectoryInfo (path); + if (createNonExistent) + if (!di.Exists) + di.Create (); return (di.GetFiles ()); } diff --git a/yavscModel/YavscModel.csproj b/yavscModel/YavscModel.csproj index feb09ae1..78bd42dd 100644 --- a/yavscModel/YavscModel.csproj +++ b/yavscModel/YavscModel.csproj @@ -171,6 +171,7 @@ +