le theme, WIP les cercles

* input.css: refabrication des feuilles de style : la feuille des
  champs de formulaire.

* CircleMember.cs: un membre de cercle est un nom d'utilisateur
  associé au cercle d'un autre utilisateur.

* ICircle.cs: Définit l'interface d'un cercle:
un cercle est identifié par un entier long,
il a un possesseur.

* Makefile: utilise le fichier de conf généré pour débugger.

* NpgsqlContentProvider.cs: bug fix

* README.md: maj priorités

* AccountController.cs: implémente une méthode de l'API pour ajouter
  un utilisateur au cercle

* links.css: Corrige la couleur du boutton de validation des
  formulaire de classe `ActionLink`

* style.css: refabrication: importe la nouvelle feuille de style des
  champs de formulaires

* style.css: nettoyage du thème sombre

* style.css: nettoyage + section principale (`main`) centré

* FrontOfficeController.cs: Repositionne la route vers le devis à
  do/Estimate

* YavscHelpers.cs: corrige ma ré-écriture des helpers html ActionLink

* App.master: formattage du code source

* AppAdmin.master: synchronisation avec la page maître,
beaucoup de changements dans cette page maître pour les
  administrateurs:
* prend en charge les côtes d'article
* utilise les fontes de caractère de la page pour les lien action
* prend en charge les zones de formulaire masquable.

* NoLogin.master: synchronisation avec la page maître

* Performer.ascx: WIP permet d'ajouter un préstataire à un de ses
  cercles.

* YourEstimates.aspx: corrige un lien cassé

* Yavsc.csproj: mise à niveau Npgsql,
renommage Estimate

* packages.config: mise à niveau de la bibliothèque Npgsql (pilote
  d'accès à la base de donnée)

* CircleBase.cs: un objet cercle basique implémente l'interface d'un
  cercle.

* PerformerProfile.cs: s'assure que le nom d'utilisateur utilisé n'est
  pas vide.

* IIdentified.cs: doc xml

* UserNameBase.cs: l'objet base de type "nom d'utilisateur" implémente
  l'interface générique
d'un identifié, par une chaine de caractère.

* YavscModel.csproj: reference les nouvelles definitions :
* un membre de cercle
* l'interface d'un cercle

* MainClass.cs: format du code

* YavscClient.csproj:
* Estimate.aspx: refabrication
vnext
Paul Schneider 9 years ago
parent d999ae5a8e
commit 58839ab69c
33 changed files with 343 additions and 121 deletions

@ -1,3 +1,9 @@
2015-12-15 Paul Schneider <paul@pschneider.fr>
* Makefile: utilise le fichier de conf généré pour débugger.
* README.md: maj priorités
2015-12-09 Paul Schneider <paul@pschneider.fr> 2015-12-09 Paul Schneider <paul@pschneider.fr>
* README.md: mise à jour des priorités * README.md: mise à jour des priorités

@ -76,7 +76,12 @@ distclean: clean
sourcepkg: sourcepkg:
git archive --format=tar --prefix=yavsc-$(CONFIG)/ $(CONFIG) | bzip2 > yavsc-$(CONFIG).tar.bz2 git archive --format=tar --prefix=yavsc-$(CONFIG)/ $(CONFIG) | bzip2 > yavsc-$(CONFIG).tar.bz2
start_xsp: build dist/web/$(CONFIG)/Web.config: deploy
web/Web.config: dist/web/$(CONFIG)/Web.config
cp dist/web/$(CONFIG)/Web.config web
start_xsp: build web/Web.config
(cd web; export MONO_OPTIONS=--debug; xsp4 --port 8080) (cd web; export MONO_OPTIONS=--debug; xsp4 --port 8080)
xmldoc: $(patsubst %,web/bin/%,$(DOCASSBS)) xmldoc: $(patsubst %,web/bin/%,$(DOCASSBS))

@ -1,3 +1,7 @@
2015-12-15 Paul Schneider <paul@pschneider.fr>
* NpgsqlContentProvider.cs: bug fix
2015-12-09 Paul Schneider <paul@pschneider.fr> 2015-12-09 Paul Schneider <paul@pschneider.fr>
* NpgsqlCircleProvider.cs: liste les cercles auquels * NpgsqlCircleProvider.cs: liste les cercles auquels

@ -50,9 +50,8 @@ namespace Yavsc
using (var rdr = cmd.ExecuteReader ()) { using (var rdr = cmd.ExecuteReader ()) {
if (rdr.HasRows) { if (rdr.HasRows) {
while (rdr.Read ()) { while (rdr.Read ()) {
var profile = new PerformerProfile (); var profile = new PerformerProfile (rdr.GetString (1));
profile.Id = rdr.GetInt64 (0); profile.Id = rdr.GetInt64 (0);
profile.UserName = rdr.GetString (1);
profile.EMail = rdr.GetString (2); profile.EMail = rdr.GetString (2);
profile.MEACode = MEACode; profile.MEACode = MEACode;
profile.Rate = rdr.GetInt32 (3); profile.Rate = rdr.GetInt32 (3);

@ -7,8 +7,8 @@ yavsc
-1) Messagerie instantanée : choisir entre directement Google Hangouts API, -1) Messagerie instantanée : choisir entre directement Google Hangouts API,
SIP, ou Signal R custom SIP, ou Signal R custom
0) Bug fixes :
0) Fixer l'edition de la côte zéro. (y en a 6, ou onze avec les moitiés, pas cinq (ni dix avec les moitiés)) stocker le token calendar à part
1) Créer un contrôle "bouton utilisateur" `UserNameControl` 1) Créer un contrôle "bouton utilisateur" `UserNameControl`
avec avec
@ -18,10 +18,6 @@ yavsc
* Si c'est un préstataire, et si on est pas déjà dans un formulaire de reservation, * Si c'est un préstataire, et si on est pas déjà dans un formulaire de reservation,
un lien vers la reservation de ses services un lien vers la reservation de ses services
1.1) Donner des descriptions textuelles au cotes (ex: dans le cadre d'un prestataire, ses 5 cotes seraient
par exemple "Nouvelle star" "Artiste local" "Artiste régional" "Star nationale" "Star internationale"
1.2) Concevoir un objet Contact listant les point d'accès par protocol (email, http, sip, irc, téléphone, adresse postale ...) 1.2) Concevoir un objet Contact listant les point d'accès par protocol (email, http, sip, irc, téléphone, adresse postale ...)
2) Refabrication de l'Api : 2) Refabrication de l'Api :
@ -42,7 +38,6 @@ par exemple "Nouvelle star" "Artiste local" "Artiste régional" "Star nationale"
seules les propriétés spécifiées non nulles sont mises à jour seules les propriétés spécifiées non nulles sont mises à jour
(NDLR:la visibilité est donc par exemple toujours mis à jour). (NDLR:la visibilité est donc par exemple toujours mis à jour).
3) Corriger un peu le thème clair (fond de titres trop sombre)
4) Terminer l'édition du profile de site, avec la modification 4) Terminer l'édition du profile de site, avec la modification
et la suppression des activités et compétences et la suppression des activités et compétences

