Compare commits
8 Commits
tonitch/ma
...
meetings
Author | SHA1 | Date | |
---|---|---|---|
436ba59af1
|
|||
82b4e24d03
|
|||
9e0db361b8 | |||
7a13d412f1 | |||
9de4b06e75 | |||
123fa97611 | |||
1fad792be7 | |||
acd1262955
|
@ -25,7 +25,7 @@ dependencies {
|
|||||||
implementation("com.kohlschutter.junixsocket:junixsocket-core:2.9.0")
|
implementation("com.kohlschutter.junixsocket:junixsocket-core:2.9.0")
|
||||||
// implementation("org.springframework.session:spring-session-jdbc")
|
// implementation("org.springframework.session:spring-session-jdbc")
|
||||||
developmentOnly("org.springframework.boot:spring-boot-devtools")
|
developmentOnly("org.springframework.boot:spring-boot-devtools")
|
||||||
// developmentOnly("org.springframework.boot:spring-boot-docker-compose")
|
developmentOnly("org.springframework.boot:spring-boot-docker-compose")
|
||||||
runtimeOnly("org.postgresql:postgresql")
|
runtimeOnly("org.postgresql:postgresql")
|
||||||
testImplementation("org.springframework.boot:spring-boot-starter-test")
|
testImplementation("org.springframework.boot:spring-boot-starter-test")
|
||||||
testImplementation("org.springframework.boot:spring-boot-testcontainers")
|
testImplementation("org.springframework.boot:spring-boot-testcontainers")
|
||||||
|
@ -0,0 +1,9 @@
|
|||||||
|
package ovh.herisson.Clyde.Tables.Msg;
|
||||||
|
|
||||||
|
public enum AppointmentStatus {
|
||||||
|
WAITING_TEACHER,
|
||||||
|
WAITING_STUDENT,
|
||||||
|
CONFIRMED,
|
||||||
|
REFUSED
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,30 @@
|
|||||||
|
package ovh.herisson.Clyde.Tables.Msg;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.EnumType;
|
||||||
|
import jakarta.persistence.Enumerated;
|
||||||
|
import jakarta.persistence.GeneratedValue;
|
||||||
|
import jakarta.persistence.GenerationType;
|
||||||
|
import jakarta.persistence.Id;
|
||||||
|
import jakarta.persistence.ManyToOne;
|
||||||
|
import ovh.herisson.Clyde.Tables.User;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
public class Appointments {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||||
|
private int id;
|
||||||
|
|
||||||
|
@ManyToOne
|
||||||
|
private User teacher, student;
|
||||||
|
|
||||||
|
private Date planned;
|
||||||
|
|
||||||
|
@Enumerated(EnumType.STRING)
|
||||||
|
private AppointmentStatus status;
|
||||||
|
|
||||||
|
}
|
15
frontend/package-lock.json
generated
15
frontend/package-lock.json
generated
@ -8,7 +8,6 @@
|
|||||||
"name": "clyde",
|
"name": "clyde",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@canvasjs/vue-charts": "^1.0.4",
|
|
||||||
"vite-plugin-top-level-await": "^1.4.1",
|
"vite-plugin-top-level-await": "^1.4.1",
|
||||||
"vue": "^3.4.15",
|
"vue": "^3.4.15",
|
||||||
"vue3-toastify": "^0.2.1"
|
"vue3-toastify": "^0.2.1"
|
||||||
@ -30,20 +29,6 @@
|
|||||||
"node": ">=6.0.0"
|
"node": ">=6.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@canvasjs/charts": {
|
|
||||||
"version": "3.7.45",
|
|
||||||
"resolved": "https://registry.npmjs.org/@canvasjs/charts/-/charts-3.7.45.tgz",
|
|
||||||
"integrity": "sha512-FPMX8wn+PEHzAa/GLBsL5lWB81AzKZLw51t7SiSUjMbtUN5/OIrmDcwUTw+53/Bbdd9gm2LLmxAdZsQ75JI31g=="
|
|
||||||
},
|
|
||||||
"node_modules/@canvasjs/vue-charts": {
|
|
||||||
"version": "1.0.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/@canvasjs/vue-charts/-/vue-charts-1.0.4.tgz",
|
|
||||||
"integrity": "sha512-PzOA8xeb/f68a39uoFZNn843dGPU36bsqmbO5DWjP7k6FwkK5AeGkYa/H3RHC02Xc6mG68vg9aFNj2Fyqhu4UQ==",
|
|
||||||
"dependencies": {
|
|
||||||
"@canvasjs/charts": "^3.7.5",
|
|
||||||
"vue": ">=3.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@esbuild/aix-ppc64": {
|
"node_modules/@esbuild/aix-ppc64": {
|
||||||
"version": "0.19.12",
|
"version": "0.19.12",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz",
|
||||||
|
@ -9,7 +9,6 @@
|
|||||||
"preview": "vite preview"
|
"preview": "vite preview"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@canvasjs/vue-charts": "^1.0.4",
|
|
||||||
"vite-plugin-top-level-await": "^1.4.1",
|
"vite-plugin-top-level-await": "^1.4.1",
|
||||||
"vue": "^3.4.15",
|
"vue": "^3.4.15",
|
||||||
"vue3-toastify": "^0.2.1"
|
"vue3-toastify": "^0.2.1"
|
||||||
|
@ -20,6 +20,7 @@ app.login=Login
|
|||||||
app.notifications=Notifications
|
app.notifications=Notifications
|
||||||
app.settings=Settings
|
app.settings=Settings
|
||||||
app.messages=Messages
|
app.messages=Messages
|
||||||
|
app.meetings=Meetings
|
||||||
app.forum=Forum
|
app.forum=Forum
|
||||||
app.schedules=Schedules
|
app.schedules=Schedules
|
||||||
app.inscription.requests=Inscription Requests
|
app.inscription.requests=Inscription Requests
|
||||||
|
@ -20,6 +20,7 @@ app.login=Se connecter
|
|||||||
app.notifications=Notifications
|
app.notifications=Notifications
|
||||||
app.settings=Options
|
app.settings=Options
|
||||||
app.messages=Messages
|
app.messages=Messages
|
||||||
|
app.meetings=Rendez-vous
|
||||||
app.forum=Forum
|
app.forum=Forum
|
||||||
app.schedules=Horaires
|
app.schedules=Horaires
|
||||||
app.inscription.requests=Demandes d'Inscription
|
app.inscription.requests=Demandes d'Inscription
|
||||||
|
11
frontend/src/Apps/Meetings.vue
Normal file
11
frontend/src/Apps/Meetings.vue
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<template>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
alert("Meetings page WIP")
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
@ -1,236 +0,0 @@
|
|||||||
<!----------------------------------------------------
|
|
||||||
File: ResearcherProfile.vue
|
|
||||||
Author: Maxime Bartha
|
|
||||||
Scope: Extension Publicatons scientifiquess
|
|
||||||
Description: Researcher Profile Page containing his articles and his statistics
|
|
||||||
----------------------------------------------------->
|
|
||||||
|
|
||||||
<script setup>
|
|
||||||
import { ref, reactive } from "vue";
|
|
||||||
const input = ref("");
|
|
||||||
const statsOf = ref("");
|
|
||||||
const statsBy = ref("");
|
|
||||||
let chart;
|
|
||||||
|
|
||||||
const jsonMockViewsByYears= [
|
|
||||||
{label: "2004", y:4},
|
|
||||||
{label: "2005", y:99},
|
|
||||||
{label: "2007", y:555},
|
|
||||||
{label: "2009", y:22},
|
|
||||||
{label: "2011", y:1666},
|
|
||||||
]
|
|
||||||
|
|
||||||
function inputKeyUp() {
|
|
||||||
let filter, ul, li, a, txtValue;
|
|
||||||
filter = input.value.toUpperCase();
|
|
||||||
if (document.getElementById("myUL") != null) {
|
|
||||||
ul = document.getElementById("myUL");
|
|
||||||
li = ul.getElementsByTagName("li");
|
|
||||||
|
|
||||||
// Loop through all list items, and hide those who don't match the search query
|
|
||||||
for (let i = 0; i < li.length; i++) {
|
|
||||||
a = li[i].getElementsByTagName("a")[0];
|
|
||||||
txtValue = a.textContent || a.innerText;
|
|
||||||
if (txtValue.toUpperCase().indexOf(filter) > -1) {
|
|
||||||
li[i].style.display = "";
|
|
||||||
} else {
|
|
||||||
li[i].style.display = "none";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const options = reactive({
|
|
||||||
backgroundColor:null,
|
|
||||||
theme: "light2",
|
|
||||||
animationEnabled: true,
|
|
||||||
title: {
|
|
||||||
fontColor: "white",
|
|
||||||
text : "please select options",
|
|
||||||
},
|
|
||||||
data: [
|
|
||||||
{
|
|
||||||
type: "pie",
|
|
||||||
indexLabel: "{label} (#percent%)",
|
|
||||||
yValueFormatString: "#,##0",
|
|
||||||
indexLabelFontColor: "white",
|
|
||||||
toolTipContent:
|
|
||||||
"<span style='\"'color: {color};'\"'>{label}</span> {y}(#percent%)",
|
|
||||||
}]
|
|
||||||
});
|
|
||||||
|
|
||||||
function update(){
|
|
||||||
options.title = {
|
|
||||||
fontColor: "white",
|
|
||||||
text: statsOf.value + " By "+ statsBy.value,
|
|
||||||
}
|
|
||||||
if (statsOf.value === "views" && statsBy.value === "years") {
|
|
||||||
options.data[0].dataPoints = jsonMockViewsByYears;
|
|
||||||
}
|
|
||||||
|
|
||||||
options.title.text = statsOf.value + " By "+ statsBy.value;
|
|
||||||
chart.render()
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div id="main">
|
|
||||||
<div id="profilePicture">
|
|
||||||
<img src="/Clyde.png" />
|
|
||||||
</div>
|
|
||||||
<div id="researcherInfos">
|
|
||||||
<div class="surrounded">John Doe</div>
|
|
||||||
<div class="surrounded">Orcid : 12144-2144-12336-B</div>
|
|
||||||
<div class="surrounded">Email : John.Doe@umons.ac.be</div>
|
|
||||||
|
|
||||||
<div class="surrounded">
|
|
||||||
site :
|
|
||||||
<a href="http://localhost:5173" style="color: #007aff">here</a>
|
|
||||||
</div>
|
|
||||||
<div class="surrounded">Domain : physics, IT</div>
|
|
||||||
<div id="coAuthorList" class="surrounded">Co-authors list : D</div>
|
|
||||||
</div>
|
|
||||||
<div id="stats">
|
|
||||||
<div class="surrounded">
|
|
||||||
Stat type :
|
|
||||||
<select @change="update()" id="stats-select" v-model="statsOf">
|
|
||||||
<option value="views">Views</option>
|
|
||||||
<option value="co-authors">Co-authors</option>
|
|
||||||
<option value="articles">Articles</option>
|
|
||||||
<option value="language">Languages</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div class="surrounded">
|
|
||||||
Class by:
|
|
||||||
<select @change="update()" id="classed-select" v-model="statsBy">
|
|
||||||
<option selected="selected" value="years">Years</option>
|
|
||||||
<option value="months">Months</option>
|
|
||||||
<option value="topics">Topics</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div id="statsPie">
|
|
||||||
<CanvasJSChart :options="options" id=chart @chart-ref="c => chart = c "/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="articles">
|
|
||||||
<input
|
|
||||||
type="text"
|
|
||||||
id="search-input"
|
|
||||||
@keyup="inputKeyUp()"
|
|
||||||
placeholder="search articles"
|
|
||||||
v-model="input"
|
|
||||||
/>
|
|
||||||
<ul id="myUL">
|
|
||||||
<li><a href="#">Adele</a></li>
|
|
||||||
<li><a href="#">Agnes</a></li>
|
|
||||||
|
|
||||||
<li><a href="#">Billy</a></li>
|
|
||||||
<li><a href="#">Bob</a></li>
|
|
||||||
|
|
||||||
<li><a href="#">Calvin</a></li>
|
|
||||||
<li><a href="#">Christina</a></li>
|
|
||||||
<li><a href="#">Cindy</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
#main {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: 22% auto;
|
|
||||||
grid-template-rows: 26% auto;
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#profilePicture {
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
#profilePicture img {
|
|
||||||
align-self: center;
|
|
||||||
justify-self: center;
|
|
||||||
width: 60%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#researcherInfos {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: auto auto auto;
|
|
||||||
column-gap: 5px;
|
|
||||||
grid-template-rows: auto auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.surrounded {
|
|
||||||
border: 2px solid black;
|
|
||||||
color: white;
|
|
||||||
font-size: x-large;
|
|
||||||
align-self: center;
|
|
||||||
text-align: center;
|
|
||||||
background-color: rgba(255, 255, 255, 0.09);
|
|
||||||
border-radius: 20px;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.surrounded select {
|
|
||||||
margin-top: 2px;
|
|
||||||
margin-bottom: 2px;
|
|
||||||
border: 1px solid black;
|
|
||||||
color: white;
|
|
||||||
background-color: rgb(255, 255, 255, 0.1);
|
|
||||||
font-size: large;
|
|
||||||
align-self: center;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
#statsPie {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#articles {
|
|
||||||
background-color: orange;
|
|
||||||
}
|
|
||||||
|
|
||||||
#search-input {
|
|
||||||
width: 60%;
|
|
||||||
font-size: 16px;
|
|
||||||
padding: 12px 20px 12px 40px;
|
|
||||||
border: 1px solid #ddd;
|
|
||||||
margin-bottom: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#myUL {
|
|
||||||
list-style-type: none;
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#myUL li a {
|
|
||||||
border: 1px solid #ddd;
|
|
||||||
/* Add a border to all links */
|
|
||||||
margin-top: -1px;
|
|
||||||
/* Prevent double borders */
|
|
||||||
background-color: #f6f6f6;
|
|
||||||
/* Grey background color */
|
|
||||||
padding: 12px;
|
|
||||||
/* Add some padding */
|
|
||||||
text-decoration: none;
|
|
||||||
/* Remove default text underline */
|
|
||||||
font-size: 18px;
|
|
||||||
/* Increase the font-size */
|
|
||||||
color: black;
|
|
||||||
/* Add a black text color */
|
|
||||||
display: block;
|
|
||||||
/* Make it into a block element to fill the whole list */
|
|
||||||
}
|
|
||||||
|
|
||||||
#myUL li a:hover:not(.header) {
|
|
||||||
background-color: #eee;
|
|
||||||
}
|
|
||||||
|
|
||||||
#Chart{
|
|
||||||
width: "100%";
|
|
||||||
height: "100%";
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -4,8 +4,5 @@ import 'https://kit.fontawesome.com/fb3bbd0a95.js'
|
|||||||
|
|
||||||
import { createApp } from 'vue'
|
import { createApp } from 'vue'
|
||||||
import App from './App.vue'
|
import App from './App.vue'
|
||||||
import CanvasJSChart from '@canvasjs/vue-charts';
|
|
||||||
|
|
||||||
const app = createApp(App);
|
createApp(App).mount('#app')
|
||||||
app.use(CanvasJSChart);
|
|
||||||
app.mount('#app');
|
|
||||||
|
@ -9,7 +9,7 @@ import Profil from "@/Apps/Profil.vue"
|
|||||||
import Courses from "@/Apps/ManageCourses.vue"
|
import Courses from "@/Apps/ManageCourses.vue"
|
||||||
import Users from "@/Apps/UsersList.vue"
|
import Users from "@/Apps/UsersList.vue"
|
||||||
import Students from "@/Apps/StudentsList.vue"
|
import Students from "@/Apps/StudentsList.vue"
|
||||||
import ResearcherProfile from "@/Apps/ScientificPublications/ResearcherProfile.vue";
|
import Meetings from "@/Apps/Meetings.vue"
|
||||||
|
|
||||||
const apps = {
|
const apps = {
|
||||||
'/login': LoginPage,
|
'/login': LoginPage,
|
||||||
@ -18,11 +18,12 @@ const apps = {
|
|||||||
'/manage-courses' : Courses,
|
'/manage-courses' : Courses,
|
||||||
'/users-list' : Users,
|
'/users-list' : Users,
|
||||||
'/students-list' : Students,
|
'/students-list' : Students,
|
||||||
'/researcher-profile' : ResearcherProfile,
|
'/meetings' : Meetings,
|
||||||
}
|
}
|
||||||
|
|
||||||
const appsList = {
|
const appsList = {
|
||||||
'Msg': { path: '#/msg', icon: 'fa-comment', text: i18n("app.messages") },
|
'Msg': { path: '#/msg', icon: 'fa-comment', text: i18n("app.messages") },
|
||||||
|
'Meetings': { path: '#/meetings', icon: 'fa-handshake', text: i18n("app.meetings") },
|
||||||
'Notification': { path: '#/notifs', icon: 'fa-bell', text: i18n("app.notifications") },
|
'Notification': { path: '#/notifs', icon: 'fa-bell', text: i18n("app.notifications") },
|
||||||
'Forum': { path: '#/forum', icon: 'fa-envelope', text: i18n("app.forum") },
|
'Forum': { path: '#/forum', icon: 'fa-envelope', text: i18n("app.forum") },
|
||||||
'Schedule': { path: '#/schedule', icon: 'fa-calendar-days', text: i18n("app.schedules") },
|
'Schedule': { path: '#/schedule', icon: 'fa-calendar-days', text: i18n("app.schedules") },
|
||||||
|
Reference in New Issue
Block a user