migration applied
This commit is contained in:
@ -7,21 +7,21 @@ namespace Yavsc
|
||||
public string Title { get; set; }
|
||||
public string Slogan { get; set; }
|
||||
|
||||
public string StyleSheet { get; set; }
|
||||
public string FavIcon { get; set; }
|
||||
public string Logo { get; set; }
|
||||
public string StyleSheet { get; set; }
|
||||
public string FavIcon { get; set; }
|
||||
public string Logo { get; set; }
|
||||
/// <summary>
|
||||
/// Conceptually,
|
||||
/// This authorisation server only has this present site as unique audience.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public string Audience { get; set; }
|
||||
public string Audience { get; set; }
|
||||
/// <summary>
|
||||
/// it's a very small company, with one domaine name only,
|
||||
/// so let it be the same as in the Audience field.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public string Authority { get; set; }
|
||||
public string Authority { get; set; }
|
||||
/// <summary>
|
||||
/// Owner's email
|
||||
/// </summary>
|
||||
@ -34,16 +34,16 @@ namespace Yavsc
|
||||
public Contact Admin { get; set; }
|
||||
|
||||
public string DataDir { get; set; }
|
||||
public string Avatars { get; set; }
|
||||
public long Quota { get; set; }
|
||||
public string Blog { get; set; }
|
||||
public string Bills { get; set; }
|
||||
public string Avatars { get; set; } = "avatars";
|
||||
public long Quota { get; set; }
|
||||
public string Blog { get; set; } = "blogs";
|
||||
public string Bills { get; set; } = "bills";
|
||||
public string GitRepository { get; set; } = "sources";
|
||||
|
||||
public string BusinessName { get; set; }
|
||||
public string Street { get; set; }
|
||||
public string PostalCode { get; set; }
|
||||
public string CountryCode { get; set; }
|
||||
public string BusinessName { get; set; }
|
||||
public string Street { get; set; }
|
||||
public string PostalCode { get; set; }
|
||||
public string CountryCode { get; set; }
|
||||
|
||||
public string HomeViewName { get; set; }
|
||||
/// <summary>
|
||||
@ -51,7 +51,7 @@ namespace Yavsc
|
||||
/// generated pdf files using pandoc
|
||||
/// </summary>
|
||||
/// <returns>The temporary directory to use</returns>
|
||||
public string TempDir { get; set; } = "Temp";
|
||||
public string TempDir { get; set; } = "temp";
|
||||
|
||||
/// <summary>
|
||||
/// Only one performer will capture payments
|
||||
|
@ -1,31 +1,132 @@
|
||||
using System.Diagnostics;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Yavsc.Models;
|
||||
using Yavsc.Helpers;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc.Localization;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.AspNetCore.Diagnostics;
|
||||
using Microsoft.Extensions.Options;
|
||||
|
||||
namespace Yavsc.Controllers;
|
||||
|
||||
public class HomeController : Controller
|
||||
namespace Yavsc.Controllers
|
||||
{
|
||||
private readonly ILogger<HomeController> _logger;
|
||||
|
||||
public HomeController(ILogger<HomeController> logger)
|
||||
[AllowAnonymous]
|
||||
public class HomeController : Controller
|
||||
{
|
||||
_logger = logger;
|
||||
}
|
||||
readonly ApplicationDbContext _dbContext;
|
||||
|
||||
public IActionResult Index()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
readonly IHtmlLocalizer _localizer;
|
||||
|
||||
public IActionResult Privacy()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
private SiteSettings siteSettings;
|
||||
public HomeController(ILogger<HomeController> logger,
|
||||
IHtmlLocalizer<Startup> localizer,
|
||||
ApplicationDbContext context,
|
||||
IOptions<SiteSettings> settingsOptions)
|
||||
{
|
||||
_localizer = localizer;
|
||||
_dbContext = context;
|
||||
siteSettings = settingsOptions.Value;
|
||||
}
|
||||
|
||||
public async Task<IActionResult> Index(string id)
|
||||
{
|
||||
ViewBag.IsFromSecureProx = Request.Headers.ContainsKey(Constants.SshHeaderKey) && Request.Headers[Constants.SshHeaderKey] == "on";
|
||||
ViewBag.SecureHomeUrl = "https://" + Request.Headers["X-Forwarded-Host"];
|
||||
ViewBag.SshHeaderKey = Request.Headers[Constants.SshHeaderKey];
|
||||
var uid = User.GetUserId();
|
||||
long[] clicked = null;
|
||||
if (uid == null)
|
||||
{
|
||||
await HttpContext.Session.LoadAsync();
|
||||
var strclicked = HttpContext.Session.GetString("clicked");
|
||||
if (strclicked != null) clicked = strclicked.Split(':').Select(c => long.Parse(c)).ToArray();
|
||||
if (clicked == null) clicked = new long[0];
|
||||
}
|
||||
else clicked = _dbContext.DimissClicked.Where(d => d.UserId == uid).Select(d => d.NotificationId).ToArray();
|
||||
var notes = _dbContext.Notification.Where(
|
||||
n => !clicked.Contains(n.Id)
|
||||
);
|
||||
if (notes.Any()) this.Notify(notes);
|
||||
|
||||
ViewData["HaircutCommandCount"] = _dbContext.HairCutQueries.Where(
|
||||
q => q.ClientId == uid && q.Status < QueryStatus.Failed
|
||||
).Count();
|
||||
var toShow = _dbContext.Activities
|
||||
.Include(a => a.Forms)
|
||||
.Include(a => a.Parent)
|
||||
.Include(a => a.Children)
|
||||
.Where(a => !a.Hidden)
|
||||
.Where(a => a.ParentCode == id)
|
||||
.OrderByDescending(a => a.Rate).ToList();
|
||||
|
||||
foreach (var a in toShow)
|
||||
{
|
||||
a.Children = a.Children.Where(c => !c.Hidden).ToList();
|
||||
}
|
||||
return View(toShow);
|
||||
}
|
||||
public async Task<IActionResult> About()
|
||||
{
|
||||
FileInfo fi = new FileInfo("wwwroot/version");
|
||||
return View("About", fi.Exists ? _localizer["Version logicielle: "] + await fi.OpenText().ReadToEndAsync() : _localizer["Aucune information sur la version logicielle n'est publiée."]);
|
||||
}
|
||||
public IActionResult Privacy()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
public IActionResult AboutMarkdown()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
public IActionResult Contact()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
public IActionResult Dash()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
public ActionResult Chat()
|
||||
{
|
||||
if (User.Identity.IsAuthenticated)
|
||||
{
|
||||
ViewBag.IsAuthenticated = true;
|
||||
string uid = User.GetUserId();
|
||||
ViewBag.Contacts = _dbContext.Contact.Where(c => c.OwnerId == uid)
|
||||
;
|
||||
}
|
||||
else ViewBag.IsAuthenticated = false;
|
||||
return View();
|
||||
}
|
||||
|
||||
public IActionResult Error()
|
||||
{
|
||||
var feature = this.HttpContext.Features.Get<IExceptionHandlerFeature>();
|
||||
|
||||
return View("~/Views/Shared/Error.cshtml", feature?.Error);
|
||||
}
|
||||
public IActionResult Status(int id)
|
||||
{
|
||||
ViewBag.StatusCode = id;
|
||||
return View("~/Views/Shared/Status.cshtml");
|
||||
}
|
||||
public IActionResult Todo()
|
||||
{
|
||||
User.GetUserId();
|
||||
|
||||
return View();
|
||||
}
|
||||
|
||||
public IActionResult VideoChat()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
public IActionResult Audio()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
|
||||
public IActionResult Error()
|
||||
{
|
||||
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
|
||||
}
|
||||
}
|
||||
|
31
src/Yavsc/Controllers/HomeController.cs.new
Normal file
31
src/Yavsc/Controllers/HomeController.cs.new
Normal file
@ -0,0 +1,31 @@
|
||||
using System.Diagnostics;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Yavsc.Models;
|
||||
|
||||
namespace Yavsc.Controllers;
|
||||
|
||||
public class HomeController : Controller
|
||||
{
|
||||
private readonly ILogger<HomeController> _logger;
|
||||
|
||||
public HomeController(ILogger<HomeController> logger)
|
||||
{
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public IActionResult Index()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
public IActionResult Privacy()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
|
||||
public IActionResult Error()
|
||||
{
|
||||
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
|
||||
}
|
||||
}
|
@ -16,7 +16,8 @@ namespace Yavsc.Helpers
|
||||
var notifs = SetupNotificationList(controller);
|
||||
notifs.Add(new Notification { title = title, body = body });
|
||||
}
|
||||
public static void Notify(this Controller controller, IEnumerable<Notification> notes)
|
||||
|
||||
public static void Notify(this Controller controller, IEnumerable<Notification> notes)
|
||||
{
|
||||
var notifs = SetupNotificationList(controller);
|
||||
notifs.AddRange(notes);
|
||||
|
@ -99,7 +99,7 @@ namespace Yavsc.Migrations
|
||||
column: x => x.PaymentId,
|
||||
principalTable: "PayPalPayment",
|
||||
principalColumn: "CreationToken",
|
||||
onDelete: ReferentialAction.Restrict);
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
table.ForeignKey(
|
||||
name: "FK_Project_PerformerProfile_PerformerId",
|
||||
column: x => x.PerformerId,
|
||||
|
3554
src/Yavsc/Migrations/20230326173049_net7.Designer.cs
generated
Normal file
3554
src/Yavsc/Migrations/20230326173049_net7.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
7089
src/Yavsc/Migrations/20230326173049_net7.cs
Normal file
7089
src/Yavsc/Migrations/20230326173049_net7.cs
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -75,6 +75,8 @@ namespace Yavsc.Models
|
||||
if (et.ClrType.GetInterface("IBaseTrackedEntity") != null)
|
||||
et.FindProperty("DateCreated").SetAfterSaveBehavior(Microsoft.EntityFrameworkCore.Metadata.PropertySaveBehavior.Ignore);
|
||||
}
|
||||
|
||||
builder.Entity<Activity>().Property(a=>a.ParentCode).IsRequired(false);
|
||||
}
|
||||
|
||||
// this is not a failback procedure.
|
||||
|
@ -3,7 +3,7 @@ using Microsoft.AspNetCore;
|
||||
|
||||
namespace Yavsc
|
||||
{
|
||||
public class Program
|
||||
public class Program
|
||||
{
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
|
@ -8,20 +8,18 @@ using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.Razor;
|
||||
using Microsoft.Net.Http.Headers;
|
||||
using Newtonsoft.Json;
|
||||
using System.Net;
|
||||
using Google.Apis.Util.Store;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.Extensions.Localization;
|
||||
using Yavsc.Helpers;
|
||||
using static System.Environment;
|
||||
using Microsoft.AspNetCore.Mvc.Authorization;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Yavsc.Models;
|
||||
using Yavsc.Services;
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
|
||||
namespace Yavsc
|
||||
{
|
||||
using Microsoft.AspNetCore.Mvc.Authorization;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Models;
|
||||
using Services;
|
||||
|
||||
public partial class Startup
|
||||
{
|
||||
@ -50,15 +48,16 @@ namespace Yavsc
|
||||
HostingFullName = $"{env.EnvironmentName} [{prodtag}/{devtag}/{stagetag}]";
|
||||
// Set up configuration sources.
|
||||
var builder = new ConfigurationBuilder()
|
||||
.AddEnvironmentVariables()
|
||||
.AddJsonFile("appsettings.json")
|
||||
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
|
||||
|
||||
|
||||
builder.AddEnvironmentVariables();
|
||||
Configuration = builder.Build();
|
||||
|
||||
var auth = Configuration["Site:Authority"];
|
||||
var cxstr = Configuration["ConnectionStrings:Default"];
|
||||
|
||||
ConnectionString = cxstr;
|
||||
|
||||
AppDomain.CurrentDomain.SetData(Constants.YavscConnectionStringEnvName, ConnectionString);
|
||||
@ -185,6 +184,15 @@ namespace Yavsc
|
||||
options.AddPolicy("Authenticated", policy => policy.RequireAuthenticatedUser());
|
||||
});
|
||||
|
||||
services.AddAuthentication("Bearer").AddJwtBearer("Bearer", options =>
|
||||
{
|
||||
options.Authority = siteSettings.GetValue<string>("ExternalUrl");
|
||||
options.TokenValidationParameters = new TokenValidationParameters
|
||||
{
|
||||
ValidateAudience = false
|
||||
};
|
||||
});
|
||||
|
||||
/* FIXME services.AddSingleton<IAuthorizationHandler, HasBadgeHandler>();
|
||||
services.AddSingleton<IAuthorizationHandler, HasTemporaryPassHandler>();
|
||||
services.AddSingleton<IAuthorizationHandler, BlogEditHandler>();
|
||||
@ -201,13 +209,14 @@ namespace Yavsc
|
||||
|
||||
services.AddMvc(config =>
|
||||
{
|
||||
var policy = new AuthorizationPolicyBuilder()
|
||||
/* var policy = new AuthorizationPolicyBuilder()
|
||||
.RequireAuthenticatedUser()
|
||||
.Build();
|
||||
config.Filters.Add(new AuthorizeFilter(policy));
|
||||
config.Filters.Add(new AuthorizeFilter(policy)); */
|
||||
config.Filters.Add(new ProducesAttribute("application/json"));
|
||||
// config.ModelBinders.Insert(0,new MyDateTimeModelBinder());
|
||||
// config.ModelBinders.Insert(0,new MyDecimalModelBinder());
|
||||
config.EnableEndpointRouting = false;
|
||||
}).AddFormatterMappings(
|
||||
config => config.SetMediaTypeMappingForFormat("text/pdf",
|
||||
new MediaTypeHeaderValue("text/pdf"))
|
||||
@ -298,7 +307,7 @@ namespace Yavsc
|
||||
using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>()
|
||||
.CreateScope())
|
||||
{
|
||||
serviceScope.ServiceProvider.GetService<ApplicationDbContext>()
|
||||
serviceScope.ServiceProvider.GetRequiredService<ApplicationDbContext>()
|
||||
.Database.Migrate();
|
||||
}
|
||||
}
|
||||
@ -328,14 +337,13 @@ namespace Yavsc
|
||||
ConfigureWebSocketsApp(app);
|
||||
|
||||
|
||||
_logger.LogInformation("LocalApplicationData: " + Environment.GetFolderPath(SpecialFolder.LocalApplicationData, SpecialFolderOption.DoNotVerify));
|
||||
_logger.LogInformation("LocalApplicationData: " + Environment.GetFolderPath(
|
||||
Environment.SpecialFolder.LocalApplicationData, Environment.SpecialFolderOption.DoNotVerify));
|
||||
|
||||
CheckApp(env, loggerFactory);
|
||||
app.UseEndpoints(endpoints =>
|
||||
{
|
||||
endpoints.MapHub<ChatHub>("/chat");
|
||||
});
|
||||
|
||||
|
||||
app.UseStatusCodePages().UseStaticFiles().UseAuthentication();
|
||||
app.UseMvcWithDefaultRoute();
|
||||
}
|
||||
|
||||
}
|
||||
|
159
src/Yavsc/Views/Home.new/About.cshtml
Executable file
159
src/Yavsc/Views/Home.new/About.cshtml
Executable file
@ -0,0 +1,159 @@
|
||||
@{
|
||||
ViewData["Title"] = "About ";
|
||||
}
|
||||
<h1>@ViewData["Title"]</h1>
|
||||
<environment names="Development">
|
||||
**Version de Development**
|
||||
<markdown>
|
||||
|
||||
## L'objectif
|
||||
|
||||
Cette application est construite pour mettre en relation des artistes
|
||||
du domaine musical avec leur public.
|
||||
|
||||
## Le fonctionnement
|
||||
|
||||
Les utilisateurs du site sont soit artiste, soit client, soit administrateur. ils ont tous droit à leur blog.
|
||||
Pour les artistes, c'est un moyen de promouvoir leur activité.
|
||||
Ils peuvent y publier des articles, truffés de vidéos et photos.
|
||||
Pour les clients, c'est un moyen de casser la glace avec leurs idoles,
|
||||
par la description détaillées de leur centres d'intérêts.
|
||||
|
||||
L'application propulse aussi une messagerie instantanée, disponible depuis
|
||||
un navigateur Web ou depuis l'appplication mobile,
|
||||
pouvant garantir la preservation du secret sur toute information personnelle,
|
||||
du client comme du prestataire.
|
||||
|
||||
Puis viennent (ou pas) une prise commande, un payement du client,
|
||||
la prestation, une collecte du retour du client, et un paiement du prestataire de services.
|
||||
|
||||
Ni le client ni le prestataire ne sont anonymes pour l'applications,
|
||||
il sont même formellement authentifies par l'acquitement d'une première
|
||||
facturation en ligne, ou à l'occasion de la saisie de leur profil proféssionnel.
|
||||
|
||||
Durant la phase de construction d'un contrat de prestation,
|
||||
le client et l'artiste peuvent profiter d'un canal de communication privé et anonyme,
|
||||
qui est fermé à la validation définitive du dit contrat.
|
||||
|
||||
Valider un contrat, c'est:
|
||||
|
||||
* Choisir le type de contrat
|
||||
* Se mettre d'accord sur les paramètres du contrat
|
||||
* Le faire signer des deux parties
|
||||
* Mettre en œuvre d'éventuels paiement d'arrhes
|
||||
|
||||
Une fois validé, le contrat est publié à destination des deux parties. la facture est publiée à destination du client,
|
||||
qui peut l'honorer auprès du système, auquel cas ce client est marqué solvable, et le contrat est marqué approvisionné.
|
||||
|
||||
En cas de défaut d'approvisionnement, le système prendra soin de marquer le contrat comme provisoire, et de prévenir l'artiste
|
||||
d'effectuer toute prestation en relation tant le paiement associé laisse à douter.
|
||||
|
||||
Une fois sa prestation associée exécutée, les paiements relatifs sont effectués auprès de l'artiste.
|
||||
|
||||
Pour un contrat exécuté et non honoré par le client, le processus de poursuite en recouvrement est engagé, sinon, le contrat est archivé,
|
||||
des attestations de paiement sont disponibles pour l'artiste et la facture est marquée payée, puis repostée au client.
|
||||
|
||||
### Pour l'artiste
|
||||
|
||||
L'artiste choisit plusieurs paramètres qui vont faire son profil :
|
||||
|
||||
* Le type d'activités qu'il veut promouvoir, le type de prestations qu'il fournit (est-ce un DJ,
|
||||
un chanteur solo, un musicien solo, un ensemble musical classique, un groupe)
|
||||
* La tarification de sa mise en contact avec un nouveau client
|
||||
(combien je reçois par demande client traitée sans lourdeur de plus d'une journée)
|
||||
* Le lieu où il exerce et, le cas échéant, sur combien de distance il pourrait se déplacer.
|
||||
* un agenda Google optionnel, à consulter pour établir sa disponibilité
|
||||
* Des paramètres supplémentaires en fonctions de son type d'activité par exemple, pour
|
||||
les ensembles, leur taille, le cas échéant, leur répertoire ou des indications sur le style de leur musique)
|
||||
|
||||
### Pour le client
|
||||
|
||||
Il choisit un lieu et une date pour déclarer un événement avenir
|
||||
(il peut bien-sûr en programmer autant qu'il le veut).
|
||||
|
||||
Il peut, parcourir les publications des artistes, et entamer,
|
||||
sur la base d'un de ses projets événementiel, la négociation d'un contrat de prestation.
|
||||
|
||||
Il a accès à la connaissance des journées connues comme libres des artistes par le système.
|
||||
|
||||
## La confidentialité
|
||||
|
||||
À aucun moment, aucune adresse postale, aucune adresse e-mail ni aucun numéro de téléphone
|
||||
ne sont transmis ni aux clients, ni aux artistes. Seul le système a accès à ces informations.
|
||||
|
||||
De plus, le droit de retrait est permanent et sa mise en oeuvre immédiate.
|
||||
Les artistes comme les clients peuvent demander leur désinscription,
|
||||
qui désactive immédiatement les publications associées à leurs informations,
|
||||
et programme la suppression complète de ces dites informations dans les quinze jours
|
||||
à compter de la demande, sauf demande contradictoire.
|
||||
L'opération est annulable, jusqu'à deux semaines après sa programmation.
|
||||
|
||||
</markdown>
|
||||
</environment>
|
||||
|
||||
<environment names="Lua,Development">
|
||||
<markdown>
|
||||
C'est mon site pérso, une configuration de _Yavsc_ (encore une autre très petite entreprise).
|
||||
|
||||
* [README](https://github.com/pazof/yavsc/blob/vnext/README.md)
|
||||
* [license: GNU GPL v3](https://github.com/pazof/yavsc/blob/vnext/LICENSE)
|
||||
|
||||
</markdown>
|
||||
</environment>
|
||||
|
||||
<environment names="Yavsc,Development">
|
||||
<markdown>
|
||||
Yet Another Very Small Company ...
|
||||
|
||||
* [README](https://github.com/pazof/yavsc/blob/vnext/README.md)
|
||||
* [license: GNU FPL v3](https://github.com/pazof/yavsc/blob/vnext/LICENSE)
|
||||
|
||||
</markdown>
|
||||
</environment>
|
||||
|
||||
<environment names="YavscPre,Development">
|
||||
<markdown>
|
||||
## Yet Another Very Small Company :
|
||||
* [README](https://github.com/pazof/yavsc/blob/vnext/README.md)
|
||||
* [license: GNU FPL v3](https://github.com/pazof/yavsc/blob/vnext/LICENSE)
|
||||
|
||||
En production:
|
||||
|
||||
* [Lua](http://pschneider.fr:85)
|
||||
* [Yavsc](http://pschneider.fr:84)
|
||||
|
||||
</markdown>
|
||||
</environment>
|
||||
|
||||
|
||||
<environment names="coiffure,Development">
|
||||
<markdown>
|
||||
Vous êtes sur le site de commande en coiffure à domicile de Soraya Boudjouraf,
|
||||
un as de la coiffure, qui oeuvre en région parisienne.
|
||||
|
||||
En validant un formulaire de commande ici, c'est à elle que vous notifiez votre demande.
|
||||
|
||||
Vous pouvez 
|
||||
et/ou des détails sur votre demande,
|
||||
elle vous rappelera.</markdown>
|
||||
</environment>
|
||||
|
||||
<environment names="Development">
|
||||
<markdown>
|
||||
## Ceci est un site de développement.
|
||||
|
||||
Cette présente ressource ne concerne que le développement du logiciel qui la met en oeuvre.
|
||||
Elle est éphémère, et pratiquement en permanence force de codes 500.
|
||||
|
||||
Veuillez excuser l'équipe de développement pour vous avoir fait part de cette adresse et pour la gêne occasionnnée.
|
||||
|
||||
La "pré-production" affiche les sites suivants:
|
||||
|
||||
* [Lua](https://pschneider.fr:85)
|
||||
* [Yavsc](https://pschneider.fr:84)
|
||||
|
||||
</markdown>
|
||||
</environment>
|
||||
<p>
|
||||
@Model
|
||||
</p>
|
163
src/Yavsc/Views/Home.new/About.pt.cshtml
Executable file
163
src/Yavsc/Views/Home.new/About.pt.cshtml
Executable file
@ -0,0 +1,163 @@
|
||||
@{
|
||||
ViewData["Title"] = "About";
|
||||
}
|
||||
<h1>@ViewData["Title"]</h1>
|
||||
<environment names="freefield,Development">
|
||||
|
||||
<markdown>
|
||||
## O objetivo
|
||||
|
||||
Esta aplicação é construída para conectar artistas
|
||||
do campo musical com seu público.
|
||||
|
||||
## Operation
|
||||
|
||||
Os usuários do site são artista, cliente ou administrador. Todos eles têm direito ao seu blog.
|
||||
Para artistas, é uma maneira de promover seus negócios.
|
||||
Eles podem publicar artigos, cheios de vídeos e fotos.
|
||||
Para os clientes, é uma maneira de quebrar o gelo com seus ídolos,
|
||||
pela descrição detalhada de seus centros de interesse.
|
||||
|
||||
O aplicativo também alimenta um mensageiro instantâneo, disponível desde
|
||||
um navegador da web ou de um aplicativo para dispositivos móveis
|
||||
pode garantir a preservação do sigilo sobre qualquer informação pessoal,
|
||||
cliente e provedor.
|
||||
|
||||
Então venha (ou não) um pedido, um pagamento do cliente,
|
||||
a entrega, uma coleta do retorno do cliente e um pagamento do provedor de serviços.
|
||||
|
||||
Nem o cliente nem o provedor são anônimos para os aplicativos,
|
||||
eles são até formalmente autenticados pela aquisição de um primeiro
|
||||
faturamento on-line ou ao entrar em seu perfil profissional.
|
||||
|
||||
Durante a fase de construção de um contrato de serviço,
|
||||
o cliente e o artista podem se beneficiar de um canal de comunicação privado e anônimo,
|
||||
que está fechado para a validação final do referido contrato.
|
||||
|
||||
Valide um contrato é:
|
||||
|
||||
* Escolha o tipo de contrato
|
||||
* Concordo com os parâmetros do contrato
|
||||
* Faça ambas as partes assinarem
|
||||
* Implementar qualquer adiantamento
|
||||
|
||||
Uma vez validado, o contrato é publicado para ambas as partes. a fatura é publicada para o cliente,
|
||||
quem pode homenageá-lo ao sistema, caso em que esse cliente recebe uma pontuação de solvente e o contrato é marcado como provisionado.
|
||||
|
||||
Em caso de falta de fornecimento, o sistema terá o cuidado de marcar o contrato como provisório, e avisar o artista
|
||||
para executar qualquer serviço relacionado, pois o pagamento associado deixa dúvidas.
|
||||
|
||||
Depois que o serviço associado tiver sido executado, os pagamentos relativos serão feitos ao artista.
|
||||
|
||||
Para um contrato executado e não honrado pelo cliente, o processo de processo de recuperação é contratado, caso contrário, o contrato é arquivado,
|
||||
Os certificados de pagamento estão disponíveis para o artista e a fatura é marcada como paga e depois repassada ao cliente.
|
||||
|
||||
### Para o artista
|
||||
|
||||
O artista escolhe vários parâmetros que farão o seu perfil:
|
||||
|
||||
* O tipo de atividades que ele quer promover, o tipo de serviços que ele oferece (é um DJ,
|
||||
um cantor solo, um músico solo, um conjunto musical clássico, uma banda)
|
||||
* O preço de seu contato com um novo cliente
|
||||
(quanto recebo por solicitação de cliente processada sem peso de mais de um dia)
|
||||
* O lugar onde ele pratica e, se sim, até onde ele pode se mover.
|
||||
* um calendário opcional do Google, para consultar para estabelecer sua disponibilidade
|
||||
* Parâmetros adicionais dependendo do tipo de atividade, por exemplo, para
|
||||
conjuntos, seu tamanho, se houver, seu repertório ou indicações do estilo de sua música)
|
||||
|
||||
### Para o cliente
|
||||
|
||||
Ele escolhe um lugar e uma data para declarar um evento futuro
|
||||
(Ele pode programar o quanto quiser).
|
||||
|
||||
Ele pode, navegar pelas publicações dos artistas e começar,
|
||||
com base em um de seus projetos de eventos, a negociação de um contrato de serviço.
|
||||
|
||||
Ele tem acesso ao conhecimento de dias conhecidos como artistas livres pelo sistema.
|
||||
|
||||
## Confidencialidade
|
||||
|
||||
Em nenhum momento, nenhum endereço de correspondência, nenhum endereço de e-mail e nenhum número de telefone
|
||||
não são transmitidos para clientes ou artistas. Apenas o sistema tem acesso a essas informações.
|
||||
|
||||
Além disso, o direito de retirada é permanente e sua implementação imediata.
|
||||
Artistas e clientes podem solicitar sua desinscrição,
|
||||
que imediatamente desativa as publicações associadas às suas informações,
|
||||
e planeia a eliminação completa desta informação no prazo de quinze dias
|
||||
do aplicativo, a menos que seja um pedido contraditório.
|
||||
A operação é anulável até duas semanas após a sua programação.
|
||||
</markdown>
|
||||
</environment>
|
||||
|
||||
<environment names="Lua,Development">
|
||||
<markdown>Este é o meu site perso, uma configuração de _Yavsc_ (outro negócio muito pequeno).
|
||||
|
||||
* [README](https://github.com/pazof/yavsc/blob/vnext/README.md)
|
||||
* [licença: GNU GPL v3](https://github.com/pazof/yavsc/blob/vnext/LICENSE)
|
||||
|
||||
Outras instalações:
|
||||
</markdown>
|
||||
<markdown>
|
||||
* [Coiffure](http://coiffure.pschneider.fr)
|
||||
* [ZicMoove](http://linkmuse.pschneider.fr)
|
||||
* [Yavsc](http://yavsc.pschneider.fr)
|
||||
</markdown>
|
||||
</environment>
|
||||
|
||||
<environment names="Yavsc">
|
||||
<markdown>
|
||||
Yet Another Very Small Company ...
|
||||
|
||||
* [README](https://github.com/pazof/yavsc/blob/vnext/README.md)
|
||||
* [license: GNU FPL v3](https://github.com/pazof/yavsc/blob/vnext/LICENSE)
|
||||
|
||||
</markdown>
|
||||
</environment>
|
||||
|
||||
<environment names="YavscPre">
|
||||
<markdown>
|
||||
## Yet Another Very Small Company :
|
||||
* [README](https://github.com/pazof/yavsc/blob/vnext/README.md)
|
||||
* [license: GNU FPL v3](https://github.com/pazof/yavsc/blob/vnext/LICENSE)
|
||||
|
||||
En production:
|
||||
|
||||
* [Lua](http://pschneider.fr:85)
|
||||
* [Yavsc](http://pschneider.fr:84)
|
||||
|
||||
</markdown>
|
||||
</environment>
|
||||
|
||||
|
||||
<environment names="coiffure">
|
||||
<markdown>
|
||||
Você está no site da ordem em cabeleireiro em casa de Soraya Boudjouraf,
|
||||
um ás de cabeleireiro, que trabalha na região de Paris.
|
||||
|
||||
Ao validar um formulário de pedido aqui, é para ela que você notifica sua solicitação.
|
||||
|
||||
Você pode [Deixe-lhe o seu número de telefone] (/ HairCutCommand / HairCut? ActivityCode = Brush & performerId = 1bd841ab-c305-4971-940d-7ddca818310c)
|
||||
e / ou detalhes sobre o seu pedido,
|
||||
ela vai ligar de volta.</markdown>
|
||||
</environment>
|
||||
|
||||
<environment names="Development">
|
||||
<markdown>
|
||||
## Este é um site de desenvolvimento.
|
||||
|
||||
Este recurso só diz respeito ao desenvolvimento do software que o implementa.
|
||||
É efêmero e praticamente constantemente força 500 códigos.
|
||||
|
||||
Por favor, desculpe a equipe de desenvolvimento para informá-lo sobre este endereço e pelo inconveniente.
|
||||
|
||||
A "pré-produção" exibe os seguintes sites:
|
||||
|
||||
* [Yavsc](https://yavsc.pschneider.fr)
|
||||
* [Lua](https://lua.pschneider.fr)
|
||||
|
||||
</markdown>
|
||||
</environment>
|
||||
|
||||
<p>
|
||||
@Model
|
||||
</p>
|
38
src/Yavsc/Views/Home.new/AboutAccess.cshtml
Normal file
38
src/Yavsc/Views/Home.new/AboutAccess.cshtml
Normal file
@ -0,0 +1,38 @@
|
||||
@{
|
||||
ViewData["Title"] = "À propos des restrictions d'accès";
|
||||
}
|
||||
<h1>@ViewData["Title"]</h1>
|
||||
|
||||
<markdown>
|
||||
|
||||
# Blog et fichiers utilisateurs
|
||||
|
||||
Par défaut, un envoi à destination du serveur est privé, visible seulement pour son possesseur (et l'administration).
|
||||
|
||||
L'utilisateur peu publier chacun de ces derniers à l'adresse :
|
||||
|
||||
* de tout le monde,
|
||||
* ou d'une liste de cercles d'utilisateurs,
|
||||
* ou de personne
|
||||
|
||||
Quand il s'agit d'un fichier, son adresse permanente relative à la racine du serveur web est: `/UserFiles/(Nom Utilisateur)/(cheminVersLeFichier)`
|
||||
|
||||
Les restrictions d'accès à ce fichier sont celles associées à tous les fichiers du même dossier.
|
||||
Il n'y a pas de regle assiciée à chaque fichier individuellement,
|
||||
elles appartiennent au dossier qui les contient.
|
||||
|
||||
Les billet de blog sont regroupés par utilisateur, à l'Url
|
||||
|
||||
/Blog/(Nom d'Utilisateur)
|
||||
|
||||
Ils sont aussi regroupés par titre :
|
||||
|
||||
/Title/(Titre de post)
|
||||
|
||||
Et ils possèdent une addresse permanente de la forme :
|
||||
|
||||
/Blogspot/Details/(Id Numerique De Post)
|
||||
|
||||
|
||||
|
||||
</markdown>
|
19
src/Yavsc/Views/Home.new/AboutMarkdown.cshtml
Normal file
19
src/Yavsc/Views/Home.new/AboutMarkdown.cshtml
Normal file
@ -0,0 +1,19 @@
|
||||
@{
|
||||
ViewData["Title"] = "À propos de Markdown";
|
||||
}
|
||||
<h1>@ViewData["Title"]</h1>
|
||||
|
||||
<markdown>
|
||||
Quelques extensions à un Markdown de base :
|
||||
|
||||
* les video et audio: ``
|
||||
|
||||

|
||||
|
||||
à faire:
|
||||
|
||||
* le tag "Numéro de ticket": "Ticket#6854"
|
||||
* le tag "Titre d'article": "#1_great_title"
|
||||
* le tag "User" = "@@(John Doe)" ou "@@jdoe"
|
||||
|
||||
</markdown>
|
9
src/Yavsc/Views/Home.new/Audio.cshtml
Normal file
9
src/Yavsc/Views/Home.new/Audio.cshtml
Normal file
@ -0,0 +1,9 @@
|
||||
@{
|
||||
ViewData["Title"] = "Page d'accueil";
|
||||
}
|
||||
@section scripts {
|
||||
|
||||
<script src="~/js/str.js">
|
||||
</script>
|
||||
|
||||
}
|
10
src/Yavsc/Views/Home.new/Basket.cshtml
Normal file
10
src/Yavsc/Views/Home.new/Basket.cshtml
Normal file
@ -0,0 +1,10 @@
|
||||
@Model BasketView
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<a asp-controller="HaircutCommand" asp-action="Index">
|
||||
@Model.HairCutActiveQueryCount </a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
13
src/Yavsc/Views/Home.new/CGV.cshtml
Normal file
13
src/Yavsc/Views/Home.new/CGV.cshtml
Normal file
@ -0,0 +1,13 @@
|
||||
@{
|
||||
ViewData["Title"] = "Conditions Générales de Vente";
|
||||
}
|
||||
<h2>@ViewData["Title"]</h2>
|
||||
<markdown>
|
||||
|
||||
Le paiement intervient à la commande, quelque soit la date d'intervention.
|
||||
Vous pouvez annuler votre commande depuis la [liste de vos commande en cours](/HairCutCommand/),
|
||||
|
||||
Vous pouvez demander le remboursement d'un paiement, dans le cadre d'une réclamation sur l'execution
|
||||
de votre commande, en nous contactant via courrier éléctronique ou postal, [que vour retrouverez sur la page de contact](/Home/Contact), votre demande sera rapidement traitée.
|
||||
|
||||
</markdown>
|
22
src/Yavsc/Views/Home.new/Chat.cshtml
Normal file
22
src/Yavsc/Views/Home.new/Chat.cshtml
Normal file
@ -0,0 +1,22 @@
|
||||
@{ ViewBag.Title = "Chat"; }
|
||||
<h2>@ViewBag.Title</h2>
|
||||
|
||||
<label><input type="checkbox" id="mute" />Muet</label>
|
||||
|
||||
<div class="container disabled panel" id="chatview" data="fullchatview"
|
||||
data-chans="yavsc" data-mutectl="mute" ></div>
|
||||
|
||||
@section scripts {
|
||||
<!--Reference the autogenerated SignalR hub script. -->
|
||||
<script src="~/api/signalr/hubs"></script>
|
||||
<!-- SignalR script to update the chat page and send messages.-->
|
||||
|
||||
@if (!ViewBag.IsAuthenticated) { // Get the user name and store it to prepend to messages.
|
||||
<script>
|
||||
// var uname = prompt('Entrez votre nom:', '');
|
||||
|
||||
</script>
|
||||
}
|
||||
<script src="~/js/chat.js"></script>
|
||||
|
||||
}
|
17
src/Yavsc/Views/Home.new/Contact.cshtml
Executable file
17
src/Yavsc/Views/Home.new/Contact.cshtml
Executable file
@ -0,0 +1,17 @@
|
||||
@{
|
||||
ViewData["Title"] = "Contact";
|
||||
}
|
||||
<h2>@ViewData["Title"].</h2>
|
||||
<h3>@ViewData["Message"]</h3>
|
||||
|
||||
<address>
|
||||
Paul Schneider<br>
|
||||
2 Boulevard Aristide Briand -
|
||||
92150 Suresnes (France)
|
||||
<abbr title="Phone">P:</abbr> +33 6 51 14 15 64
|
||||
</address>
|
||||
|
||||
<address>
|
||||
<strong>Support:</strong> <a href="mailto:contact@pschneider.fr">contact@pschneider.fr</a><br />
|
||||
<strong>Marketing:</strong> <a href="mailto:paul@pschneider.fr">paul@pschneider.fr</a>
|
||||
</address>
|
19
src/Yavsc/Views/Home.new/Dash.cshtml
Normal file
19
src/Yavsc/Views/Home.new/Dash.cshtml
Normal file
@ -0,0 +1,19 @@
|
||||
@{
|
||||
ViewData["Title"] = "Dash";
|
||||
}
|
||||
|
||||
<div>
|
||||
<video id="videoPlayer" controls></video>
|
||||
</div>
|
||||
|
||||
@section scripts {
|
||||
<script src="~/js/dash.all.min.js"></script>
|
||||
<script>
|
||||
(function(){
|
||||
var url = "https://dash.akamaized.net/envivio/EnvivioDash3/manifest.mpd";
|
||||
var player = dashjs.MediaPlayer().create();
|
||||
player.initialize(document.querySelector("#videoPlayer"), url, true);
|
||||
})();
|
||||
</script>
|
||||
}
|
||||
|
8
src/Yavsc/Views/Home.new/Index.cshtml
Normal file
8
src/Yavsc/Views/Home.new/Index.cshtml
Normal file
@ -0,0 +1,8 @@
|
||||
@{
|
||||
ViewData["Title"] = "Home Page";
|
||||
}
|
||||
|
||||
<div class="text-center">
|
||||
<h1 class="display-4">Welcome</h1>
|
||||
<p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
|
||||
</div>
|
6
src/Yavsc/Views/Home.new/Privacy.cshtml
Normal file
6
src/Yavsc/Views/Home.new/Privacy.cshtml
Normal file
@ -0,0 +1,6 @@
|
||||
@{
|
||||
ViewData["Title"] = "Privacy Policy";
|
||||
}
|
||||
<h1>@ViewData["Title"]</h1>
|
||||
|
||||
<p>Use this page to detail your site's privacy policy.</p>
|
17
src/Yavsc/Views/Home.new/Todo.cshtml
Executable file
17
src/Yavsc/Views/Home.new/Todo.cshtml
Executable file
@ -0,0 +1,17 @@
|
||||
@{
|
||||
ViewData["Title"] = "Todo (first)";
|
||||
}
|
||||
<h1>@ViewData["Title"]</h1>
|
||||
<em>Linkmuse(trox)</em>
|
||||
|
||||
<markdown>
|
||||
Les tags.
|
||||
La librairie, les lives.
|
||||
</markdown>
|
||||
@{
|
||||
ViewData["Title"] = "TODO";
|
||||
}
|
||||
<h1>@ViewData["Title"]</h1>
|
||||
<em>Faster, stronger, shorter</em>
|
||||
<markdown>
|
||||
</markdown>
|
76
src/Yavsc/Views/Home.new/VideoChat.cshtml
Normal file
76
src/Yavsc/Views/Home.new/VideoChat.cshtml
Normal file
@ -0,0 +1,76 @@
|
||||
@{ ViewBag.Title = "video Chat"; }
|
||||
|
||||
|
||||
|
||||
<input type="file" accept="video/*;capture=camcorder" id="cam">
|
||||
<!-- <input type="file" accept="image/*;capture=camera" >
|
||||
<input type="file" accept="audio/*;capture=microphone"> -->
|
||||
<video autoplay id="localvideo">
|
||||
</video>
|
||||
@section scripts
|
||||
{
|
||||
<script>
|
||||
|
||||
function readURL(input) {
|
||||
if (input.files && input.files[0]) {
|
||||
var reader = new FileReader();
|
||||
|
||||
reader.onload = function (e) {
|
||||
$('#localvideo').attr('src', e.target.result);
|
||||
}
|
||||
|
||||
reader.readAsDataURL(input.files[0]);
|
||||
}
|
||||
}
|
||||
|
||||
$("#cam").change(function(){
|
||||
readURL(this);
|
||||
});
|
||||
|
||||
var errorCallback = function(e) {
|
||||
console.log('Reeeejected!', e);
|
||||
};
|
||||
|
||||
navigator.getUserMedia = navigator.getUserMedia ||
|
||||
navigator.webkitGetUserMedia ||
|
||||
navigator.mediaDevices.getUserMedia ||
|
||||
navigator.mozGetUserMedia ||
|
||||
navigator.msGetUserMedia;
|
||||
|
||||
// Not showing vendor prefixes.
|
||||
navigator.mediaDevices.getUserMedia({video: true, audio: true},
|
||||
function(localMediaStream) {
|
||||
var video = document.querySelector('video');
|
||||
video.src = window.URL.createObjectURL(localMediaStream);
|
||||
|
||||
// Note: onloadedmetadata doesn't fire in Chrome when using it with getUserMedia.
|
||||
// See crbug.com/110938.
|
||||
video.onloadedmetadata = function(e) {
|
||||
// Ready to go. Do some stuff.
|
||||
};
|
||||
}, errorCallback);
|
||||
|
||||
|
||||
if (navigator.mediaDevices.getUserMedia) {
|
||||
navigator.mediaDevices.getUserMedia({audio: true, video: false}, function(stream) {
|
||||
if ("srcObject" in video) {
|
||||
video.srcObject = "stream";
|
||||
} else {
|
||||
// Avoid using this in new browsers, as it is going away.
|
||||
video.src = window.URL.createObjectURL(stream);
|
||||
}
|
||||
}, errorCallback);
|
||||
} else {
|
||||
video.src = $("#cam").attr('src'); // fallback.
|
||||
}
|
||||
|
||||
$(document).ready(
|
||||
function () {
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
@{
|
||||
ViewData["Title"] = "About ";
|
||||
ViewData["Title"] = @SR["About"]+" "+@SiteSettings.Value.Title;
|
||||
}
|
||||
<h1>@ViewData["Title"]</h1>
|
||||
<environment names="Development">
|
||||
@ -98,6 +98,10 @@ C'est mon site pérso, une configuration de _Yavsc_ (encore une autre très peti
|
||||
* [README](https://github.com/pazof/yavsc/blob/vnext/README.md)
|
||||
* [license: GNU GPL v3](https://github.com/pazof/yavsc/blob/vnext/LICENSE)
|
||||
|
||||
Autres installations:
|
||||
</markdown>
|
||||
<markdown>
|
||||
* [Yavsc](http://yavsc.pschneider.fr)
|
||||
</markdown>
|
||||
</environment>
|
||||
|
||||
@ -119,8 +123,8 @@ C'est mon site pérso, une configuration de _Yavsc_ (encore une autre très peti
|
||||
|
||||
En production:
|
||||
|
||||
* [Lua](http://pschneider.fr:85)
|
||||
* [Yavsc](http://pschneider.fr:84)
|
||||
* [Lua](https://lua.pschneider.fr)
|
||||
* [Yavsc](https://yavsc.pschneider.fr)
|
||||
|
||||
</markdown>
|
||||
</environment>
|
||||
@ -140,7 +144,7 @@ elle vous rappelera.</markdown>
|
||||
|
||||
<environment names="Development">
|
||||
<markdown>
|
||||
## Ceci est un site de développement.
|
||||
## Ceci est un site de développement.
|
||||
|
||||
Cette présente ressource ne concerne que le développement du logiciel qui la met en oeuvre.
|
||||
Elle est éphémère, et pratiquement en permanence force de codes 500.
|
||||
@ -149,8 +153,8 @@ Veuillez excuser l'équipe de développement pour vous avoir fait part de cette
|
||||
|
||||
La "pré-production" affiche les sites suivants:
|
||||
|
||||
* [Lua](https://pschneider.fr:85)
|
||||
* [Yavsc](https://pschneider.fr:84)
|
||||
* [Yavsc](https://yavsc.pschneider.fr)
|
||||
* [Lua](https://lua.pschneider.fr)
|
||||
|
||||
</markdown>
|
||||
</environment>
|
||||
|
@ -1,5 +1,5 @@
|
||||
@{
|
||||
ViewData["Title"] = "About";
|
||||
ViewData["Title"] = @SR["About"]+" "+@SiteSettings.Value.Title;
|
||||
}
|
||||
<h1>@ViewData["Title"]</h1>
|
||||
<environment names="freefield,Development">
|
||||
@ -122,8 +122,8 @@ Outras instalações:
|
||||
|
||||
En production:
|
||||
|
||||
* [Lua](http://pschneider.fr:85)
|
||||
* [Yavsc](http://pschneider.fr:84)
|
||||
* [Lua](https://lua.pschneider.fr)
|
||||
* [Yavsc](https://yavsc.pschneider.fr)
|
||||
|
||||
</markdown>
|
||||
</environment>
|
||||
|
@ -1,5 +1,5 @@
|
||||
@{
|
||||
ViewData["Title"] = "À propos des restrictions d'accès";
|
||||
ViewData["Title"] = @SR["À propos des restrictions d'accès"];
|
||||
}
|
||||
<h1>@ViewData["Title"]</h1>
|
||||
|
||||
@ -35,4 +35,4 @@ Et ils possèdent une addresse permanente de la forme :
|
||||
|
||||
|
||||
|
||||
</markdown>
|
||||
</markdown>
|
@ -1,5 +1,5 @@
|
||||
@{
|
||||
ViewData["Title"] = "À propos de Markdown";
|
||||
ViewData["Title"] = @SR["À propos de Markdown"];
|
||||
}
|
||||
<h1>@ViewData["Title"]</h1>
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
@{
|
||||
ViewData["Title"] = "Page d'accueil";
|
||||
ViewData["Title"] = @SR["Page d'accueil"];
|
||||
}
|
||||
@section scripts {
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
@{
|
||||
ViewData["Title"] = "Dash";
|
||||
ViewData["Title"] = @SR["Dash"];
|
||||
}
|
||||
|
||||
<div>
|
||||
|
107
src/Yavsc/Views/Home/Index.cshtml
Normal file → Executable file
107
src/Yavsc/Views/Home/Index.cshtml
Normal file → Executable file
@ -1,8 +1,103 @@
|
||||
@{
|
||||
ViewData["Title"] = "Home Page";
|
||||
@model IEnumerable<Activity>
|
||||
|
||||
@{
|
||||
ViewData["Title"] = @SR["Page d'accueil"];
|
||||
int i=0;
|
||||
bool multipleact = Model.Count()>1;
|
||||
}
|
||||
@section scripts {
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
var car = $('.carousel').first();
|
||||
var fi = car.children('.carousel-inner').first()
|
||||
.children('.item').first();
|
||||
var capt = fi.children('.carousel-caption-s');
|
||||
|
||||
fi.addClass('active');
|
||||
car.animate({'background-color':'rgba(0, 0, 0, .5)'},500,function() {
|
||||
car.animate({'background-color':'rgba(0, 0, 0, 0)'},500)
|
||||
})
|
||||
})
|
||||
</script>
|
||||
}
|
||||
@section subbanner {
|
||||
|
||||
<div id="myCarousel" class="carousel slide" data-ride="carousel" data-interval="6000">
|
||||
@if (multipleact) {
|
||||
|
||||
<ol class="carousel-indicators">
|
||||
@{
|
||||
|
||||
foreach (var act in Model) {
|
||||
if (i==0) {
|
||||
<li data-target="#myCarousel" data-slide-to="0" class="active"></li>
|
||||
} else {
|
||||
<li data-target="#myCarousel" data-slide-to="@i"></li>
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
</ol> }
|
||||
<div class="carousel-inner" role="listbox">
|
||||
@{
|
||||
string cls = "item";
|
||||
i=0;
|
||||
foreach (var act in Model) {
|
||||
<div class="@cls" style="background-image: url('@act.Photo'); background-repeat: no-repeat; ">
|
||||
|
||||
<div class="carousel-caption-s" >
|
||||
<p><em>@act.Name</em><br/>
|
||||
@act.Description </p>
|
||||
|
||||
@if (act.Children.Count>0) {
|
||||
<a asp-route-id="@act.Code" class="btn btn-default">
|
||||
@foreach (Activity c in act.Children) {
|
||||
@Html.DisplayFor(subact=>c)
|
||||
}
|
||||
</a>
|
||||
}
|
||||
|
||||
@foreach (var frm in act.Forms) {
|
||||
<a class="btn btn-primary" asp-controller="FrontOffice" asp-action="@frm.ActionName" asp-route-id="@act.Code">
|
||||
@frm.Title
|
||||
</a>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
i++;
|
||||
cls = "item";
|
||||
}
|
||||
}
|
||||
</div>
|
||||
@if (multipleact) {
|
||||
<a class="left carousel-control" href="#myCarousel" role="button" data-slide="prev">
|
||||
<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
|
||||
<span class="sr-only">Précédent</span>
|
||||
</a>
|
||||
<a class="right carousel-control" href="#myCarousel" role="button" data-slide="next">
|
||||
<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
|
||||
<span class="sr-only">Suivant</span>
|
||||
</a>
|
||||
}
|
||||
</div>
|
||||
|
||||
}
|
||||
|
||||
<div class="text-center">
|
||||
<h1 class="display-4">Welcome</h1>
|
||||
<p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
|
||||
</div>
|
||||
@section ctxmenu {
|
||||
@if (ViewData["Announces"]!=null) {
|
||||
<li><a asp-controller="Announces" class="badge" >
|
||||
<img src="@SiteSettings.Value.Logo" alt="announces" title="Annonces @SiteSettings.Value.Title" /></a></li>
|
||||
}
|
||||
@if ((int)ViewData["HaircutCommandCount"]>0) {
|
||||
<li><a asp-controller="HairCutCommand" class="badge" >
|
||||
<img src="~/images/shoppingcart.svg" alt="basket" title="Vos bons de commande" />(@ViewData["HaircutCommandCount"])</a></li>
|
||||
}
|
||||
|
||||
}
|
||||
@section header {
|
||||
<style>
|
||||
.navbar {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
</style>
|
||||
}
|
@ -1,6 +1,14 @@
|
||||
@{
|
||||
ViewData["Title"] = "Privacy Policy";
|
||||
@{
|
||||
ViewData["Title"] = @SR["Confidentialité"]+" "+@SiteSettings.Value.Title;
|
||||
}
|
||||
<h1>@ViewData["Title"]</h1>
|
||||
|
||||
<p>Use this page to detail your site's privacy policy.</p>
|
||||
<markdown>
|
||||
## La confidentialité
|
||||
|
||||
À aucun moment, aucune adresse postale, aucune adresse e-mail ni aucun numéro de téléphone
|
||||
ne sont transmis à personne. Seul le système et son [possesseur](/Home/Contact) a accès à ces informations.
|
||||
|
||||
De plus, le droit de retrait est permanent et sa mise en oeuvre [immédiate](/Account/Delete).
|
||||
|
||||
</markdown>
|
@ -1,5 +1,5 @@
|
||||
@{
|
||||
ViewData["Title"] = "Todo (first)";
|
||||
ViewData["Title"] = @SR["Todo (first)"];
|
||||
}
|
||||
<h1>@ViewData["Title"]</h1>
|
||||
<em>Linkmuse(trox)</em>
|
||||
@ -9,7 +9,7 @@ Les tags.
|
||||
La librairie, les lives.
|
||||
</markdown>
|
||||
@{
|
||||
ViewData["Title"] = "TODO";
|
||||
ViewData["Title"] = @SR["TODO"];
|
||||
}
|
||||
<h1>@ViewData["Title"]</h1>
|
||||
<em>Faster, stronger, shorter</em>
|
||||
|
@ -54,7 +54,7 @@ $("#cam").change(function(){
|
||||
if (navigator.mediaDevices.getUserMedia) {
|
||||
navigator.mediaDevices.getUserMedia({audio: true, video: false}, function(stream) {
|
||||
if ("srcObject" in video) {
|
||||
video.srcObject = "stream";
|
||||
video.srcObject = stream;
|
||||
} else {
|
||||
// Avoid using this in new browsers, as it is going away.
|
||||
video.src = window.URL.createObjectURL(stream);
|
||||
@ -73,4 +73,4 @@ $("#cam").change(function(){
|
||||
|
||||
</script>
|
||||
|
||||
}
|
||||
}
|
@ -31,3 +31,5 @@
|
||||
|
||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
||||
@inject IAuthorizationService AuthorizationService
|
||||
@inject Microsoft.AspNetCore.Mvc.Localization.IHtmlLocalizer<Yavsc.Startup> SR
|
||||
@inject Microsoft.Extensions.Options.IOptions<SiteSettings> SiteSettings
|
||||
|
@ -7,7 +7,8 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.0-preview.1" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.4" />
|
||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="7.0.3" />
|
||||
<PackageReference Include="Google.Apis.Compute.v1" Version="1.60.0.2987" />
|
||||
<PackageReference Include="MarkdownDeep-av.NET" Version="1.5.27" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.SignalR" Version="1.1.0" />
|
||||
@ -17,6 +18,7 @@
|
||||
<PackageReference Include="pazof.rules" Version="1.1.3" />
|
||||
<PackageReference Include="RazorEngine.NetCore" Version="3.1.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Identity" Version="2.2.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.4" />
|
||||
|
||||
</ItemGroup>
|
||||
|
||||
|
@ -1,86 +0,0 @@
|
||||
{
|
||||
"Site": {
|
||||
"Authority": "dev.pschneider.fr",
|
||||
"Title": "Yavsc dev",
|
||||
"Slogan": "Yavsc : WIP.",
|
||||
"Banner": "/images/it/neworleans-louisiana-bywater-1973969-o.jpg",
|
||||
"HomeViewName": "Home",
|
||||
"FavIcon": "/favicon-dev.ico",
|
||||
"Logo": "/images/logo-dev.png",
|
||||
"StyleSheet":"/css/dev.css",
|
||||
"Owner": {
|
||||
"Name": "Paul",
|
||||
"EMail": "paul@pschneider.fr",
|
||||
"PostalAddress": {
|
||||
"Street1": "2 Blv A. Briand",
|
||||
"Street2": "Apt 284 - Bat V",
|
||||
"PostalCode": "92150",
|
||||
"City": "Suresnes",
|
||||
"State": "France",
|
||||
"Province": null
|
||||
}
|
||||
},
|
||||
"Admin": {
|
||||
"Name": "Paul",
|
||||
"EMail": "contact@pschneider.fr"
|
||||
},
|
||||
"Avatars": "Avatars-Dev",
|
||||
"Quota": 200000000,
|
||||
"Bills": "Bills-Dev",
|
||||
"Blog": "Blog-Dev",
|
||||
"TempDir": "Temp-Dev",
|
||||
"GitRepository": "/home/paul/workspace/tmp/test"
|
||||
},
|
||||
"Smtp": {
|
||||
"Host": "localhost",
|
||||
"Port": 25,
|
||||
"Domain": "pschneider.fr",
|
||||
"EnableSSL": false
|
||||
},
|
||||
"Logging": {
|
||||
"IncludeScopes": true,
|
||||
"LogLevel": {
|
||||
"Default": "Debug",
|
||||
"System": "Warning",
|
||||
"Microsoft": "Warning"
|
||||
}
|
||||
},
|
||||
"ConnectionStrings": {
|
||||
"Default": "Server=localhost;Port=5432;Database=YavscDev;Username=yavscdev;Password=admin;"
|
||||
},
|
||||
"Authentication": {
|
||||
"Google": {
|
||||
"ApiKey": "AIzaSyD_f77q1ZG5GaGwx6Ifa7apmLuz4zbMZAw",
|
||||
"BrowserApiKey": "AIzaSyCC_Dwpf2bTNybhpUsii-elIHyRnapduSY",
|
||||
"GoogleServiceAccountJson": "google-secret.json",
|
||||
"GoogleWebClientJson": "yavsc-client-secret.json"
|
||||
} ,
|
||||
"Facebook": {
|
||||
"AppId": "552433071604577",
|
||||
"AppToken": "552433071604577|Ahk_Jkn3i-0jixWV2wEiNQDqIFs"
|
||||
},
|
||||
"PayPal": {
|
||||
"Mode": "sandbox",
|
||||
"ClientId": "Ae9FgyE-R885ZSSiwtR_XlhaicGDqK5OEU912XOEQ5_LasTUtUtjT5zxAsb3tCl7croFnPtCAvYPeUAn",
|
||||
"ClientSecret": "EEYfxQNQp0rNdfTcCxmujtmvUEXASJ5FOK8F5acBB9_57hE67WwPheU0V4whE7Qgp1dd3p2IJYDExYXj",
|
||||
"Accounts": [{
|
||||
"ApiUsername": "paul_api1.pschneider.fr",
|
||||
"ApiPassword": "XE5TQ3VC5KB9B8AU",
|
||||
"Signature": "AFcWxV21C7fd0v3bYYYRCpSSRl31AnnEkKSPDeEm60yAsJkxHLEYDMUy"
|
||||
}],
|
||||
"ApplicationId": "APP-80W284485P519543T",
|
||||
"MerchantAccountId": "JL6JTE8C8SKLQ",
|
||||
"MerchantAccountUserName": "paul_api1.pschneider.fr"
|
||||
},
|
||||
"Societeinfo": {
|
||||
"ApiKey": "1b631h12vctbu25cqk2snlgbubebak6fd2f39t82jp7614a1asl"
|
||||
},
|
||||
"GitHub": {
|
||||
"ApiKey": "f248b78b21ee57f54a6cce7e7014f8ebf0620577"
|
||||
},
|
||||
"Twitter": {
|
||||
"ClientId": "fJAhbkzk9WZdTpCyjGHw1wBbx",
|
||||
"ClientSecret": "2tP84RWq6VkY4iwgQE9Rb75Nc5lmdX6XU2ppNMxF4h7ErBCbyg"
|
||||
}
|
||||
}
|
||||
}
|
@ -5,5 +5,70 @@
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "*"
|
||||
"AllowedHosts": "*",
|
||||
"ConnectionStrings": {
|
||||
"Default": "Server=[YOURSERVERNAME];Port=5432;Database=[YOURDBNAME];Username=[YOURDBUSERNAME];Password=[YOURDBPASSW];"
|
||||
},
|
||||
"Site": {
|
||||
"Title": "Yavsc",
|
||||
"Slogan": "Yavsc!",
|
||||
"StyleSheet": "/css/default.css",
|
||||
"Authority": "http://127.0.0.1:5000/",
|
||||
"Owner": {
|
||||
"Name": "[Site owner's name]",
|
||||
"EMail": "[Site owner's e-mail address]"
|
||||
},
|
||||
"Admin": {
|
||||
"Name": "[a name for a site admin]",
|
||||
"EMail": "[an e-mail for a site admin]"
|
||||
},
|
||||
"Avatars": "Avatars",
|
||||
"Quota": 200000000,
|
||||
"Bills": "Bills",
|
||||
"Blog": "Blog",
|
||||
"TempDir": "Temp"
|
||||
},
|
||||
"Smtp": {
|
||||
"Host": "[YOURSMTPHOST]",
|
||||
"Port": 25,
|
||||
"EnableSSL": false
|
||||
},
|
||||
"DataProtection": {
|
||||
"Keys": {
|
||||
"Dir": "DataProtection-Keys"
|
||||
},
|
||||
"RSAParamFile": "RSA-Params.json",
|
||||
"ExpiresInHours": 168
|
||||
},
|
||||
"Authentication": {
|
||||
"PayPal": {
|
||||
"Mode": "[sandbox|production]",
|
||||
"ClientId": "[Your PayPal REST API ClientId]",
|
||||
"Secret": "[Your PayPal REST API Secret]"
|
||||
},
|
||||
"Google": {
|
||||
"ApiKey": "[Your ApiKey]",
|
||||
"ClientId": "[Your ClientId]",
|
||||
"ClientSecret": "[Your ClientSecret]",
|
||||
"ServiceAccount": {
|
||||
"project_id": "[Yours]",
|
||||
"private_key_id": "[Yours]",
|
||||
"private_key": "-----[Yours]---\n",
|
||||
"client_email": "[Yours]@appspot.gserviceaccount.com",
|
||||
"client_id": "[Yours]",
|
||||
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
|
||||
"token_uri": "https://accounts.google.com/o/oauth2/token",
|
||||
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
|
||||
"client_x509_cert_url": "https://www41.googleapis.com/robot/v1/[Yours].com"
|
||||
}
|
||||
},
|
||||
"Facebook": {
|
||||
"ClientId": "[Your ClientId]",
|
||||
"ClientSecret": "[Your ClientSecret]"
|
||||
},
|
||||
"Twitter": {
|
||||
"ClientId": "[Your ClientId]",
|
||||
"ClientSecret": "[Your ClientSecret]"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user