@ -132,5 +132,13 @@ namespace Yavsc.ApiControllers
new string [] { model.Role } ); new string [] { model.Role } );
} }
[ValidateAjax]
[Authorize()]
public void AddUserToCircle(UserRole model)
{
if (ModelState.IsValid)
Roles.AddUserToRole (model.UserName,
model.Role );
}
} }
} }

@ -0,0 +1,19 @@

input, textarea, checkbox {
color: black;
background-color: white;
font-size: larger;
border: solid 1px rgb(128,128,128);
animation-name: flash;
animation-duration: 1s;
animation-iteration-count: 1;
}
input:hover, textarea:hover {
color: black;
background-color: rgba(256,256,256,.8);
}
.input-validation-error { border: solid 1px red; }
.field-validation-error { color: red; }

@ -1,5 +1,4 @@
 
a, .actionlink { a, .actionlink {
z-index: 1; z-index: 1;
color: white; color: white;
@ -10,18 +9,24 @@ a, .actionlink {
position: relative; position: relative;
transition: color 1s; transition: color 1s;
} }
/* inputs have a white background in this theme */
input.actionlink
{
color: black;
}
a:visited { color: white; } a:visited { color: white; }
/* inverse the font color, as long as a black one
is rolling out in backgound */
a:hover, a:visited:hover, .actionlink:hover { a:hover, a:visited:hover, .actionlink:hover {
color:black; color:black;
} }
@media print { @media print {
.actionlink, .menuitem { display:none;} .actionlink, .menuitem { display:none;}
} }
/* button dark background */
div.bback { div.bback {
position: absolute; position: absolute;
top: 0; top: 0;
@ -29,10 +34,9 @@ div.bback {
width:100%; width:100%;
height:100%; height:100%;
z-index: -2; z-index: -2;
background-color: rgba(32,32,32,.2); background-color: rgba(32,32,32,.3);
} }
/* button white animated */
div.aback { div.aback {
transform: scaleX(0); transform: scaleX(0);
transform-origin: 0px 50% 0px; transform-origin: 0px 50% 0px;

@ -1,6 +1,6 @@
@import url(http://fonts.googleapis.com/css?family=Josefin+Sans&subset=latin,latin-ext); @import url(http://fonts.googleapis.com/css?family=Josefin+Sans&subset=latin,latin-ext);
@import url(/App_Themes/clear/links.css); @import url(/App_Themes/clear/links.css);
@import url(/App_Themes/clear/input.css);
body { body {
background-color: white; background-color: white;
color: black; color: black;
@ -23,15 +23,7 @@ body {
no-repeat; no-repeat;
} }
input, textarea, checkbox {
color: black;
background-color: white;
font-size: larger;
border: solid 1px rgb(128,128,128);
animation-name: flash;
animation-duration: 1s;
animation-iteration-count: 1;
}
header { float: left; } header { float: left; }
@ -137,18 +129,11 @@ a:active {
background-color:rgba(184,180,132,0.9); background-color:rgba(184,180,132,0.9);
} }
input:hover, textarea:hover {
color: black;
background-color: rgba(256,256,256,.8);
}
.code { .code {
background-color: rgba(230,230,230,0.5); background-color: rgba(230,230,230,0.5);
} }
.input-validation-error { border: solid 1px red; }
.field-validation-error { color: red; }
@media all and (max-width: 640px) { @media all and (max-width: 640px) {

@ -1,22 +1,6 @@
@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,600,700); @import url(https://fonts.googleapis.com/css?family=Open+Sans:400,600,700);
@import url(/App_Themes/dark/links.css); @import url(/App_Themes/dark/links.css);
.panel {
display:inline-block;
width: calc(33% - 10px);
}
@media all and (max-width: 1200px) {
.panel {
width: calc(50% - 5px);
}
}
@media all and (max-width: 720px) {
.panel {
width: 100%;
}
}
.skillname { .skillname {
background-color: rgba(16,16,64,0.8); background-color: rgba(16,16,64,0.8);
border-color: #aaf; border-color: #aaf;
@ -28,7 +12,6 @@ body {
color: #D0FFD0; color: #D0FFD0;
} }
.rate { .rate {
border: solid rgb(128,128,0) 1px; border: solid rgb(128,128,0) 1px;
background-color: rgba(20,20,20,.8); background-color: rgba(20,20,20,.8);
@ -215,7 +198,6 @@ header h1, header a , .actionlink, .menuitem, a { padding:.5em;}
padding:.3em; padding:.3em;
} }
.bshpanel { cursor:zoom-in; }
.c2 { display:initial; } .c2 { display:initial; }
.c2-alt { display:none; } .c2-alt { display:none; }

@ -43,6 +43,7 @@ main {
margin: 2em; margin: 2em;
padding: 2em; padding: 2em;
display: block; display: block;
text-align: center;
} }
main video, main img { main video, main img {
max-width:100%; max-width:100%;
@ -352,7 +353,6 @@ div.panel {
.usertitleref{ .usertitleref{
padding:.3em; padding:.3em;
} }
.bshpanel { cursor:zoom-in; }
.c2 { display:initial; } .c2 { display:initial; }
.c2-alt { display:none; } .c2-alt { display:none; }

@ -1,3 +1,54 @@
2015-12-15 Paul Schneider <paul@pschneider.fr>
* input.css: refabrication des feuilles de style : la feuille
des champs de formulaire.
* AccountController.cs: implémente une méthode de l'API pour
ajouter un utilisateur au cercle
* links.css: Corrige la couleur du boutton de validation des
formulaire de classe `ActionLink`
* style.css: refabrication: importe la nouvelle feuille de
style des champs de formulaires
* style.css: nettoyage du thème sombre
* style.css: nettoyage + section principale (`main`) centré
* FrontOfficeController.cs: Repositionne la route vers le
devis à do/Estimate
* YavscHelpers.cs: corrige ma ré-écriture des helpers html
ActionLink
* App.master: formattage du code source
* AppAdmin.master: synchronisation avec la page maître,
beaucoup de changements dans cette page maître pour les
administrateurs:
* prend en charge les côtes d'article
* utilise les fontes de caractère de la page pour les lien
action
* prend en charge les zones de formulaire masquable.
* NoLogin.master: synchronisation avec la page maître
* Performer.ascx: WIP permet d'ajouter un préstataire à un de
ses cercles.
* YourEstimates.aspx: corrige un lien cassé
* Yavsc.csproj: mise à niveau Npgsql,
renommage Estimate
* packages.config: mise à niveau de la bibliothèque Npgsql
(pilote d'accès à la base de donnée)
* Estimate.aspx: refabrication
2015-12-09 Paul Schneider <paul@pschneider.fr> 2015-12-09 Paul Schneider <paul@pschneider.fr>
* animate.css: animations css * animate.css: animations css

@ -95,7 +95,7 @@ namespace Yavsc.Controllers
/// <param name="model">Model.</param> /// <param name="model">Model.</param>
/// <param name="submit">Submit.</param> /// <param name="submit">Submit.</param>
[Authorize] [Authorize]
public ActionResult DoAnEstimate (Estimate model, string submit) public ActionResult Estimate (Estimate model, string submit)
{ {
string username = Membership.GetUser ().UserName; string username = Membership.GetUser ().UserName;
// Obsolete, set in master page // Obsolete, set in master page

@ -422,6 +422,7 @@ namespace Yavsc.Helpers
string actionLabel, object htmlAttributes = null) { string actionLabel, object htmlAttributes = null) {
return TranslatedActionLink (helper, actionLabel, actionLabel, htmlAttributes); return TranslatedActionLink (helper, actionLabel, actionLabel, htmlAttributes);
} }
/// <summary> /// <summary>
/// Translateds the action link. /// Translateds the action link.
/// </summary> /// </summary>
@ -431,10 +432,13 @@ namespace Yavsc.Helpers
/// <param name="method">Method.</param> /// <param name="method">Method.</param>
/// <param name="htmlAttributes">Html attributes.</param> /// <param name="htmlAttributes">Html attributes.</param>
public static IHtmlString TranslatedActionLink (this HtmlHelper helper, public static IHtmlString TranslatedActionLink (this HtmlHelper helper,
string actionLabel, string method, object htmlAttributes = null) { string actionName, string method, object routes, object htmlAttributes = null) {
return TranslatedActionLink (helper,
actionLabel, method, null, htmlAttributes = null);
string controllerName = helper.ViewContext.Controller.GetType ().Name;
if (controllerName.EndsWith ("Controller"))
controllerName = controllerName.Substring (0,controllerName.Length - 10);
return TranslatedActionLink (helper, actionName, method,
controllerName, routes, htmlAttributes);
} }
/// <summary> /// <summary>
/// Translateds the action link. /// Translateds the action link.
@ -447,6 +451,11 @@ namespace Yavsc.Helpers
/// <param name="htmlAttributes">Html attributes.</param> /// <param name="htmlAttributes">Html attributes.</param>
public static IHtmlString TranslatedActionLink (this HtmlHelper helper, public static IHtmlString TranslatedActionLink (this HtmlHelper helper,
string actionLabel, string method, string controller, object htmlAttributes = null) { string actionLabel, string method, string controller, object htmlAttributes = null) {
string controllerName = helper.ViewContext.Controller.GetType ().Name;
if (controllerName.EndsWith ("Controller"))
controllerName = controllerName.Substring (0,controllerName.Length - 10);
if (controller == null)
controller = controllerName;
return TranslatedActionLink (helper, actionLabel, method, controller, return TranslatedActionLink (helper, actionLabel, method, controller,
new { controller = controller, action = actionLabel }, htmlAttributes); new { controller = controller, action = actionLabel }, htmlAttributes);
} }
@ -491,15 +500,7 @@ namespace Yavsc.Helpers
} }
public static IHtmlString TranslatedActionLink (this HtmlHelper helper,
string actionName, string method, object routes, object htmlAttributes = null) {
string controllerName = helper.ViewContext.Controller.GetType ().Name;
if (controllerName.EndsWith ("Controller"))
controllerName = controllerName.Substring (0,controllerName.Length - 10);
return TranslatedActionLink (helper, actionName, method,
controllerName, routes, htmlAttributes);
}

@ -36,7 +36,6 @@ var apiBaseUrl = '<%=Url.Content(Yavsc.WebApiConfig.UrlPrefixRelative)%>';
</asp:ContentPlaceHolder> </asp:ContentPlaceHolder>
</head> </head>
<body> <body>
<header > <header >
<asp:ContentPlaceHolder ID="overHeaderOne" runat="server"> <asp:ContentPlaceHolder ID="overHeaderOne" runat="server">
<h1> <h1>
@ -101,7 +100,7 @@ Vos billets
$(document).ready(function() { $(document).ready(function() {
$('fieldset.mayhide').hidefieldset(); $('fieldset.mayhide').hidefieldset();
$( "a" ).append("<div class='aback'></div>").append("<div class='bback'></div>"); $( "a" ).append("<div class='aback'></div>").append("<div class='bback'></div>");
}); });
</script> </script>
</body> </body>
</html> </html>

@ -1,4 +1,4 @@
<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %> <%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" EnableTheming="true"%>
<!DOCTYPE html> <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"> <html xmlns="http://www.w3.org/1999/xhtml">
<% ViewState["orgtitle"] = Html.Translate(Page.Title); %> <% ViewState["orgtitle"] = Html.Translate(Page.Title); %>
@ -23,18 +23,23 @@ Page.StyleSheetTheme = (string) Profile.UITheme; %>
<script src="<%=Url.Content("~/Scripts/Prettify/run_prettify.js")%>"></script> <script src="<%=Url.Content("~/Scripts/Prettify/run_prettify.js")%>"></script>
<script type="text/javascript"> <script type="text/javascript">
var apiBaseUrl = '<%=Url.Content(Yavsc.WebApiConfig.UrlPrefixRelative)%>'; var apiBaseUrl = '<%=Url.Content(Yavsc.WebApiConfig.UrlPrefixRelative)%>';
$(document).ready(function(){
$('[data-type="rate-bill"]').rate({webTarget: 'Blogs/Rate'});
});
</script> </script>
<%=Ajax.YaGlobalizationScript()%>
<script src="<%=Url.Content("~/Scripts/yavsc.js")%>"></script> <script src="<%=Url.Content("~/Scripts/yavsc.js")%>"></script>
<script src="<%=Url.Content("~/Scripts/yavsc.tags.js")%>"></script> <script src="<%=Url.Content("~/Scripts/yavsc.tags.js")%>"></script>
<script src="<%=Url.Content("~/Scripts/yavsc.rate.js")%>"></script> <script src="<%=Url.Content("~/Scripts/yavsc.rate.js")%>"></script>
<script src="<%=Url.Content("~/Scripts/yavsc.hidefieldset.js")%>"></script>
<asp:ContentPlaceHolder id="head" runat="server"> <asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder> </asp:ContentPlaceHolder>
</head> </head>
<body> <body>
<header data-type="background" data-speed="8" > <header >
<asp:ContentPlaceHolder ID="overHeaderOne" runat="server"> <asp:ContentPlaceHolder ID="overHeaderOne" runat="server">
<h1><a href="<%= Url.RouteUrl("Default") %>"> <h1>
<%=ViewState["orgtitle"]%></a> <%=ViewState["orgtitle"]%>
- <a href="<%= Url.RouteUrl("Default", new {controller = "Home" , action = "Index" }) %>"><%= YavscHelpers.SiteName %></a> - <a href="<%= Url.RouteUrl("Default", new {controller = "Home" , action = "Index" }) %>"><%= YavscHelpers.SiteName %></a>
</h1> </h1>
</asp:ContentPlaceHolder> </asp:ContentPlaceHolder>
@ -51,10 +56,10 @@ else {%> Yavsc.notice(<%=note.body%>, <%=note.click_action%>, <%=note.click_acti
</script> </script>
<% } %> <% } %>
</header> </header>
<nav data-type="background" data-speed="5"> <nav >
<% if (Membership.GetUser()==null) { %> <% if (Membership.GetUser()==null) { %>
<a href="<%= Url.RouteUrl("Default", new { controller = "Account", action = "Login", returnUrl=Request.Url.PathAndQuery}) %>" class="menuitem" accesskey = "C"> <a href="<%= Url.RouteUrl("Default", new { controller = "Account", action = "Login", returnUrl=Request.Url.PathAndQuery}) %>" class="link" accesskey = "C">
<i class="fa fa-sign-in">Connexion</i> <i class="fa fa-sign-in"></i> Connexion
</a> </a>
<% } else { %> <% } else { %>
<ul> <ul>
@ -68,38 +73,45 @@ else {%> Yavsc.notice(<%=note.body%>, <%=note.click_action%>, <%=note.click_acti
<li><%= Html.TranslatedActionLink("Role list", "RoleList") %></li> <li><%= Html.TranslatedActionLink("Role list", "RoleList") %></li>
</ul> </ul>
<a href="<%=Url.RouteUrl("Blogs", new { user = HttpContext.Current.User.Identity.Name } )%>" accesskey = "B" class="menuitem" > <a href="<%=Url.RouteUrl("Blogs", new { user = HttpContext.Current.User.Identity.Name } )%>" accesskey = "B" class="link" >
<img src="<%=Url.AvatarUrl(HttpContext.Current.User.Identity.Name)%>" alt="vos billets" class="iconsmall" /> <img src="<%=Url.AvatarUrl(HttpContext.Current.User.Identity.Name)%>" alt="" class="iconsmall" />
<span class="hint">Vos billets</span> Vos billets
</a> </a>
<a href="<%= Url.RouteUrl("Default", new { controller = "Account", action = "Profile", id = HttpContext.Current.User.Identity.Name} ) %>" accesskey="P" class="menuitem fa fa-user"> <a href="<%= Url.RouteUrl("Default", new { controller = "Account", action = "Profile", id = HttpContext.Current.User.Identity.Name} ) %>" accesskey="P" class="link ">
<i class="fa fa-user"></i>
<%= HttpContext.Current.User.Identity.Name %> <%= HttpContext.Current.User.Identity.Name %>
<span class="hint"> &Eacute;dition de votre profile </span> <span class="hint"> &Eacute;dition de votre profile </span>
</a> </a>
<a href="/Blogs/Post" accesskey="P" class="menuitem fa fa-pencil"> <a href="/Blogs/Post" accesskey="P" class="link">
<i class="fa fa-pencil"></i>
<u>P</u>oster <u>P</u>oster
<span class="hint">&Eacute;dition d'un nouveau billet </span> <span class="hint">&Eacute;dition d'un nouveau billet </span>
</a> </a>
<a href="<%= Url.RouteUrl("Default", new { controller = "Account", action = "Logout", returnUrl=Request.Url.PathAndQuery}) %>" accesskey = "C" class="menuitem fa fa-sign-out"> <a href="<%= Url.RouteUrl("Default", new { controller = "Account", action = "Logout", returnUrl=Request.Url.PathAndQuery}) %>" accesskey = "C" class="link">
<i class="fa fa-sign-out"></i>
<%=Html.Translate("Logout")%></a> <%=Html.Translate("Logout")%></a>
<% } %> <% } %>
</nav> </nav>
<main data-type="background" data-speed="10" data-emheight="10" data-posx="0" data-posy="22" > <main>
<asp:ContentPlaceHolder ID="MainContent" runat="server"> <asp:ContentPlaceHolder ID="MainContent" runat="server">
</asp:ContentPlaceHolder> </asp:ContentPlaceHolder>
</main> </main>
<footer data-type="background" data-speed="5" > <footer>
<%= Html.TranslatedActionLink("Formulaire de contact","Contact","Home",null, new { @class="thanks" }) %>
<div id="copyr"> <div id="copyr">
<a href="http://yavsc.pschneider.fr/Blogs/UserPost/paul/License">© 2015 GNU GENERAL PUBLIC LICENSE <i>Version 3, 29 June 2007</i></a> <a href="http://yavsc.pschneider.fr/Blogs/UserPost/paul/License">
<%=Html.Encode("© 2015 GNU GENERAL PUBLIC LICENSE")%> <i>Version 3, 29 June 2007</i></a>
</div> </div>
<%= Html.TranslatedActionLink("Formulaire de contact","Contact","Home",null, new { @class="thanks" }) %>
<% foreach ( Link link in Html.Thanks()) { %>
<a class="thanks" href="<%=link.Url%>"><% if (link.Image !=null) {
%><img src="<%= link.Image %>" alt="<%= link.Text %>"/></a>
<% } else { %>
<a class="thanks" href="<%=link.Url%>"><%= link.Text %></a>
<% }} %>
</footer><div class="modal"></div> </footer><div class="modal"></div>
<script>
$(document).ready(function() {
$('fieldset.mayhide').hidefieldset();
$( "a" ).append("<div class='aback'></div>").append("<div class='bback'></div>");
});
</script>
</body> </body>
</html> </html>

@ -1,4 +1,4 @@
<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %> <%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" EnableTheming="true"%>
<!DOCTYPE html> <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"> <html xmlns="http://www.w3.org/1999/xhtml">
<% ViewState["orgtitle"] = Html.Translate(Page.Title); %> <% ViewState["orgtitle"] = Html.Translate(Page.Title); %>
@ -27,18 +27,19 @@ var apiBaseUrl = '<%=Url.Content(Yavsc.WebApiConfig.UrlPrefixRelative)%>';
$('[data-type="rate-bill"]').rate({webTarget: 'Blogs/Rate'}); $('[data-type="rate-bill"]').rate({webTarget: 'Blogs/Rate'});
}); });
</script> </script>
<%=Ajax.GlobalizationScript()%> <%=Ajax.YaGlobalizationScript()%>
<script src="<%=Url.Content("~/Scripts/yavsc.js")%>"></script> <script src="<%=Url.Content("~/Scripts/yavsc.js")%>"></script>
<script src="<%=Url.Content("~/Scripts/yavsc.tags.js")%>"></script> <script src="<%=Url.Content("~/Scripts/yavsc.tags.js")%>"></script>
<script src="<%=Url.Content("~/Scripts/yavsc.rate.js")%>"></script> <script src="<%=Url.Content("~/Scripts/yavsc.rate.js")%>"></script>
<script src="<%=Url.Content("~/Scripts/yavsc.hidefieldset.js")%>"></script>
<asp:ContentPlaceHolder id="head" runat="server"> <asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder> </asp:ContentPlaceHolder>
</head> </head>
<body> <body>
<header data-type="background" data-speed="8" > <header >
<asp:ContentPlaceHolder ID="overHeaderOne" runat="server"> <asp:ContentPlaceHolder ID="overHeaderOne" runat="server">
<h1><a href="<%= Url.RouteUrl("Default") %>"> <h1>
<%=ViewState["orgtitle"]%></a> <%=ViewState["orgtitle"]%>
- <a href="<%= Url.RouteUrl("Default", new {controller = "Home" , action = "Index" }) %>"><%= YavscHelpers.SiteName %></a> - <a href="<%= Url.RouteUrl("Default", new {controller = "Home" , action = "Index" }) %>"><%= YavscHelpers.SiteName %></a>
</h1> </h1>
</asp:ContentPlaceHolder> </asp:ContentPlaceHolder>
@ -59,12 +60,21 @@ else {%> Yavsc.notice(<%=note.body%>, <%=note.click_action%>, <%=note.click_acti
<asp:ContentPlaceHolder ID="MainContent" runat="server"> <asp:ContentPlaceHolder ID="MainContent" runat="server">
</asp:ContentPlaceHolder> </asp:ContentPlaceHolder>
</main> </main>
<footer data-type="background" data-speed="5" > <footer>
<%= Html.TranslatedActionLink("Formulaire de contact","Contact","Home",null, new { @class="thanks" }) %>
<div id="copyr"> <div id="copyr">
<a href="http://yavsc.pschneider.fr/Blogs/UserPost/paul/License">© 2015 GNU GENERAL PUBLIC LICENSE <i>Version 3, 29 June 2007</i></a> <a href="http://yavsc.pschneider.fr/Blogs/UserPost/paul/License">
<%=Html.Encode("© 2015 GNU GENERAL PUBLIC LICENSE")%> <i>Version 3, 29 June 2007</i></a>
</div> </div>
<%= Html.TranslatedActionLink("Formulaire de contact","Contact","Home",null, new { @class="thanks" }) %>
</footer><div class="modal"></div> </footer><div class="modal"></div>
<script>
$(document).ready(function() {
$('fieldset.mayhide').hidefieldset();
$( "a" ).append("<div class='aback'></div>").append("<div class='bback'></div>");
});
</script>
</body> </body>
</html> </html>

@ -1,10 +1,12 @@
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<PerformerProfile>" %> <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<PerformerProfile>" %>
<% ViewBag.BlogCounter = BlogManager.GetPostCounter(Model.UserName); %>
<% ViewBag.WithinCircles = CircleManager.Circles(Model.UserName); %>
<div class="performer"> <div class="performer">
<h2> <h2>
<img src="<%= Model.Avatar %>" alt="" class="bigavatar"> <img src="<%= Model.Avatar %>" alt="" class="bigavatar">
<span class="username" data-type="user" data-roles="" data-blog-counter="<%=ViewBag.BlogCounter%>" data-circles="" ><%=Html.Encode(Model.UserName)%></span> <span class="username" data-type="user"
data-roles="<%=string.Join (" ",Roles.GetRolesForUser (Model.UserName)) %>"
data-blog-counter="<%=BlogManager.GetPostCounter(Model.UserName)%>"
data-circles="<%=string.Join (" ",CircleManager.Circles(Model.UserName))%>" >
<%=Html.Encode(Model.UserName)%></span>
<%=Html.Partial("RateUserSkillControl", Model) %> <%=Html.Partial("RateUserSkillControl", Model) %>
</h2> </h2>
<address> <address>

@ -17,7 +17,7 @@ foreach (Estimate estim in Model) {
Vos estimations en tant que client Vos estimations en tant que client
(<%=ViewData["ClientCount"]%>):<br> (<%=ViewData["ClientCount"]%>):<br>
<% foreach (Estimate estim in Model) { %> <% foreach (Estimate estim in Model) { %>
<%= Html.TranslatedActionLink("Titre:"+estim.Title+" Responsable:"+estim.Responsible,"Estimate",new{id=estim.Id}) %> <%= Html.TranslatedActionLink("Titre:"+estim.Title+" Responsable:"+estim.Responsible,"Estimate", new{ Id=estim.Id }) %>
<br><% } %> <br><% } %>
</div> </div>
<% } %> <% } %>

@ -116,9 +116,6 @@
<Reference Include="PayPalCoreSDK"> <Reference Include="PayPalCoreSDK">
<HintPath>..\packages\PayPalCoreSDK.1.6.3\lib\net451\PayPalCoreSDK.dll</HintPath> <HintPath>..\packages\PayPalCoreSDK.1.6.3\lib\net451\PayPalCoreSDK.dll</HintPath>
</Reference> </Reference>
<Reference Include="Npgsql">
<HintPath>..\packages\Npgsql.3.0.3\lib\net45\Npgsql.dll</HintPath>
</Reference>
<Reference Include="log4net"> <Reference Include="log4net">
<HintPath>..\packages\log4net.2.0.4\lib\net45-full\log4net.dll</HintPath> <HintPath>..\packages\log4net.2.0.4\lib\net45-full\log4net.dll</HintPath>
</Reference> </Reference>
@ -138,6 +135,9 @@
<Reference Include="System.ServiceModel" /> <Reference Include="System.ServiceModel" />
<Reference Include="System.ServiceModel.Web" /> <Reference Include="System.ServiceModel.Web" />
<Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.CSharp" />
<Reference Include="Npgsql">
<HintPath>..\packages\Npgsql.3.0.4\lib\net45\Npgsql.dll</HintPath>
</Reference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Folder Include="Admin\" /> <Folder Include="Admin\" />
@ -757,7 +757,6 @@
<Content Include="Scripts\yavsc.user.js" /> <Content Include="Scripts\yavsc.user.js" />
<Content Include="Views\FrontOffice\SiteSkills.aspx" /> <Content Include="Views\FrontOffice\SiteSkills.aspx" />
<Content Include="Views\FrontOffice\YourEstimates.aspx" /> <Content Include="Views\FrontOffice\YourEstimates.aspx" />
<Content Include="Views\FrontOffice\DoAnEstimate.aspx" />
<Content Include="App_Themes\animate.css" /> <Content Include="App_Themes\animate.css" />
<Content Include="App_Themes\images\live-concert-fg.png" /> <Content Include="App_Themes\images\live-concert-fg.png" />
<Content Include="App_Themes\images\live-concert-scene.jpg" /> <Content Include="App_Themes\images\live-concert-scene.jpg" />
@ -766,6 +765,8 @@
<Content Include="App_Themes\clear\links.css" /> <Content Include="App_Themes\clear\links.css" />
<Content Include="App_Themes\images\splash-image-2.jpg" /> <Content Include="App_Themes\images\splash-image-2.jpg" />
<Content Include="Views\Home\Test.aspx" /> <Content Include="Views\Home\Test.aspx" />
<Content Include="App_Themes\clear\input.css" />
<Content Include="Views\FrontOffice\Estimate.aspx" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" /> <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

@ -12,7 +12,7 @@
<package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.3" targetFramework="net451" /> <package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.3" targetFramework="net451" />
<package id="Mono.Web.Xdt" version="1.0.0" targetFramework="net451" /> <package id="Mono.Web.Xdt" version="1.0.0" targetFramework="net451" />
<package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" /> <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" />
<package id="Npgsql" version="3.0.3" targetFramework="net451" /> <package id="Npgsql" version="3.0.4" targetFramework="net451" />
<package id="PayPalButtonManagerSDK" version="2.9.109" targetFramework="net45" /> <package id="PayPalButtonManagerSDK" version="2.9.109" targetFramework="net45" />
<package id="PayPalCoreSDK" version="1.6.3" targetFramework="net451" /> <package id="PayPalCoreSDK" version="1.6.3" targetFramework="net451" />
<package id="Prettify" version="3.3.04.2013" targetFramework="net451" /> <package id="Prettify" version="3.3.04.2013" targetFramework="net451" />

@ -1,3 +1,28 @@
2015-12-15 Paul Schneider <paul@pschneider.fr>
* CircleMember.cs: un membre de cercle est un nom
d'utilisateur associé au cercle d'un autre utilisateur.
* ICircle.cs: Définit l'interface d'un cercle:
un cercle est identifié par un entier long,
il a un possesseur.
* CircleBase.cs: un objet cercle basique implémente
l'interface d'un cercle.
* PerformerProfile.cs: s'assure que le nom d'utilisateur
utilisé n'est pas vide.
* IIdentified.cs: doc xml
* UserNameBase.cs: l'objet base de type "nom d'utilisateur"
implémente l'interface générique
d'un identifié, par une chaine de caractère.
* YavscModel.csproj: reference les nouvelles definitions :
* un membre de cercle
* l'interface d'un cercle
2015-12-09 Paul Schneider <paul@pschneider.fr> 2015-12-09 Paul Schneider <paul@pschneider.fr>
* CircleManager.cs: implémente les methodes utilisées à la * CircleManager.cs: implémente les methodes utilisées à la

@ -25,7 +25,7 @@ namespace Yavsc.Model.Circles
/// <summary> /// <summary>
/// Circle base. /// Circle base.
/// </summary> /// </summary>
public class CircleBase public class CircleBase : ICircle
{ {
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="Yavsc.Model.Circles.CircleBase"/> class. /// Initializes a new instance of the <see cref="Yavsc.Model.Circles.CircleBase"/> class.

@ -0,0 +1,43 @@
//
// CircleMember.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 System;
using Yavsc.Model.RolesAndMembers;
namespace Yavsc.Model.Circles
{
/// <summary>
/// Circle member.
/// </summary>
public class CircleMember : UserNameBase
{
/// <summary>
/// Gets or sets the owner.
/// </summary>
/// <value>The owner.</value>
#region ICircle implementation
public string Owner {
get;
set;
}
#endregion
}
}

@ -0,0 +1,39 @@
//
// CircleBase.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 System;
namespace Yavsc.Model.Circles
{
/// <summary>
/// I circle.
/// </summary>
public interface ICircle: IIdentified<long>
{
/// <summary>
/// Gets or sets the owner.
/// </summary>
/// <value>The owner.</value>
string Owner { get; set; }
}
}

@ -37,12 +37,6 @@ namespace Yavsc.Model.FrontOffice
/// </summary> /// </summary>
public class PerformerProfile: UserNameBase, IRating, IIdentified<long> public class PerformerProfile: UserNameBase, IRating, IIdentified<long>
{ {
/// <summary>
/// Initializes a new instance of the <see cref="Yavsc.Model.Skill.PerformerProfile"/> class.
/// </summary>
public PerformerProfile()
{
}
/// <summary> /// <summary>
/// Gets or sets the identifier. /// Gets or sets the identifier.
@ -63,6 +57,9 @@ namespace Yavsc.Model.FrontOffice
/// <param name="username">Username.</param> /// <param name="username">Username.</param>
public PerformerProfile(string username) public PerformerProfile(string username)
{ {
if (string.IsNullOrWhiteSpace (username))
throw new InvalidOperationException (
"The specified username cannot be blank.");
UserName = username; UserName = username;
} }

@ -22,8 +22,15 @@ using System;
namespace Yavsc.Model namespace Yavsc.Model
{ {
/// <summary>
/// I identified.
/// </summary>
public interface IIdentified<T> public interface IIdentified<T>
{ {
/// <summary>
/// Gets or sets the identifier.
/// </summary>
/// <value>The identifier.</value>
T Id { get; set; } T Id { get; set; }
} }
} }

@ -28,7 +28,7 @@ namespace Yavsc.Model.RolesAndMembers
/// <summary> /// <summary>
/// User name base. /// User name base.
/// </summary> /// </summary>
public class UserNameBase { public class UserNameBase : IIdentified<string> {
/// <summary> /// <summary>
/// Gets or sets the name of the user. /// Gets or sets the name of the user.
/// </summary> /// </summary>
@ -37,6 +37,20 @@ namespace Yavsc.Model.RolesAndMembers
,Display(ResourceType=typeof(LocalizedText),Name="User_name"),RegularExpression(@"^[a-zA-Z .-_#]{1,100}$")] ,Display(ResourceType=typeof(LocalizedText),Name="User_name"),RegularExpression(@"^[a-zA-Z .-_#]{1,100}$")]
public string UserName { get; set; } public string UserName { get; set; }
#region IIdentified implementation
/// <summary>
/// Gets or sets the identifier.
/// </summary>
/// <value>The identifier.</value>
public string Id {
get {
return UserName;
}
set {
throw new NotImplementedException ();
}
}
#endregion
} }
} }

@ -241,6 +241,8 @@
<Compile Include="FrontOffice\PerformerAvailability.cs" /> <Compile Include="FrontOffice\PerformerAvailability.cs" />
<Compile Include="Skill\AuthentificatedSkillRating.cs" /> <Compile Include="Skill\AuthentificatedSkillRating.cs" />
<Compile Include="Skill\SkillRating.cs" /> <Compile Include="Skill\SkillRating.cs" />
<Compile Include="Circles\CircleMember.cs" />
<Compile Include="Circles\ICircle.cs" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup> <ItemGroup>

@ -1,3 +1,9 @@
2015-12-15 Paul Schneider <paul@pschneider.fr>
* MainClass.cs: format du code
* YavscClient.csproj: refabrication
2015-11-30 Paul Schneider <paul@pschneider.fr> 2015-11-30 Paul Schneider <paul@pschneider.fr>
* YavscClient.csproj: ... * YavscClient.csproj: ...

@ -3,10 +3,10 @@ using System.Net.Http;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Net.Http.Headers; using System.Net.Http.Headers;
using System.Collections.Generic; using System.Collections.Generic;
using System.Net.Http.Formatting;
using Newtonsoft.Json;
using Yavsc.Model.FrontOffice; using Yavsc.Model.FrontOffice;
using Yavsc.Model.FrontOffice.Catalog; using Yavsc.Model.FrontOffice.Catalog;
using System.Net.Http.Formatting;
using Newtonsoft.Json;
namespace Yavsc namespace Yavsc
{ {

@ -9,7 +9,7 @@
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<RootNamespace>maeclient</RootNamespace> <RootNamespace>maeclient</RootNamespace>
<AssemblyName>yavscclient</AssemblyName> <AssemblyName>yavscclient</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion> <TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
@ -36,36 +36,42 @@
<Optimize>false</Optimize> <Optimize>false</Optimize>
<OutputPath>bin\Lua</OutputPath> <OutputPath>bin\Lua</OutputPath>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'TotemPre|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'TotemPre|AnyCPU' ">
<Optimize>false</Optimize> <Optimize>false</Optimize>
<OutputPath>bin\TotemPre</OutputPath> <OutputPath>bin\TotemPre</OutputPath>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'TotemProd|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'TotemProd|AnyCPU' ">
<Optimize>false</Optimize> <Optimize>false</Optimize>
<OutputPath>bin\TotemProd</OutputPath> <OutputPath>bin\TotemProd</OutputPath>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'YavscPre|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'YavscPre|AnyCPU' ">
<Optimize>false</Optimize> <Optimize>false</Optimize>
<OutputPath>bin\YavscPre</OutputPath> <OutputPath>bin\YavscPre</OutputPath>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Yavsc|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Yavsc|AnyCPU' ">
<Optimize>false</Optimize> <Optimize>false</Optimize>
<OutputPath>bin\Yavsc</OutputPath> <OutputPath>bin\Yavsc</OutputPath>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Net.Http" /> <Reference Include="System.Net.Http" />
<Reference Include="System.ServiceModel.Activation" /> <Reference Include="System.ServiceModel.Activation" />
<Reference Include="System.Core" />
<Reference Include="System.Net.Http.Formatting" /> <Reference Include="System.Net.Http.Formatting" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="MyClass.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="MainClass.cs" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup> <ItemGroup>

Loading…