merge from Yavsc
This commit is contained in:
4
Makefile
4
Makefile
@ -1,7 +1,7 @@
|
||||
|
||||
VERSION=1.1
|
||||
CONFIG=Debug
|
||||
LDYDESTDIR=build/web/$(CONFIG)
|
||||
LDYDESTDIR=dist/web/$(CONFIG)
|
||||
COPYUNCHANGED="false"
|
||||
RSYNCCMD=rsync -ravu --chown=www-data:www-data
|
||||
HOST_rsync_dev=totemdev.localdomain
|
||||
@ -28,7 +28,7 @@ rsync_% : DESTDIR = $(DESTDIR_$@)
|
||||
|
||||
rsync_% : deploy
|
||||
echo "!Deploying to $(HOST)!"
|
||||
$(RSYNCCMD) build/web/$(CONFIG)/ root@$(HOST):$(DESTDIR)
|
||||
$(RSYNCCMD) dist/web/$(CONFIG)/ root@$(HOST):$(DESTDIR)
|
||||
ssh root@$(HOST) "service apache2 reload"
|
||||
|
||||
build:
|
||||
|
@ -1,14 +0,0 @@
|
||||
2015-10-09 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* NpgsqlBlogProvider.cs: - Fixes access on bills
|
||||
- Fixes usage of bill without photo
|
||||
|
||||
2015-10-08 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* NpgsqlBlogProvider.cs: Fixes last commit in case of DBNull
|
||||
reading the photo
|
||||
|
||||
2015-10-08 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* NpgsqlBlogProvider.cs: implements a blog post photo storage
|
||||
|
@ -434,7 +434,7 @@ namespace Npgsql.Web.Blog
|
||||
if (circles.Length>0)
|
||||
using (NpgsqlCommand cmd = cnx.CreateCommand ()) {
|
||||
cmd.CommandText = "insert into blog_access (post_id,circle_id) values (:pid,:cid)";
|
||||
cmd.Parameters.AddWithValue ("pid", pid);
|
||||
cmd.Parameters.AddWithValue ("pid", NpgsqlTypes.NpgsqlDbType.Bigint, pid);
|
||||
cmd.Parameters.Add ("cid", NpgsqlTypes.NpgsqlDbType.Bigint);
|
||||
cmd.Prepare ();
|
||||
foreach (long ci in circles) {
|
||||
|
76
TestAPI/BlogUnitTest.cs
Normal file
76
TestAPI/BlogUnitTest.cs
Normal file
@ -0,0 +1,76 @@
|
||||
//
|
||||
// BlogUnitTest.cs
|
||||
//
|
||||
// Author:
|
||||
// Paul Schneider <paul@pschneider.fr>
|
||||
//
|
||||
// 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 <http://www.gnu.org/licenses/>.
|
||||
using NUnit.Framework;
|
||||
using System;
|
||||
using Yavsc.Model.Blogs;
|
||||
using Yavsc.Controllers;
|
||||
using System.Web.Mvc;
|
||||
using System.Web.Security;
|
||||
|
||||
namespace TestAPI
|
||||
{
|
||||
[TestFixture ()]
|
||||
public class BlogUnitTest
|
||||
{
|
||||
|
||||
public string UserName { get; set; }
|
||||
public string Email { get; set; }
|
||||
public string Password { get; set; }
|
||||
|
||||
|
||||
AccountController accountController;
|
||||
[TestFixtureSetUp]
|
||||
public void Init()
|
||||
{
|
||||
accountController = new AccountController ();
|
||||
}
|
||||
|
||||
[Test ()]
|
||||
public void Register ()
|
||||
{
|
||||
ViewResult actionResult = accountController.Register (
|
||||
new Yavsc.Model.RolesAndMembers.RegisterViewModel () {
|
||||
UserName = UserName, Email = Email,
|
||||
Password = "tpwd", ConfirmPassword = Password,
|
||||
IsApprouved = true
|
||||
},
|
||||
"/testreturnurl") as ViewResult;
|
||||
Assert.AreEqual (actionResult.ViewName, "RegistrationPending");
|
||||
MembershipUser u = Membership.GetUser (UserName, false);
|
||||
Assert.NotNull (u);
|
||||
Assert.False (u.IsApproved);
|
||||
// TODO : check mail for test,
|
||||
// get the validation key from its body,
|
||||
// and use the accountController.Validate(username,key)
|
||||
u.IsApproved = true;
|
||||
Membership.UpdateUser (u);
|
||||
Assert.True (u.IsApproved);
|
||||
}
|
||||
[TestFixtureTearDown()]
|
||||
public void Unregister()
|
||||
{
|
||||
ViewResult actionResult =
|
||||
accountController.Unregister (UserName, true) as ViewResult;
|
||||
Assert.AreEqual (actionResult.ViewName, "Index");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -9,7 +9,7 @@
|
||||
<OutputType>Library</OutputType>
|
||||
<RootNamespace>TestAPI</RootNamespace>
|
||||
<AssemblyName>TestAPI</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
@ -55,10 +55,14 @@
|
||||
<Reference Include="Spark">
|
||||
<HintPath>..\packages\Spark.1.8.1.0\lib\NET45\Spark.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Web.Mvc" />
|
||||
<Reference Include="System.Web.ApplicationServices" />
|
||||
<Reference Include="System.Web" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="TestAutomate.cs" />
|
||||
<Compile Include="BlogUnitTest.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<ItemGroup>
|
||||
@ -66,6 +70,10 @@
|
||||
<Project>{68F5B80A-616E-4C3C-91A0-828AA40000BD}</Project>
|
||||
<Name>YavscModel</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\web\Web.csproj">
|
||||
<Project>{77044C92-D2F1-45BD-80DD-AA25B311B027}</Project>
|
||||
<Name>Web</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
|
@ -40,7 +40,7 @@ namespace Yavsc.Admin
|
||||
*/
|
||||
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);
|
||||
fileName, da.Host, da.DbUser, da.Port, da.DbName ),e);
|
||||
return e;
|
||||
}
|
||||
|
||||
@ -74,7 +74,7 @@ namespace Yavsc.Admin
|
||||
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);
|
||||
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}",
|
||||
@ -149,7 +149,7 @@ namespace Yavsc.Admin
|
||||
var t = new TaskOutput ();
|
||||
Exec ("pg_restore", string.Format (
|
||||
"-a -w -Fd -O -h {0} -U {1} -p {2} -d {3} {4}",
|
||||
da.Host, da.Dbuser, da.Port, da.Dbname, fileName ),t);
|
||||
da.Host, da.DbUser, da.Port, da.DbName, fileName ),t);
|
||||
return t;
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace Yavsc.Admin
|
||||
namespace Yavsc.Model.Admin
|
||||
{
|
||||
/// <summary>
|
||||
/// Export.
|
||||
@ -9,7 +9,7 @@ namespace Yavsc.Admin
|
||||
public class Export: TaskOutput
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="Yavsc.Admin.Export"/> class.
|
||||
/// Initializes a new instance of the <see cref="Yavsc.Model.Admin.Export"/> class.
|
||||
/// </summary>
|
||||
public Export ()
|
||||
{
|
||||
|
@ -72,7 +72,7 @@ namespace Yavsc.ApiControllers
|
||||
break;
|
||||
case MembershipCreateStatus.Success:
|
||||
if (!model.IsApprouved)
|
||||
YavscHelpers.SendActivationMessage (user);
|
||||
Url.SendActivationMessage (user);
|
||||
ProfileBase prtu = ProfileBase.Create (model.UserName);
|
||||
prtu.SetPropertyValue("Name",model.Name);
|
||||
prtu.SetPropertyValue("Address",model.Address);
|
||||
@ -99,9 +99,12 @@ namespace Yavsc.ApiControllers
|
||||
public void ResetPassword(LostPasswordModel model)
|
||||
{
|
||||
StringDictionary errors;
|
||||
YavscHelpers.ResetPassword (model, out errors);
|
||||
MembershipUser user;
|
||||
YavscHelpers.ValidatePasswordReset (model, out errors, out user);
|
||||
foreach (string key in errors.Keys)
|
||||
ModelState.AddModelError (key, errors [key]);
|
||||
if (user != null && ModelState.IsValid)
|
||||
Url.SendActivationMessage (user);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -165,7 +165,7 @@ namespace Yavsc.ApiControllers
|
||||
try
|
||||
{
|
||||
// Read the form data.
|
||||
await Request.Content.ReadAsMultipartAsync(provider) ;
|
||||
IEnumerable<HttpContent> data = await Request.Content.ReadAsMultipartAsync(provider) ;
|
||||
|
||||
var invalidChars = Path.GetInvalidFileNameChars();
|
||||
List<string> bodies = new List<string>();
|
||||
@ -173,10 +173,8 @@ namespace Yavsc.ApiControllers
|
||||
foreach (string fkey in provider.BodyPartFileNames.Keys)
|
||||
{
|
||||
string filename = provider.BodyPartFileNames[fkey];
|
||||
|
||||
|
||||
string nicename=fkey;
|
||||
if (fkey.StartsWith("\"") && fkey.EndsWith("\"") && fkey.Length > 2)
|
||||
nicename = fkey.Substring(1,fkey.Length-2);
|
||||
var filtered = new string (nicename.Where( x=> !invalidChars.Contains(x)).ToArray());
|
||||
|
||||
FileInfo fi = new FileInfo(filtered);
|
||||
@ -184,6 +182,10 @@ namespace Yavsc.ApiControllers
|
||||
FileInfo fp = new FileInfo (Path.Combine(root,filename));
|
||||
if (fi.Exists) fi.Delete();
|
||||
fp.MoveTo(fi.FullName);
|
||||
// Get the mime type
|
||||
|
||||
|
||||
|
||||
using (Process p = new Process ()) {
|
||||
p.StartInfo.WorkingDirectory = root;
|
||||
p.StartInfo = new ProcessStartInfo ();
|
||||
@ -206,14 +208,14 @@ namespace Yavsc.ApiControllers
|
||||
);
|
||||
}
|
||||
}
|
||||
bodies.Add(fo.OpenText().ReadToEnd());
|
||||
parts.Add(fo.OpenText().ReadToEnd());
|
||||
|
||||
|
||||
fi.Delete();
|
||||
fo.Delete();
|
||||
}
|
||||
|
||||
return Request.CreateResponse(HttpStatusCode.OK,string.Join("---\n",bodies),new SimpleFormatter("text/plain"));
|
||||
return Request.CreateResponse(HttpStatusCode.OK,string.Join("---\n",parts),new SimpleFormatter("text/plain"));
|
||||
|
||||
}
|
||||
catch (System.Exception e)
|
||||
|
@ -27,6 +27,7 @@ using Yavsc.Helpers;
|
||||
using System.Web.Profile;
|
||||
using Yavsc.Model.Circles;
|
||||
using Yavsc.Model.Calendar;
|
||||
using System.Web.Http.Routing;
|
||||
|
||||
|
||||
namespace Yavsc.ApiControllers
|
||||
@ -160,7 +161,7 @@ namespace Yavsc.ApiControllers
|
||||
"déjà enregistré");
|
||||
break;
|
||||
case MembershipCreateStatus.Success:
|
||||
YavscHelpers.SendActivationMessage (user);
|
||||
Url.SendActivationMessage (user);
|
||||
// TODO set registration id
|
||||
throw new NotImplementedException ();
|
||||
}
|
||||
|
@ -85,7 +85,8 @@ namespace Yavsc.ApiControllers
|
||||
return ;
|
||||
case MembershipCreateStatus.Success:
|
||||
if (!userModel.IsApprouved)
|
||||
YavscHelpers.SendActivationMessage (user);
|
||||
|
||||
Url.SendActivationMessage (user);
|
||||
return;
|
||||
default:
|
||||
throw new InvalidOperationException (string.Format("Unexpected user creation code :{0}",mcs));
|
||||
|
@ -273,6 +273,14 @@ input, select {
|
||||
font-size: smaller;
|
||||
}
|
||||
|
||||
|
||||
.menuitem {
|
||||
border-radius:5px;
|
||||
margin:.5em;
|
||||
padding:.5em;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.onhover {
|
||||
display:none;
|
||||
position: absolute;
|
||||
@ -295,12 +303,10 @@ input, select {
|
||||
.control,.actionlink,nav { display:none;}
|
||||
}
|
||||
|
||||
@media all and (min-width: 640px) {
|
||||
.bshpanel { display:block; }
|
||||
.bsh { display: none; }
|
||||
.c3 { display:initial; }
|
||||
.c3-alt { display:none; }
|
||||
}
|
||||
|
||||
@media all and (max-width: 640px) {
|
||||
nav {
|
||||
|
@ -1,88 +0,0 @@
|
||||
2015-10-09 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* totem-banner.png:
|
||||
* totem-banner.xs.jpg:
|
||||
* totem-banner.xxs.jpg: totem custo
|
||||
|
||||
* style.css: yastyle
|
||||
|
||||
* AccountController.cs: - Fixes route usage with n ovalue for
|
||||
`id`
|
||||
- better code at getting the avatar url
|
||||
|
||||
|
||||
* BlogsController.cs: Fixes a Post request without user name
|
||||
in the route
|
||||
|
||||
* YavscHelpers.cs: Implements a file list html rendering
|
||||
|
||||
* App.master:
|
||||
* UserPost.aspx:
|
||||
* Profile.aspx:
|
||||
* AssemblyInfo.aspx: yahtmlstructure
|
||||
|
||||
* Edit.aspx: Displays a list a attached files
|
||||
|
||||
* UserPosts.aspx: yahtmlstrucure
|
||||
|
||||
* Web.csproj: new images
|
||||
|
||||
* instdbws.sql: returns to the flat list of properies (groups
|
||||
are not working)
|
||||
|
||||
2015-10-08 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* Contact.aspx: a form background color
|
||||
|
||||
* Index.aspx: A link to the credits page
|
||||
|
||||
* HomeController.cs: A Credits page
|
||||
|
||||
* Credits.aspx: A page title and H1 links
|
||||
|
||||
* AssemblyInfo.aspx: A relevant title
|
||||
|
||||
2015-10-08 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* style.css: yastyle
|
||||
|
||||
2015-10-08 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* BlogsController.cs: implements a method to update the photo
|
||||
url
|
||||
|
||||
* style.css: yastyle
|
||||
|
||||
* AdminController.cs: refactoring the notification:
|
||||
Introduces a static `Notice` method, server side, to populate
|
||||
an array
|
||||
in `ViewData`, used in the paster page.
|
||||
|
||||
* BlogsController.cs: Controls the photo update
|
||||
|
||||
* YavscHelpers.cs:
|
||||
* yavsc.circles.js:
|
||||
* HomeController.cs:
|
||||
* GoogleController.cs: notification refactoring
|
||||
|
||||
* App.master: - notification refactoring
|
||||
- html structure in the `nav`
|
||||
|
||||
* hallo.js: event 'hallomodified' now also occurs at image
|
||||
modifications
|
||||
|
||||
* to-markdown.js: ?Fixes? html images alt text and title to
|
||||
Markdown
|
||||
|
||||
* yavsc.js: implements the photo in database
|
||||
|
||||
* Edit.aspx: A nicer bill edition, with a photo
|
||||
|
||||
* UserPost.aspx: Displays the photo
|
||||
|
||||
* UserPosts.aspx: Fixes the new usage of `ResultPages`
|
||||
|
||||
* Web.config: totem custo
|
||||
|
||||
* instdbws.sql: adds a `photo` field in the `blog` table
|
||||
|
@ -24,7 +24,7 @@ namespace Yavsc.Controllers
|
||||
/// </summary>
|
||||
public class AccountController : Controller
|
||||
{
|
||||
|
||||
|
||||
string avatarDir = "~/avatars";
|
||||
string defaultAvatar;
|
||||
string defaultAvatarMimetype;
|
||||
@ -37,20 +37,7 @@ namespace Yavsc.Controllers
|
||||
[AcceptVerbs (HttpVerbs.Get)]
|
||||
public ActionResult Avatar (string id)
|
||||
{
|
||||
if (id == null)
|
||||
return new EmptyResult ();
|
||||
|
||||
ProfileBase pr = ProfileBase.Create (id);
|
||||
var avpath = pr.GetPropertyValue("Avatar");
|
||||
if (avpath == null) {
|
||||
FileInfo fia = new FileInfo (Server.MapPath (defaultAvatar));
|
||||
return File (fia.OpenRead (), defaultAvatarMimetype);
|
||||
}
|
||||
string avatarLocation = avpath as string;
|
||||
if (avatarLocation.StartsWith ("~/")) {
|
||||
avatarLocation = Server.MapPath (avatarLocation);
|
||||
}
|
||||
|
||||
string avatarLocation = Url.AvatarUrl (id);
|
||||
WebRequest wr = WebRequest.Create (avatarLocation);
|
||||
FileContentResult res;
|
||||
using (WebResponse resp = wr.GetResponse ()) {
|
||||
@ -130,11 +117,17 @@ namespace Yavsc.Controllers
|
||||
return View ();
|
||||
}
|
||||
|
||||
public ActionResult RegisterForm()
|
||||
{
|
||||
return View ("Register");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Register the specified model and returnUrl.
|
||||
/// </summary>
|
||||
/// <param name="model">Model.</param>
|
||||
/// <param name="returnUrl">Return URL.</param>
|
||||
[HttpPost]
|
||||
public ActionResult Register (RegisterViewModel model, string returnUrl)
|
||||
{
|
||||
ViewData ["returnUrl"] = returnUrl;
|
||||
@ -142,7 +135,8 @@ namespace Yavsc.Controllers
|
||||
foreach (string k in ModelState.Keys)
|
||||
ModelState [k].Errors.Clear ();
|
||||
return View (model);
|
||||
}
|
||||
}
|
||||
|
||||
if (ModelState.IsValid) {
|
||||
if (model.ConfirmPassword != model.Password) {
|
||||
ModelState.AddModelError ("ConfirmPassword", "Veuillez confirmer votre mot de passe");
|
||||
@ -168,7 +162,7 @@ namespace Yavsc.Controllers
|
||||
"déjà enregistré");
|
||||
return View (model);
|
||||
case MembershipCreateStatus.Success:
|
||||
YavscHelpers.SendActivationMessage (user);
|
||||
Url.SendActivationMessage (user);
|
||||
ViewData ["username"] = user.UserName;
|
||||
ViewData ["email"] = user.Email;
|
||||
return View ("RegistrationPending");
|
||||
@ -207,14 +201,20 @@ namespace Yavsc.Controllers
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Unregister the specified confirmed.
|
||||
/// Unregister the specified id and confirmed.
|
||||
/// </summary>
|
||||
/// <param name="id">Identifier.</param>
|
||||
/// <param name="confirmed">If set to <c>true</c> confirmed.</param>
|
||||
[Authorize]
|
||||
public ActionResult Unregister (bool confirmed = false)
|
||||
public ActionResult Unregister (string id, bool confirmed = false)
|
||||
{
|
||||
ViewData ["UserName"] = id;
|
||||
if (!confirmed)
|
||||
return View ();
|
||||
string logged = Membership.GetUser ().UserName;
|
||||
if (logged != id)
|
||||
if (!Roles.IsUserInRole ("Admin"))
|
||||
throw new Exception ("Unregister another user");
|
||||
|
||||
Membership.DeleteUser (
|
||||
Membership.GetUser ().UserName);
|
||||
@ -391,9 +391,13 @@ namespace Yavsc.Controllers
|
||||
{
|
||||
if (Request.HttpMethod == "POST") {
|
||||
StringDictionary errors;
|
||||
YavscHelpers.ResetPassword (model, out errors);
|
||||
MembershipUser user;
|
||||
YavscHelpers.ValidatePasswordReset (model, out errors, out user);
|
||||
foreach (string key in errors.Keys)
|
||||
ModelState.AddModelError (key, errors [key]);
|
||||
|
||||
if (user != null && ModelState.IsValid)
|
||||
Url.SendActivationMessage (user);
|
||||
}
|
||||
return View (model);
|
||||
}
|
||||
|
@ -43,6 +43,10 @@ namespace Yavsc.Controllers
|
||||
datac.BackupPrefix = Server.MapPath (datac.BackupPrefix);
|
||||
DataManager mgr = new DataManager (datac);
|
||||
TaskOutput tcdb = mgr.CreateDb ();
|
||||
ViewData ["DbName"] = datac.DbName;
|
||||
ViewData ["DbUser"] = datac.DbUser;
|
||||
ViewData ["Host"] = datac.Host;
|
||||
ViewData ["Port"] = datac.Port;
|
||||
return View ("Created", tcdb);
|
||||
}
|
||||
}
|
||||
|
@ -185,8 +185,8 @@ namespace Yavsc.Controllers
|
||||
ViewData ["Avatar"] = pr.avatar;
|
||||
ViewData ["BlogTitle"] = pr.BlogTitle;
|
||||
MembershipUser u = Membership.GetUser ();
|
||||
if (u != null)
|
||||
ViewData ["Author"] = u.UserName;
|
||||
|
||||
ViewData ["Author"] = bec.Author;
|
||||
if (!pr.BlogVisible) {
|
||||
// only deliver to admins or owner
|
||||
if (u == null)
|
||||
@ -197,6 +197,13 @@ namespace Yavsc.Controllers
|
||||
return View ("NotAuthorized");
|
||||
}
|
||||
}
|
||||
if (u == null || (u.UserName != bec.Author) && !Roles.IsUserInRole (u.UserName, "Admin")) {
|
||||
// Filer on allowed posts
|
||||
BlogEntryCollection filtered = bec.FilterFor((u == null)?null : u.UserName);
|
||||
UUTBlogEntryCollection nbec = new UUTBlogEntryCollection (bec.Author, bec.Title);
|
||||
nbec.AddRange (filtered);
|
||||
View ("UserPost",nbec);
|
||||
}
|
||||
}
|
||||
return View ("UserPost",bec);
|
||||
}
|
||||
|
@ -5,11 +5,9 @@ using System.Web.Security;
|
||||
using System.IO;
|
||||
using System.Web.Configuration;
|
||||
using System.Net.Mail;
|
||||
using System.Web.Http.ModelBinding;
|
||||
using Yavsc.Model.RolesAndMembers;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Web.Mvc;
|
||||
using Yavsc.Model.Circles;
|
||||
using System.Web.UI;
|
||||
using System.Linq.Expressions;
|
||||
@ -23,31 +21,6 @@ namespace Yavsc.Helpers
|
||||
/// </summary>
|
||||
public static class YavscHelpers
|
||||
{
|
||||
/// <summary>
|
||||
/// Formats the circle.
|
||||
/// </summary>
|
||||
/// <returns>The circle.</returns>
|
||||
/// <param name="c">C.</param>
|
||||
public static HtmlString FormatCircle (Circle c)
|
||||
{
|
||||
if (c.Members!=null)
|
||||
if (c.Members.Length > 0) {
|
||||
TagBuilder i = new TagBuilder ("i");
|
||||
i.SetInnerText (String.Join (", ", c.Members));
|
||||
return new HtmlString (c.Title+"<br/>\n"+i.ToString());
|
||||
}
|
||||
return new HtmlString (c.Title);
|
||||
}
|
||||
/// <summary>
|
||||
/// Formats the circle.
|
||||
/// </summary>
|
||||
/// <returns>The circle as Html string.</returns>
|
||||
/// <param name="helper">Helper.</param>
|
||||
/// <param name="c">C.</param>
|
||||
public static HtmlString FormatCircle(this HtmlHelper helper, Circle c)
|
||||
{
|
||||
return FormatCircle (c);
|
||||
}
|
||||
|
||||
private static string siteName = null;
|
||||
/// <summary>
|
||||
@ -77,19 +50,33 @@ namespace Yavsc.Helpers
|
||||
/// <summary>
|
||||
/// Sends the activation message.
|
||||
/// </summary>
|
||||
/// <param name="helper">Helper.</param>
|
||||
/// <param name="user">User.</param>
|
||||
public static void SendActivationMessage(MembershipUser user)
|
||||
public static void SendActivationMessage(this System.Web.Http.Routing.UrlHelper helper, MembershipUser user)
|
||||
{
|
||||
SendEmail (WebConfigurationManager.AppSettings ["RegistrationMessage"],
|
||||
SendActivationMessage (helper.Route("~/Account/Validate/",new { id=user.UserName, key=user.ProviderUserKey.ToString() } )
|
||||
, WebConfigurationManager.AppSettings ["RegistrationMessage"],
|
||||
user);
|
||||
}
|
||||
/// <summary>
|
||||
/// Sends the activation message.
|
||||
/// </summary>
|
||||
/// <param name="helper">Helper.</param>
|
||||
/// <param name="user">User.</param>
|
||||
public static void SendActivationMessage(this System.Web.Mvc.UrlHelper helper, MembershipUser user)
|
||||
{
|
||||
SendActivationMessage (helper.Content("~/Account/Validate/"+user.UserName+"/?key="+user.ProviderUserKey.ToString())
|
||||
, WebConfigurationManager.AppSettings ["RegistrationMessage"],
|
||||
user);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sends the email.
|
||||
/// Sends the activation message.
|
||||
/// </summary>
|
||||
/// <param name="validationUrl">Validation URL.</param>
|
||||
/// <param name="registrationMessage">Registration message.</param>
|
||||
/// <param name="user">User.</param>
|
||||
public static void SendEmail(string registrationMessage, MembershipUser user) {
|
||||
public static void SendActivationMessage(string validationUrl, string registrationMessage, MembershipUser user) {
|
||||
FileInfo fi = new FileInfo (
|
||||
HttpContext.Current.Server.MapPath (registrationMessage));
|
||||
if (!fi.Exists) {
|
||||
@ -104,12 +91,8 @@ namespace Yavsc.Helpers
|
||||
string body = sr.ReadToEnd ();
|
||||
body = body.Replace ("<%SiteName%>", YavscHelpers.SiteName);
|
||||
body = body.Replace ("<%UserName%>", user.UserName);
|
||||
body = body.Replace ("<%UserActivatonUrl%>",
|
||||
string.Format ("<{0}://{1}/Account/Validate/{2}?key={3}>",
|
||||
HttpContext.Current.Request.Url.Scheme,
|
||||
HttpContext.Current.Request.Url.Authority,
|
||||
user.UserName,
|
||||
user.ProviderUserKey.ToString ()));
|
||||
body = body.Replace ("<%UserActivatonUrl%>", validationUrl);
|
||||
|
||||
using (MailMessage msg = new MailMessage (
|
||||
Admail, user.Email,
|
||||
string.Format ("Validation de votre compte {0}", YavscHelpers.SiteName),
|
||||
@ -123,15 +106,16 @@ namespace Yavsc.Helpers
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resets the password.
|
||||
/// Validates the password reset.
|
||||
/// </summary>
|
||||
/// <param name="model">Model.</param>
|
||||
/// <param name="errors">Errors.</param>
|
||||
public static void ResetPassword(LostPasswordModel model, out StringDictionary errors)
|
||||
/// <param name="user">User.</param>
|
||||
public static void ValidatePasswordReset(LostPasswordModel model, out StringDictionary errors, out MembershipUser user)
|
||||
{
|
||||
MembershipUserCollection users = null;
|
||||
errors = new StringDictionary ();
|
||||
|
||||
user = null;
|
||||
if (!string.IsNullOrEmpty (model.UserName)) {
|
||||
users =
|
||||
Membership.FindUsersByName (model.UserName);
|
||||
@ -159,10 +143,7 @@ namespace Yavsc.Helpers
|
||||
if (users==null)
|
||||
return;
|
||||
// Assert users.Count == 1
|
||||
if (users.Count != 1)
|
||||
throw new InvalidProgramException ("Emails and user's names are uniques, and we find more than one result here, aborting.");
|
||||
foreach (MembershipUser u in users)
|
||||
YavscHelpers.SendActivationMessage (u);
|
||||
foreach (MembershipUser u in users) user = u;
|
||||
}
|
||||
/// <summary>
|
||||
/// Avatars the URL.
|
||||
@ -170,11 +151,19 @@ namespace Yavsc.Helpers
|
||||
/// <returns>The URL.</returns>
|
||||
/// <param name="helper">Helper.</param>
|
||||
/// <param name="username">Username.</param>
|
||||
public static string AvatarUrl (this HtmlHelper helper, string username) {
|
||||
public static string AvatarUrl (this System.Web.Mvc.UrlHelper helper, string username) {
|
||||
if (username == null)
|
||||
return null;
|
||||
ProfileBase pr = ProfileBase.Create (username);
|
||||
var a = pr.GetPropertyValue("Avatar") ;
|
||||
if (a == null || a is DBNull) return "/avatars/" + helper.Encode(username)+".png";
|
||||
return helper.Encode ((string)a);
|
||||
object avpath = null;
|
||||
if (pr != null) avpath = pr.GetPropertyValue("Avatar");
|
||||
if (avpath == null) return "/bfiles/"+username+".png";
|
||||
string avatarLocation = avpath as string;
|
||||
if (avatarLocation.StartsWith ("~/")) {
|
||||
avatarLocation = helper.RequestContext.HttpContext.Server.MapPath(avatarLocation);
|
||||
}
|
||||
return avatarLocation;
|
||||
|
||||
}
|
||||
/// <summary>
|
||||
/// Javas the script.
|
||||
|
@ -26,7 +26,7 @@ var apiBaseUrl = '<%=Url.Content(Yavsc.WebApiConfig.UrlPrefixRelative)%>';
|
||||
<body>
|
||||
<header data-type="background" data-speed="8" >
|
||||
<asp:ContentPlaceHolder ID="overHeaderOne" runat="server">
|
||||
<h1><a href="<%= Html.Encode(Request.Url.AbsoluteUri.ToString()) %>">
|
||||
<h1><a href="<%= Url.Content("~/") %>">
|
||||
<%=ViewState["orgtitle"]%></a>
|
||||
<span> -
|
||||
<a href="<%= Url.Content("~/") %>"><%= YavscHelpers.SiteName %></a>
|
||||
@ -51,8 +51,7 @@ Yavsc.notice('<%=notice%>');
|
||||
</a>
|
||||
<% } else { %>
|
||||
<a href="/Blog/<%= HttpContext.Current.User.Identity.Name%>" accesskey = "B" class="menuitem" >
|
||||
|
||||
<img src="<%=Html.AvatarUrl(HttpContext.Current.User.Identity.Name)%>" alt="vos billets" class="iconsmall" />
|
||||
<img src="<%=Url.AvatarUrl(HttpContext.Current.User.Identity.Name)%>" alt="vos billets" class="iconsmall" />
|
||||
<span class="hint">Vos billets</span>
|
||||
</a>
|
||||
<a href="<%= Url.Content("~/Account/Profile/" + HttpContext.Current.User.Identity.Name) %>" accesskey="L" class="menuitem">
|
||||
|
@ -20,7 +20,7 @@
|
||||
<input type="submit"/>
|
||||
<% } %></div>
|
||||
<div class="panel">
|
||||
<%= Html.ActionLink("S'enregistrer","Register",new {returnUrl=ViewData["returnUrl"]}, new { @class="actionlink" }) %>
|
||||
<%= Html.ActionLink("S'enregistrer","RegisterForm",new {returnUrl=ViewData["returnUrl"]}, new { @class="actionlink" }) %>
|
||||
</div>
|
||||
<div class="panel">
|
||||
<a href="<%=Request.Url.Scheme + "://" + Request.Url.Authority + "/Google/Login"%>?returnUrl=<%=ViewData["returnUrl"]==null?Request.Url.PathAndQuery:(string)ViewData["returnUrl"]%>" class="actionlink">
|
||||
|
@ -117,7 +117,7 @@ Avatar : <img src="<%=Html.AvatarUrl(HttpContext.Current.User.Identity.Name)%>"
|
||||
<% } %>
|
||||
<aside>
|
||||
<%= Html.ActionLink("Changer de mot de passe","ChangePassword", "Account",null, new { @class="actionlink" })%>
|
||||
<%= Html.ActionLink("Désincription","Unregister", "Account",null, new { @class="actionlink" })%>
|
||||
<%= Html.ActionLink("Désincription","Unregister", "Account", new { id=ViewData["UserName"] } , new { @class="actionlink" })%>
|
||||
</aside>
|
||||
<aside>
|
||||
<% if (Roles.IsUserInRole((string)ViewData ["UserName"],"Admin")) { %>
|
||||
|
@ -7,5 +7,6 @@ Warning: This will delete all of your data here, your profile, your posts and ot
|
||||
<label for="confirmed">Unregister</label>
|
||||
<%=Html.CheckBox("confirmed")%>
|
||||
<input type="submit"/>
|
||||
<%= Html.Hidden("UserName") %>
|
||||
<% } %>
|
||||
</asp:Content>
|
||||
|
@ -9,12 +9,12 @@
|
||||
<%= Html.LabelFor(model => model.Port) %>:
|
||||
<%= Html.TextBox( "Port" ) %>
|
||||
<%= Html.ValidationMessage("Port", "*") %><br/>
|
||||
<%= Html.LabelFor(model => model.Dbname) %>:
|
||||
<%= Html.TextBox( "Dbname" ) %>
|
||||
<%= Html.ValidationMessage("Dbname", "*") %><br/>
|
||||
<%= Html.LabelFor(model => model.Dbuser) %>:
|
||||
<%= Html.TextBox( "Dbuser" ) %>
|
||||
<%= Html.ValidationMessage("Dbuser", "*") %><br/>
|
||||
<%= Html.LabelFor(model => model.DbName) %>:
|
||||
<%= Html.TextBox( "DbName" ) %>
|
||||
<%= Html.ValidationMessage("DbName", "*") %><br/>
|
||||
<%= Html.LabelFor(model => model.DbUser) %>:
|
||||
<%= Html.TextBox( "DbUser" ) %>
|
||||
<%= Html.ValidationMessage("DbUser", "*") %><br/>
|
||||
<%= Html.LabelFor(model => model.Password) %>:
|
||||
<%= Html.Password( "Password" ) %>
|
||||
<%= Html.ValidationMessage("Password", "*") %><br/>
|
||||
|
@ -5,8 +5,8 @@
|
||||
<div><h2>Message </h2> <%= Html.Encode(Model.Message) %></div>
|
||||
<div><h2>Exit Code</h2> <%= Html.Encode(Model.ExitCode) %></div>
|
||||
<form><fieldset><legend>Acces à la base de donnée</legend>
|
||||
<label>db Name:</label><%= Html.Encode(Model.Dbname) %><br/>
|
||||
<label>db User:</label><%= Html.Encode(Model.Dbuser) %><br/>
|
||||
<Label>Pass:</label><%= Html.Encode(Model.Password[0]) %> ... You should already know it.<br/>
|
||||
<label>Hôte:</label><%= Html.Encode(Model.Host) %>:<%= Model.Port %></filedset>
|
||||
<label>db Name:</label><%= Html.Encode(ViewData["DbName"]) %><br/>
|
||||
<label>db User:</label><%= Html.Encode(ViewData["DbUser"]) %><br/>
|
||||
<label>Hôte:</label><%= Html.Encode(ViewData["Host"]) %></fieldset>
|
||||
</form>
|
||||
</asp:Content>
|
||||
|
@ -8,12 +8,12 @@
|
||||
<%= Html.LabelFor(model => model.Port) %>:
|
||||
<%= Html.TextBox( "Port" ) %>
|
||||
<%= Html.ValidationMessage("Port", "*") %><br/>
|
||||
<%= Html.LabelFor(model => model.Dbname) %>:
|
||||
<%= Html.TextBox( "Dbname" ) %>
|
||||
<%= Html.ValidationMessage("Dbname", "*") %><br/>
|
||||
<%= Html.LabelFor(model => model.Dbuser) %>:
|
||||
<%= Html.TextBox( "Dbuser" ) %>
|
||||
<%= Html.ValidationMessage("Dbuser", "*") %><br/>
|
||||
<%= Html.LabelFor(model => model.DbName) %>:
|
||||
<%= Html.TextBox( "DbName" ) %>
|
||||
<%= Html.ValidationMessage("DbName", "*") %><br/>
|
||||
<%= Html.LabelFor(model => model.DbUser) %>:
|
||||
<%= Html.TextBox( "DbUser" ) %>
|
||||
<%= Html.ValidationMessage("DbUser", "*") %><br/>
|
||||
<%= Html.LabelFor(model => model.Password) %>:
|
||||
<%= Html.Password( "Password" ) %>
|
||||
<%= Html.ValidationMessage("Password", "*") %><br/>
|
||||
|
@ -22,12 +22,12 @@
|
||||
<%= Html.LabelFor(model => model.Port) %>:
|
||||
<%= Html.TextBox( "Port" ) %>
|
||||
<%= Html.ValidationMessage("Port", "*") %><br/>
|
||||
<%= Html.LabelFor(model => model.Dbname) %>:
|
||||
<%= Html.TextBox( "Dbname" ) %>
|
||||
<%= Html.ValidationMessage("Dbname", "*") %><br/>
|
||||
<%= Html.LabelFor(model => model.Dbuser) %>:
|
||||
<%= Html.TextBox( "Dbuser" ) %>
|
||||
<%= Html.ValidationMessage("Dbuser", "*") %><br/>
|
||||
<%= Html.LabelFor(model => model.DbName) %>:
|
||||
<%= Html.TextBox( "DbName" ) %>
|
||||
<%= Html.ValidationMessage("DbName", "*") %><br/>
|
||||
<%= Html.LabelFor(model => model.DbUser) %>:
|
||||
<%= Html.TextBox( "DbUser" ) %>
|
||||
<%= Html.ValidationMessage("DbUser", "*") %><br/>
|
||||
<%= Html.LabelFor(model => model.Password) %>:
|
||||
<%= Html.Password( "Password" ) %>
|
||||
<%= Html.ValidationMessage("Password", "*") %><br/>
|
||||
|
BIN
web/fonts/fontawesome-webfont.woff2
Normal file
BIN
web/fonts/fontawesome-webfont.woff2
Normal file
Binary file not shown.
@ -47,7 +47,7 @@ namespace Yavsc.Model.Admin
|
||||
/// Gets or sets the dbname.
|
||||
/// </summary>
|
||||
/// <value>The dbname.</value>
|
||||
public string Dbname {
|
||||
public string DbName {
|
||||
get {
|
||||
return dbname;
|
||||
}
|
||||
@ -62,7 +62,7 @@ namespace Yavsc.Model.Admin
|
||||
/// Gets or sets the dbuser.
|
||||
/// </summary>
|
||||
/// <value>The dbuser.</value>
|
||||
public string Dbuser {
|
||||
public string DbUser {
|
||||
get {
|
||||
return dbuser;
|
||||
}
|
||||
@ -101,7 +101,7 @@ namespace Yavsc.Model.Admin
|
||||
/// </summary>
|
||||
/// <returns>The string.</returns>
|
||||
public string ConnectionString { get { return string.Format ("Server={0};Port={1};Database={2};User Id={3};Password={4};Encoding=Unicode;",
|
||||
Host, Port, Dbname, Dbuser, Password); } }
|
||||
Host, Port, DbName, DbUser, Password); } }
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ using System.Configuration;
|
||||
using System.Collections.Generic;
|
||||
using Yavsc.Model.Blogs;
|
||||
using System.Linq;
|
||||
using Yavsc.Model.Circles;
|
||||
|
||||
namespace Yavsc.Model.Blogs
|
||||
{
|
||||
@ -56,7 +57,25 @@ namespace Yavsc.Model.Blogs
|
||||
{
|
||||
return this.Where (x => x.Title == title).ToArray ();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Filters the current collection for a given user by its name.
|
||||
/// Assumes that this user is not an author of any of these posts.
|
||||
/// </summary>
|
||||
/// <param name="username">Username.</param>
|
||||
public BlogEntryCollection FilterFor(string username)
|
||||
{
|
||||
BlogEntryCollection res = new BlogEntryCollection ();
|
||||
foreach (BlogEntry be in this) {
|
||||
if (be.Visible &&
|
||||
(be.AllowedCircles == null ||
|
||||
(username!= null && CircleManager.DefaultProvider.Matches
|
||||
(be.AllowedCircles,username))))
|
||||
{
|
||||
res.Add(be);
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
/// <summary>
|
||||
/// Base post info.
|
||||
/// </summary>
|
||||
|
@ -1,321 +0,0 @@
|
||||
2015-10-09 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* LocalizedText.resx:
|
||||
* LocalizedText.fr.resx:
|
||||
* LocalizedText.Designer.cs:
|
||||
* LocalizedText.fr.Designer.cs: a new translation
|
||||
|
||||
2015-10-08 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* BlogEntry.cs: defines the photo in the model
|
||||
|
||||
* BlogManager.cs: a new method to set the photo on a blog
|
||||
post.
|
||||
|
||||
* BlogProvider.cs: the blog provider now also gives some photo
|
||||
|
||||
* LocalizedText.fr.Designer.cs: Reordering the french
|
||||
localisation resource
|
||||
|
||||
* LocalizedText.fr.resx: Reorders the french localisation
|
||||
resource
|
||||
|
||||
2015-10-04 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* MarkdownHelper.cs:
|
||||
* BlogEntryCollection.cs: refactoring + extract an intro from
|
||||
Markdown for PostInfo*
|
||||
|
||||
* YavscModel.csproj: MarkdownHelper integration
|
||||
|
||||
2015-10-01 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* Profile.cs: refactoring
|
||||
|
||||
2015-09-30 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* Profile.cs: Groups profile properties
|
||||
|
||||
* ChangeLog: Must not exist in the source tree
|
||||
|
||||
2015-09-30 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* Profile.cs: Grouping profile properties
|
||||
|
||||
2015-09-23 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* BlogEntry.cs:
|
||||
* BlogManager.cs:
|
||||
* BlogEntryCollection.cs:
|
||||
* UUBlogEntryCollection.cs:
|
||||
* UUTBlogEntryCollection.cs: refactoring
|
||||
|
||||
2015-09-16 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* LocalizedText.resx:
|
||||
* LocalizedText.fr.resx:
|
||||
* LocalizedText.Designer.cs:
|
||||
* LocalizedText.fr.Designer.cs:
|
||||
|
||||
2015-09-11 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* BlogManager.cs: Any user may edit any title
|
||||
|
||||
2015-09-10 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* CircleBase.cs:
|
||||
|
||||
2015-09-10 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* CircleBase.cs: The Circle base
|
||||
|
||||
* Circle.cs: Now inherits CircleBase to implement a member
|
||||
list
|
||||
|
||||
* CircleProvider.cs: implements a circle update method
|
||||
|
||||
|
||||
* LocalizedText.resx:
|
||||
* LocalizedText.Designer.cs: no content!!!
|
||||
|
||||
* LocalizedText.fr.resx:
|
||||
* LocalizedText.fr.Designer.cs: pas content
|
||||
|
||||
* YavscModel.csproj: a new CircleBAse class
|
||||
|
||||
2015-08-22 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* LocalizedText.Designer.cs: alphabetic order in ressource
|
||||
names
|
||||
|
||||
* LocalizedText.resx: * alphabetic order in ressource names
|
||||
|
||||
* RegisterModel.cs: disposes a duplicated resource string
|
||||
"UserName" (uses now User_name)
|
||||
|
||||
2015-08-20 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* BlogEntryCollection.cs: cleans used code
|
||||
|
||||
2015-08-20 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* BlogEntryCollection.cs: ConcernsAUniqueTitle and
|
||||
ConcernsAUniqueUser are now Obsoletes
|
||||
|
||||
* UUTBlogEntryCollection.cs: Drops a useless ctor
|
||||
|
||||
* CircleProvider.cs: The `CircleManager` now delivers the
|
||||
user's circle as a `Circle` object collection.
|
||||
|
||||
2015-08-14 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* FileSystemManager.cs: * Fixes the dir separator usage
|
||||
* Adds a method to validate a directory or file name
|
||||
|
||||
* YavscModel.csproj:
|
||||
* Commande.cs: FileInfoCollection is now removed
|
||||
|
||||
* FileInfoCollection.cs:
|
||||
* DirNotFoundException.cs: Removes useless code
|
||||
|
||||
2015-08-05 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* BlogEntryCollection.cs: adds xml doc
|
||||
|
||||
* UUBlogEntryCollection.cs:
|
||||
* UUTBlogEntryCollection.cs: fixes a creation from a post
|
||||
array
|
||||
|
||||
2015-08-05 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* BlogManager.cs: fixes the comment posting
|
||||
|
||||
2015-08-04 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* BlogEntryCollection.cs: implement the BlogEntryCollection
|
||||
|
||||
* BlogManager.cs: the manager helps to filter on access
|
||||
|
||||
* BlogProvider.cs: The title is not unique anymore, and one
|
||||
can modify it, post a lot under it, drop all posts under it.
|
||||
A Post is deleted by id.
|
||||
|
||||
* UUBlogEntryCollection.cs: implements a collection of post
|
||||
under a given user name.
|
||||
|
||||
* UUTBlogEntryCollection.cs: implements a collection of post
|
||||
under a given couple (user name, title).
|
||||
|
||||
* IDbModule.cs:
|
||||
* WorkFlowManager.cs: refactoring
|
||||
|
||||
* ListItem.cs: ListItem is declared obsolete in this model,
|
||||
helpers can build MVC SelectListItem on data returned by the
|
||||
manager.
|
||||
|
||||
* LocalizedText.Designer.cs:
|
||||
* LocalizedText.fr.Designer.cs: autogenerated from xml
|
||||
|
||||
* LocalizedText.resx:
|
||||
* LocalizedText.fr.resx: new labels
|
||||
|
||||
* ChangeUserNameProvider.cs: xml doc
|
||||
|
||||
* Profile.cs: the UserName property is read only, and comes
|
||||
from authentication, to change it, we set a Name and validate
|
||||
it agains the "Profile" method
|
||||
|
||||
|
||||
* UserManager.cs: simpler code a init time
|
||||
|
||||
* IContentProvider.cs: implements the new IDataProvider
|
||||
interface
|
||||
|
||||
* IDataProvider.cs: defines the new IDataProvider interface
|
||||
|
||||
* YavscModel.csproj: includes new classes
|
||||
|
||||
2015-07-17 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* YavscModel.csproj:
|
||||
* Automate.cs:
|
||||
* TaskOutput.cs:
|
||||
* Service.cs:
|
||||
* FinalStateException.cs:
|
||||
* InvalidLetterException.cs:
|
||||
* PriceOnItemCount.cs:
|
||||
|
||||
2015-07-15 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* ListItem.cs:
|
||||
* Circle.cs:
|
||||
* BlogHelper.cs:
|
||||
* BlogManager.cs:
|
||||
* BookEdit.cs:
|
||||
* FreeDate.cs:
|
||||
* BlogProvider.cs:
|
||||
|
||||
* YavscModel.csproj: Moves to Mono framework
|
||||
|
||||
2015-07-02 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* ListItem.cs:
|
||||
* YavscModel.csproj:
|
||||
* BlogEntry.cs:
|
||||
* BlogManager.cs:
|
||||
* BlogProvider.cs:
|
||||
* CircleManager.cs:
|
||||
* CircleProvider.cs:
|
||||
* SimpleMessage.cs:
|
||||
|
||||
2015-06-26 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* Period.cs:
|
||||
* WeekDay.cs:
|
||||
* OpenDay.cs:
|
||||
* YaEvent.cs:
|
||||
* Schedule.cs:
|
||||
* EventPub.cs:
|
||||
* Position.cs:
|
||||
* Periodicity.cs:
|
||||
* ProvidedEvent.cs:
|
||||
* PositionAndKeyphrase.cs:
|
||||
* ProviderPublicInfo.cs: refactoring
|
||||
|
||||
2015-06-18 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* RegisterClientModel.cs: Implements the Question and answer
|
||||
in the registration model
|
||||
|
||||
2015-06-18 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* YavscModel.csproj:
|
||||
* LocalizedText.resx:
|
||||
* LocalizedText.fr.resx:
|
||||
* LocalizedText.Designer.cs:
|
||||
* Profile.cs:
|
||||
* Profile.cs:
|
||||
* LocalizedText.fr.Designer.cs:
|
||||
* LoginModel.cs:
|
||||
* Publishing.cs:
|
||||
* LoginModel.cs:
|
||||
* Publishing.cs:
|
||||
* GCMRegister.cs:
|
||||
* NewRoleModel.cs:
|
||||
* GCMRegister.cs:
|
||||
* NewRoleModel.cs:
|
||||
* NewAdminModel.cs:
|
||||
* RegisterModel.cs:
|
||||
* NewAdminModel.cs:
|
||||
* RegisterModel.cs:
|
||||
* RegisterViewModel.cs:
|
||||
* LostPasswordModel.cs:
|
||||
* ProviderPublicInfo.cs:
|
||||
* RegisterViewModel.cs:
|
||||
* ProviderPublicInfo.cs:
|
||||
* ChangePasswordModel.cs:
|
||||
* RegisterClientModel.cs:
|
||||
* RegisterClientModel.cs:
|
||||
* ChangePasswordModel.cs:
|
||||
|
||||
2015-06-12 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* YavscModel.csproj:
|
||||
* BlogHelper.cs:
|
||||
* CircleManager.cs:
|
||||
* WorkFlowManager.cs:
|
||||
* NewEstimateEvenArgs.cs:
|
||||
* Provider.cs:
|
||||
* DataProviderConfigurationSection.cs:
|
||||
* ProviderCollection.cs:
|
||||
* WorkflowConfiguration.cs:
|
||||
* BlogProviderConfigurationElement.cs:
|
||||
* BlogProvidersConfigurationSection.cs:
|
||||
* BlogProvidersConfigurationCollection.cs:
|
||||
* CatalogProvidersConfigurationSection.cs:
|
||||
|
||||
2015-06-10 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* Circle.cs: refactoring
|
||||
|
||||
* CircleInfo.cs:
|
||||
* CircleProvider.cs:
|
||||
|
||||
* Profile.cs: User's profile does not contain anymore the main
|
||||
e-mail address, it conflicts with registration informations,
|
||||
it is not part of the profile data
|
||||
|
||||
2015-06-10 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* CircleManager.cs: initializes the default provider
|
||||
|
||||
* CircleProvider.cs: Makes abstract the CircleProvider class
|
||||
|
||||
2015-06-10 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* Circle.cs:
|
||||
* CircleInfo.cs:
|
||||
* CircleInfoCollection.cs: cleans imports
|
||||
|
||||
* CircleManager.cs: implements a circle manager
|
||||
|
||||
* CircleProvider.cs: Defines a default Circle provider
|
||||
|
||||
* EventPub.cs: refactoring
|
||||
|
||||
* YavscModel.csproj: Includes Circle provider definitions
|
||||
|
||||
2015-06-09 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* LocalizedText.resx:
|
||||
* LocalizedText.Designer.cs:
|
||||
* LocalizedText.fr.Designer.cs:
|
||||
|
||||
* LocalizedText.fr.resx: Page Title
|
||||
|
||||
2015-06-09 Paul Schneider <paul@pschneider.fr>
|
||||
|
||||
* YavscModel.csproj:
|
||||
* BlogEditEntryModel.cs:
|
||||
* BlogEditCommentModel.cs:
|
||||
|
@ -1,7 +1,7 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
|
||||
namespace Yavsc.Admin
|
||||
namespace Yavsc.Model.Admin
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
|
Reference in New Issue
Block a user