Besciamello (#1)

* Fixed login & auth
* Added dynamic breadcrumb
* Added DOC
* Added Patient
* Added Notifications
* Added Messages
* Refactoring api
* Re-writed menu
* Removed unused things
* Created README
This commit was merged in pull request #1.
This commit is contained in:
Giacomo Bertolazzi 20015159
2019-01-15 21:35:00 +01:00
committed by GitHub
parent 191daf8218
commit 1246116804
36 changed files with 1154 additions and 535 deletions

View File

@@ -1,93 +1,154 @@
@model string
@inject IHttpContextAccessor HttpContextAccessor
@inject IDataContextFactory<SeniorDataContext> dbFactory
@model string
@{
ViewBag.Title = "Hello Razor";
var session = HttpContextAccessor.HttpContext.Session;
var username = session.GetString("username");
bool auth = username.Equals(Model);
bool isDoc = session.GetString("role").Equals("doctor");
Patient patient = null;
if (isDoc)
{
var db = dbFactory.Create();
patient = (from p in db.Patients
where p.Username.Equals(Model) && p.Doctor.Equals(username)
select p).ToArray().FirstOrDefault();
auth = auth || patient != null;
}
}
<div id="chart"></div>
<script>
var base_url = "@Url.Content("~/api/")";
var end_url = "/@Model/last/48";
$.getJSON(base_url + "heartbeat" + end_url, function (heartbeat) {
$.getJSON(base_url + "step" + end_url, function (steps) {
$.getJSON(base_url + "sleep" + end_url, function (sleep) {
var sleepArr = [];
sleep.forEach( function (el) {
sleepArr.push({ "time": el.time, "value": 1 });
var base_time = new Date(el.time).getTime();
for (var i = 60000; i <= el.value; i += 60000) {
sleepArr.push({ "time": new Date(base_time + i), "value": 1 });
@if (!auth)
{
<p class="box-title text-red">Non sei autorizzato a vedere i dati di @Model</p>
}
else
{
// Aggiungere un qualcosa per scegliere le ore da vedere (Max 48?)
<div>
<input id="hours-data" type="text" placeholder="hours" value="24" />
<button id="refresh-hours" class="fc-button">Cambia ora</button>
<div id="chart-data"></div>
</div>
@if(isDoc && patient != null)
{
<div>
<textarea id="note-area" placeholder="Scrivi una nota..">@patient.Notes</textarea>
<button id="send-note" class="btn">Salva</button>
<p id="note-error"></p>
</div>
<script>
$("#send-note").on("click", function () {
var text = $("#note-area").val().trim();
$.ajax({
url: "/Account/_addNote",
type: "PUT",
data: {
Patient: "@Model", Text: text
},
success: function (data) {
$("#note-error").html(data.success?"Nota salvata":data.message);
}
});
$("#chart").kendoChart({
title: { text: "Visualizzazione attivita' di @Model" },
legend: { position: "bottom" },
seriesDefaults: {
type: "line",
style: "smooth"
},
series: [{
name: "Battito",
field: "value",
color: "red",
axis: "Heartbeat",
categoryField: "time",
data: heartbeat,
tooltip: {
visible: true,
format: "{0}%",
template: "Media di: #= value # bpm"
}
}, {
name: "Passi",
field: "value",
color: "blue",
axis: "Steps",
categoryField: "time",
data: steps,
tooltip: {
visible: true,
format: "{0}%",
template: "#= series.name #: #= value #"
}
}, {
type: "area",
name: "Sonno",
field: "value",
color: "black",
axis: "Sleep",
categoryField: "time",
data: sleepArr
}],
categoryAxis: {
labels: {
rotation: +45,
dateFormats: {
hours: "HH:mm"
}
},
type: "Date",
baseUnit: "hours"
},
valueAxes: [{
name: "Heartbeat",
color: "red"
}, {
name: "Steps",
color: "blue"
}, {
name: "Sleep",
color: "gray",
visible: false,
max: 1,
min: 0
}]
})
})
})
});
</script>
});
</script>
}
<script>
$("#hours-data").on("change keyup paste click", function () {
var t = $(this);
t.val(t.val().replace(/[^0-9]/g, '').substring(0, 2));
});
$("#refresh-hours").on("click", function () {
var hours = $("#hours-data").val();
var base_url = "@Url.Content("~/api/")";
var end_url = "/@Model/last/" + hours;
$.getJSON(base_url + "heartbeat" + end_url, function (heartbeat) {
$.getJSON(base_url + "step" + end_url, function (steps) {
$.getJSON(base_url + "sleep" + end_url, function (sleep) {
var sleepArr = [];
sleep.forEach( function (el) {
sleepArr.push({ "time": el.time, "value": 1 });
var base_time = new Date(el.time).getTime();
for (var i = 60000; i <= el.value; i += 60000) {
sleepArr.push({ "time": new Date(base_time + i), "value": 1 });
}
});
$("#chart-data").kendoChart({
title: { text: "Visualizzazione attivita' di @Model" },
legend: { position: "bottom" },
seriesDefaults: {
type: "line",
style: "smooth"
},
series: [{
name: "Battito",
field: "value",
color: "red",
axis: "Heartbeat",
categoryField: "time",
data: heartbeat,
tooltip: {
visible: true,
format: "{0}%",
template: "Media di: #= value # bpm"
}
}, {
name: "Passi",
field: "value",
color: "blue",
axis: "Steps",
categoryField: "time",
data: steps,
tooltip: {
visible: true,
format: "{0}%",
template: "#= series.name #: #= value #"
}
}, {
type: "area",
name: "Sonno",
field: "value",
color: "black",
axis: "Sleep",
categoryField: "time",
data: sleepArr
}],
categoryAxis: {
labels: {
rotation: +45,
dateFormats: {
hours: "HH:mm"
}
},
type: "Date",
baseUnit: "hours"
},
valueAxes: [{
name: "Heartbeat",
color: "red"
}, {
name: "Steps",
color: "blue"
}, {
name: "Sleep",
color: "gray",
visible: false,
max: 1,
min: 0
}]
})
})
})
});
});
$("#refresh-hours").click();
</script>
}

View File

@@ -5,26 +5,32 @@ logo sito
disattivare l-aside e le opzioni
se non loggato deve tornare qua
-->
@model string
@inject IHttpContextAccessor HttpContextAccessor
@{
ViewBag.Title = "Hello Razor";
string session = HttpContextAccessor.HttpContext.Session.GetString("username");
}
<div class="content">
@if (session == null)
{
@if (Model != null)
{
<p class="text-red box-title">Per poter accedere alla pagina [@Model] e' necessario essere loggati</p>
}
<div class="login-box">
@{ await Html.RenderPartialAsync("Login"); }
</div>
<div class="login-box">
@{ await Html.RenderPartialAsync("Register");
}
@{ await Html.RenderPartialAsync("Register"); }
</div>
}
else
{
await Html.RenderPartialAsync("Profile");
await Html.RenderPartialAsync("Profile"); // magari sostituire qui
}
</div>

View File

@@ -0,0 +1,30 @@
@model int
@inject IHttpContextAccessor HttpContextAccessor
@inject IDataContextFactory<SeniorDataContext> dbFactory
@using LinqToDB;
@{
ViewBag.Title = "Hello Razor";
string username = HttpContextAccessor.HttpContext.Session.GetString("username");
var db = dbFactory.Create();
var message = (from m in db.Messages
where m.Id.Equals(Model) && m.Reciver.Equals(username)
select m).ToArray().FirstOrDefault();
}
<div class="content">
@if (message == null)
{
<p class="text-red">Non hai il permesso</p>
}
else
{
message.Seen = true;
db.Update(message);
<p>Messaggio da @message.Username</p>
<p>Inviato il @message.Time</p>
<div class="info-box-text">
@message.Body
</div>
}
</div>

View File

@@ -8,19 +8,11 @@
<script>
$(document).ready(function () {
var baseUrl = "@Url.Content("~/api/user/")";
$("#grid").kendoGrid({
dataSource: {
transport: {
read: { url: baseUrl, type: "GET" }
/*
parameterMap: function (model, operation) {
if (operation !== "read" && model) {
return kendo.stringify(model);
}
}
*/
},
serverPaging: false,
serverSorting: false,
@@ -30,7 +22,8 @@
id: "username",
fields: {
username: { type: "string" },
name: { type: "string" }
name: { type: "string" },
lastName: { type: "string" }
}
}
}
@@ -40,9 +33,10 @@
filterable: true,
editable: false,
columns: [
{ field: "username", title: "Username" },
{ field: "name", title: "Name" },
{ field: "url", title: "",template:'<a href=/user/#=username#>Vedi Dati</a>'}/*,
{ field: "lastName", title: "Lastname" },
{ field: "url", title: "", template: '<a href=/user/#=username#>Vedi Dati</a>' }
/*,
{ field: "time", title: "Date/Time", format: "{dd/MM/yyyy HH}" },
{ field: "value", title: "Heartbeats" }
*/

View File

@@ -3,7 +3,15 @@
var action = ViewContext.RouteData.Values["Action"];
}
<ol class="breadcrumb">
<li><a href="/"><i class="fa fa-dashboard"></i> @controller</a></li>
<li class="active">@action</li>
</ol>
<div class="breadcrumb">
@Html.ActionLink("Home", "Index", "Home")
@if (controller.ToString() != "Home")
{
@:> @Html.ActionLink(controller.ToString(), "Index", controller.ToString())
}
@if (action.ToString() != "Index")
{
@:> @Html.ActionLink(action.ToString(), action.ToString(), controller.ToString())
}
</div>

View File

@@ -1,13 +1,9 @@
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<!-- The user image in the navbar-->
<!-- hidden-xs hides the username on small devices so only the image appears. -->
</a>
<ul style="list-style-type:none">
<ul style="list-style-type:none">
<li class="user-header">
<input type="text" id="username" placeholder="username" />
<input type="password" id="password" placeholder="password" />
<div>
<button class="btn-default btn btn-flat" id="login-btn">Login</button>
<button class="btn-default btn btn-flat" id="login-btn">Login</button>
</div>
<p id="msg" class="login-box-msg"></p>
</li>
@@ -23,19 +19,17 @@
dataType: "json",
type: "POST",
success: function (data) {
console.log(data);
var msg = $("#msg");
if (data.success) {
msg.hide();
// app.navigate("");
window.location.reload();
} else {
msg.html(data.message).show();
$("#user-menu").addClass("open");
}
return false;
},
error: function (xhr, status, error) {
alert(xhr.responseText)
alert(xhr.status+" "+xhr.responseText)
}
})
});

View File

@@ -1,4 +1,10 @@
@model string
@inject IHttpContextAccessor HttpContextAccessor
@{
var session = HttpContextAccessor.HttpContext.Session;
}
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<!-- The user image in the navbar-->
<img src="~/AdminLTE-2.4.3/dist/img/user2-160x160.jpg" class="user-image" alt="User Image">
@@ -10,29 +16,14 @@
<li class="user-header">
<img src="~/AdminLTE-2.4.3/dist/img/user2-160x160.jpg" class="img-circle" alt="User Image">
<p>
Alexander Pierce - Web Developer
<small>Member since Nov. 2012</small>
@session.GetString("name") @session.GetString("lastname") - @session.GetString("role")
<small>@session.GetString("email")</small>
</p>
</li>
<!-- Menu Body -->
<li class="user-body">
<div class="row">
<div class="col-xs-4 text-center">
<a href="#">Followers</a>
</div>
<div class="col-xs-4 text-center">
<a href="#">Sales</a>
</div>
<div class="col-xs-4 text-center">
<a href="#">Friends</a>
</div>
</div>
<!-- /.row -->
</li>
<!-- Menu Footer-->
<li class="user-footer">
<div class="pull-left">
<a href="#" class="btn btn-default btn-flat">Profile</a>
<a href="/" class="btn btn-default btn-flat">Profile</a>
</div>
<div class="pull-right">
<a href="#" id="logout-btn" class="btn btn-default btn-flat">Logout</a>

View File

@@ -0,0 +1,90 @@
@model string
@inject IDataContextFactory<SeniorDataContext> dbFactory
@{
var db = dbFactory.Create();
var maxMessage = 10;
var notSeen = (from n in db.Messages
where n.Reciver.Equals(Model) && n.Seen == false
orderby n.Time descending
select n).Take(maxMessage).ToArray();
var messages = new Message[maxMessage];
var num = notSeen.Length;
int i;
for (i=0; i<num; i++)
{
messages[i] = notSeen[i];
}
if (num < maxMessage)
{
var messSeen = (from n in db.Messages
where n.Reciver.Equals(Model) && n.Seen == true
orderby n.Time descending
select n).Take(maxMessage-num).ToArray();
foreach(var m in messSeen)
{
messages[i] = m;
i++;
}
}
}
<!--
<script>
$(document).ready(
$.ajax({
type: "POST",
dataType: "json",
url: "/Account/_message",
data: { Username: "@Model", Message: "stronzo" },
success: function (data) {
console.log(data);
}
})
);
</script>
-->
<a id="id-message-toggle" href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-envelope-o"></i>
@if (num != 0)
{
<span class="label label-danger">
@num
@if(num > maxMessage)
{
@:+
}
</span>
}
</a>
@if (messages.Length != 0)
{
<ul id="id-message-drop" class="dropdown-menu">
<li class="header">You have @num unread message</li>
<li>
<!-- Inner Menu: contains the messages -->
<ul class="menu">
@foreach (var message in messages)
{
if(message != null)
{
<li>
<!-- start notification -->
<a id="message-@message.Id" @if(message.Seen) {<text>class= "bg-gray"</text>} href="/Message/@message.Id">
<i class="fa text-lime">@message.Time</i><br />
@message.Body
</a>
</li>
<!-- end message -->
}
}
</ul>
</li>
<!-- <li class="footer"><a href="#">View all</a></li> -->
</ul>
}

View File

@@ -6,116 +6,51 @@
<div class="navbar-custom-menu">
<ul class="nav navbar-nav">
<!-- Messages: style can be found in dropdown.less-->
<li class="dropdown messages-menu">
<!-- Menu toggle button -->
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-envelope-o"></i>
<span class="label label-success">4</span>
</a>
<ul class="dropdown-menu">
<li class="header">You have 4 messages</li>
<li>
<!-- inner menu: contains the messages -->
<ul class="menu">
<li>
<!-- start message -->
@if (session != null)
{
<!--
Scheletro di una roba sopra per le notifiche e messaggi e robe in piu...
<li class="dropdown ??-menu">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-??-o"></i>
<span class="label label-??">??</span>
</a>
<ul class="dropdown-menu">
<li class="header">??</li>
<li>
<ul class="menu">
<li>Elements Here</li>
<a href="#">
<div class="pull-left">
<!-- User Image -->
<img src="~/AdminLTE-2.4.3/dist/img/user2-160x160.jpg" class="img-circle" alt="User Image">
</div>
<!-- Message title and timestamp -->
<h4>
Support Team
<small><i class="fa fa-clock-o"></i> 5 mins</small>
</h4>
<!-- The message -->
<p>Why not buy a new awesome theme?</p>
</a>
</li>
<!-- end message -->
</ul>
<!-- /.menu -->
</li>
<li class="footer"><a href="#">See All Messages</a></li>
</ul>
</li>
<!-- /.messages-menu -->
<!-- Notifications Menu -->
<li class="dropdown notifications-menu">
<!-- Menu toggle button -->
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-bell-o"></i>
<span class="label label-warning">10</span>
</a>
<ul class="dropdown-menu">
<li class="header">You have 10 notifications</li>
<li>
<!-- Inner Menu: contains the notifications -->
<ul class="menu">
<li>
<!-- start notification -->
<a href="#">
<i class="fa fa-users text-aqua"></i> 5 new members joined today
</a>
</li>
<!-- end notification -->
</ul>
</li>
<li class="footer"><a href="#">View all</a></li>
</ul>
</li>
<!-- Tasks Menu -->
<li class="dropdown tasks-menu">
<!-- Menu Toggle Button -->
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-flag-o"></i>
<span class="label label-danger">9</span>
</a>
<ul class="dropdown-menu">
<li class="header">You have 9 tasks</li>
<li>
<!-- Inner menu: contains the tasks -->
<ul class="menu">
<li>
<!-- Task item -->
<a href="#">
<!-- Task title and progress text -->
<h3>
Design some buttons
<small class="pull-right">20%</small>
</h3>
<!-- The progress bar -->
<div class="progress xs">
<!-- Change the css width attribute to simulate progress -->
<div class="progress-bar progress-bar-aqua" style="width: 20%" role="progressbar"
aria-valuenow="20" aria-valuemin="0" aria-valuemax="100">
<span class="sr-only">20% Complete</span>
</div>
</div>
</a>
</li>
<!-- end task item -->
</ul>
</li>
<li class="footer">
<a href="#">View all tasks</a>
</li>
</ul>
</li>
<!-- User Account Menu -->
<li id="user-menu" class="dropdown user user-menu">
<!-- Menu Toggle Button -->
@if(session != null)
{
await Html.RenderPartialAsync("Logout", session);
}
</ul>
</li>
</ul>
</li>
-->
<li class="dropdown messages-menu">
@{ await Html.RenderPartialAsync("Messages", session); }
</li>
<li class="dropdown notifications-menu">
@{ await Html.RenderPartialAsync("Notifications", session); }
</li>
<li id="user-menu" class="dropdown user user-menu">
@{ await Html.RenderPartialAsync("Logout", session); }
</li>
</li>
<!-- Control Sidebar Toggle Button -->
<li>
<a href="#" data-toggle="control-sidebar"><i class="fa fa-gears"></i></a>
</li>
<!-- Control Sidebar Toggle Button -->
<!--
<li>
<a href="#" data-toggle="control-sidebar"><i class="fa fa-gears"></i></a>
</li>
-->
}
</ul>
</div>

View File

@@ -0,0 +1,82 @@
@model string
@inject IDataContextFactory<SeniorDataContext> dbFactory
@{
var db = dbFactory.Create();
var notifications = (from n in db.Notifications
where n.Username.Equals(Model) && n.Seen == false
orderby n.Time
select n).ToArray();
var num = notifications.Length;
}
<!--
<script>
$(document).ready(
$.ajax({
type: "POST",
dataType: "json",
url: "/Account/_notification",
data: { Username: "@Model", Message: "stronzo" },
success: function (data) {
console.log(data);
}
})
);
</script>
-->
<a id="id-notification-toggle" href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-bell-o"></i>
@if (num != 0)
{
<span class="label label-warning">@num</span>
}
</a>
@if (num != 0)
{
<ul id="id-notification-drop" class="dropdown-menu">
<li class="header">You have @num notifications</li>
<li>
<!-- Inner Menu: contains the notifications -->
<ul class="menu">
@foreach (var notification in notifications)
{
<li>
<!-- start notification -->
<a id="notification-@notification.Id" href="#">
<i class="fa fa-users text-aqua">@notification.Time</i><br />
@notification.Message
</a>
</li>
<!-- end notification -->
}
</ul>
</li>
<!-- <li class="footer"><a href="#">View all</a></li> -->
</ul>
<script>
var user = "@Model";
$("[id^='notification-']").on("click", function () {
var id = this.id.replace(/notification-/g, '');
var allId = this.id;
$.ajax({
type: "PUT",
dataType: "json",
url: "/Account/_notification",
data: { id: id },
success: function () {
$("#" + allId).remove();
var num = parseInt($("#id-notification-toggle span").html()) - 1;
if (num == 0) {
$("#id-notification-toggle span").remove();
$("#id-notification-drop").remove();
}
else
$("#id-notification-toggle span").html(num);
}
});
});
</script>
}

View File

@@ -1,16 +1,162 @@
@model User
@inject IHttpContextAccessor HttpContextAccessor
@inject IHttpContextAccessor HttpContextAccessor
@inject IDataContextFactory<SeniorDataContext> dbFactory
@{
var session = HttpContextAccessor.HttpContext.Session;
var db = dbFactory.Create();
var username = session.GetString("username");
var patientData = db.Patients.Where(p => p.Username.Equals(username)).ToArray().FirstOrDefault();
var hasDoc = patientData != null;
}
<div class="content">
<h2 class="alert-success" style="text-align:center">
Welcome @session.GetString("username")
<div class="pull-left" , style="width: 50%">
<h2 class="alert-success" style="text-align:center">
Welcome @username
</h2>
name: @session.GetString("name")<br />
lastname: @session.GetString("lastname")<br />
email: @session.GetString("email")<br />
</div>
</h2>
name: @session.GetString("name")<br />
lastname: @session.GetString("lastname")<br />
email: @session.GetString("email")
<div class="box pull-right" , style="width: 45%">
@if (hasDoc) // is patient and has doc, must show doc data
{
var doctor = (from u in db.Users
join d in db.Doctors on u.Username equals d.Username
where d.Username.Equals(patientData.Doctor)
select new { u.Username, u.Name, u.LastName, d.Location }).ToArray().First();
<p class="text-bold">Dottore: @doctor.Name @doctor.LastName</p>
<p class="text-fuchsia">Dove mi puoi trovare? @doctor.Location</p>
<textarea class="progress-text" placeholder="Nessuna nuova nota" readonly>@patientData.Notes</textarea>
<div id="send-doc-message">
<p>Invia un messaggio al tuo dottore</p>
<textarea id="doc-message" class="progress-text" placeholder="scrivi qui"></textarea>
<button id="btn-send-message">Invia</button>
<p id="message-error" class="text-red"></p>
<script>
$("#btn-send-message").on("click", function () {
var body = $("#doc-message").val().trim();
var endMessage = $("#message-error");
if (body.length < 20) {
endMessage.html("Messaggio non valido (minimo 20 caratteri)");
return false;
}
$.ajax({
url: "Account/_sendMessage",
type: "POST",
data: {
Reciver: "@doctor.Username",
Body: body
},
success: function () {
$("#doc-message").val("");
endMessage.html("Messaggio inviato");
}
});
});
</script>
</div>
}
else
{
dynamic[] data;
Type type = null;
string title = null;
var docData = db.Doctors.Where(d => d.Username.Equals(username)).ToArray().FirstOrDefault();
if (docData != null) // is DOC
{
// see all the patient of the doc
title = "Lista dei pazienti";
var patients = (from u in db.Users
join p in db.Patients on u.Username equals p.Username
where p.Doctor.Equals(docData.Username)
select new { u.Username, u.Name, u.LastName, p.Notes, Profile = "<a href=\\\"/user/" + u.Username + "\\\">Profile</a>" }).ToArray();
data = patients;
type = patients.FirstOrDefault().GetType();
}
else // is a patient and need to choose a doctor
{
// choose which doc you want
title = "Scegli un Doc";
var docs = (from u in db.Users
join d in db.Doctors on u.Username equals d.Username
select new { u.Username, u.Name, u.LastName, d.Location, Choose = "<a id=\\\"choose-" + u.Username + "\\\" href=#>Scegli</a>" }).ToArray();
data = docs;
type = docs.FirstOrDefault().GetType();
}
var fields = new List<string>();
foreach (var field in type.GetProperties())
{
fields.Add(field.Name);
}
<p>@title</p>
<div id="var-table"></div>
<script>
var datas = [
@foreach (var el in data)
{
@:{
@foreach (var field in fields)
{
@field@:: "@Html.Raw(type.GetProperty(field).GetValue(el, null))",
}
@:},
}
];
$(document).ready(function () {
$("#var-table").kendoGrid({
dataSource: {
data: datas,
schema: {
model: {
fields: {
@foreach (var field in fields)
{
@field@: : { type: "@field.GetType().Name" },
}
}
}
}
},
scrollable: true,
sortable: true,
filterable: true,
columns: [
@foreach (var field in fields)
{
@:{ field: "@field", title: "@field", template: "#=@field#" },
}
]
});
@if(docData == null) // choose a doc
{
<text>
$('[id^="choose-"]').on("click", function () {
var id = this.id.replace("choose-", '');
$.ajax({
type: "POST",
url: "/Account/_addDoc",
data: { doctor: id },
success: function (data) {
if (data.success) {
window.location.reload();
}
}
})
})
</text>
}
});
</script>
}
</div>
</div>

View File

@@ -1,8 +1,10 @@
<ul style="list-style: none">
<li class="user-header">
<input type="text" id="regUsername" placeholder="username" />
<input type="password" id="regPassword" placeholder="password" />
<input type="email" id="regEmail" placeholder="example@qualcosa.qualcosa" />
<input type="text" id="regUsername" placeholder="Username" required />
<input type="text" id="regName" placeholder="Name" />
<input type="text" id="regLastname" placeholder="Lastname" />
<input type="password" id="regPassword" placeholder="Password" required />
<input type="email" id="regEmail" placeholder="Email" required />
<label>Doc?</label><input type="checkbox" id="regDoctor" />
<div>
<button class="btn-default btn btn-flat" id="register-btn">Register</button>
@@ -13,20 +15,26 @@
<script>
$("#register-btn").on("click", function () {
var regUsername = $("#regUsername").val();
var regPassword = $("#regPassword").val();
var regEmail = $("#regEmail").val();
var regDoctor = $("#regDoctor").is(":checked");
var username = $("#regUsername").val();
var name = $("#regName").val();
var lastname = $("#regLastname").val();
var password = $("#regPassword").val();
var email = $("#regEmail").val();
var role = $("#regDoctor").is(":checked")? "Doctor":"User";
$.ajax({
url: "/Account/_register",
data: { Username: regUsername, Password: regPassword, Email: regEmail},
data: {
Username: username,
Name: name,
Lastname: lastname,
Password: password,
Email: email,
Role: role
},
dataType: "json",
type: "POST",
success: function (data) {
//se data.success->reload
//se data.fail->indica errori
console.log(data);
var msg = $("#msg-reg");
if (data.success) {
window.location.reload();

View File

@@ -1,9 +1,36 @@
@inject IEnumerable<IMenuItem> Menu
@inject IList<IMenuItem> Menu
@inject IHttpContextAccessor HttpContextAccessor
@inject IDataContextFactory<SeniorDataContext> dbFactory
<ul class="sidebar-menu" data-widget="tree">
@foreach(var menuItem in Menu)
@{
var session = HttpContextAccessor.HttpContext.Session;
string username = session.GetString("username");
if (username != null)
{
switch(menuItem)
Menu = new List<IMenuItem>(Menu);
Menu.RemoveAt(1);
Menu.Insert(1, new MenuItem("Dati personali", "/user/" + username));
if (session.GetString("role").Equals("doctor"))
{
var db = dbFactory.Create();
var patients = (from p in db.Patients
where p.Doctor.Equals(username)
join u in db.Users on p.Username equals u.Username
select new { Username = p.Username, Name = u.Name + " " + u.LastName }).ToArray();
var sub = new SubMenu() { Text = "Pazienti", Items = new List<MenuItem>() };
foreach (var p in patients)
{
sub.Items.Add(new MenuItem(p.Name, "/user/" + p.Username));
}
Menu.Add(sub);
}
}
}
<ul class="sidebar-menu" data-widget="tree">
@foreach (var menuItem in Menu)
{
switch (menuItem)
{
case MenuItem single:
<li>

View File

@@ -17,7 +17,7 @@ scratch. This page gets rid of all links and provides the needed markup only.
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>@ViewBag.Title</title>
<title>SeniorAssistant @ViewBag.Title</title>
<!-- Tell the browser to be responsive to screen width -->
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<link rel="stylesheet" href="~/AdminLTE-2.4.3/bower_components/bootstrap/dist/css/bootstrap.min.css">
@@ -136,75 +136,6 @@ desired effect
<div>
@{ await Html.RenderPartialAsync("Footer"); }
</div>
<!-- Control Sidebar -->
<aside class="control-sidebar control-sidebar-dark">
<!-- Create the tabs -->
<ul class="nav nav-tabs nav-justified control-sidebar-tabs">
<li class="active"><a href="#control-sidebar-home-tab" data-toggle="tab"><i class="fa fa-home"></i></a></li>
<li><a href="#control-sidebar-settings-tab" data-toggle="tab"><i class="fa fa-gears"></i></a></li>
</ul>
<!-- Tab panes -->
<div class="tab-content">
<!-- Home tab content -->
<div class="tab-pane active" id="control-sidebar-home-tab">
<h3 class="control-sidebar-heading">Recent Activity</h3>
<ul class="control-sidebar-menu">
<li>
<a href="javascript:;">
<i class="menu-icon fa fa-birthday-cake bg-red"></i>
<div class="menu-info">
<h4 class="control-sidebar-subheading">Langdon's Birthday</h4>
<p>Will be 23 on April 24th</p>
</div>
</a>
</li>
</ul>
<!-- /.control-sidebar-menu -->
<h3 class="control-sidebar-heading">Tasks Progress</h3>
<ul class="control-sidebar-menu">
<li>
<a href="javascript:;">
<h4 class="control-sidebar-subheading">
Custom Template Design
<span class="pull-right-container">
<span class="label label-danger pull-right">70%</span>
</span>
</h4>
<div class="progress progress-xxs">
<div class="progress-bar progress-bar-danger" style="width: 70%"></div>
</div>
</a>
</li>
</ul>
<!-- /.control-sidebar-menu -->
</div>
<!-- /.tab-pane -->
<!-- Stats tab content -->
<div class="tab-pane" id="control-sidebar-stats-tab">Stats Tab Content</div>
<!-- /.tab-pane -->
<!-- Settings tab content -->
<div class="tab-pane" id="control-sidebar-settings-tab">
<form method="post">
<h3 class="control-sidebar-heading">General Settings</h3>
<div class="form-group">
<label class="control-sidebar-subheading">
Report panel usage
<input type="checkbox" class="pull-right" checked>
</label>
<p>
Some information about this general settings option
</p>
</div>
<!-- /.form-group -->
</form>
</div>
<!-- /.tab-pane -->
</div>
</aside>
<!-- /.control-sidebar -->
<!-- Add the sidebar's background. This div must be placed
immediately after the control sidebar -->
<div class="control-sidebar-bg"></div>
</div>
<!-- ./wrapper -->
<!-- REQUIRED JS SCRIPTS -->

View File

@@ -1,3 +1,5 @@
@using SeniorAssistant.Models
@using SeniorAssistant.Models;
@using SeniorAssistant.Models.Users;
@using SeniorAssistant.Data;
@using Microsoft.AspNetCore.Mvc;
@using Microsoft.AspNetCore.Http;