1 Commits

Author SHA1 Message Date
d21655c535 fix max's scroll issue
All checks were successful
Build and test backend / Build-backend (pull_request) Successful in 1m24s
Build and test FrontEnd / Build-frontend (pull_request) Successful in 30s
2024-04-22 10:25:07 +02:00
22 changed files with 59 additions and 66 deletions

View File

@ -13,7 +13,10 @@ import ovh.herisson.Clyde.Services.AuthenticatorService;
import ovh.herisson.Clyde.Services.TokenService; import ovh.herisson.Clyde.Services.TokenService;
import ovh.herisson.Clyde.Services.UserService; import ovh.herisson.Clyde.Services.UserService;
import ovh.herisson.Clyde.Tables.*; import ovh.herisson.Clyde.Tables.*;
import ovh.herisson.Clyde.Tables.Inscription.*; import ovh.herisson.Clyde.Tables.Inscription.ExemptionsRequest;
import ovh.herisson.Clyde.Tables.Inscription.Minerval;
import ovh.herisson.Clyde.Tables.Inscription.ScholarshipRequest;
import ovh.herisson.Clyde.Tables.Inscription.UnregisterRequest;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
@ -325,7 +328,7 @@ public class RequestsController {
return new ResponseEntity<>(HttpStatus.OK); return new ResponseEntity<>(HttpStatus.OK);
} }
toEdit.setTeacherApprovalState(newteacherstate); toEdit.setState(newteacherstate);
changeCurriculumRequestRepository.save(toEdit); changeCurriculumRequestRepository.save(toEdit);
if (newteacherstate == RequestState.Accepted && toEdit.getState() == RequestState.Accepted){ if (newteacherstate == RequestState.Accepted && toEdit.getState() == RequestState.Accepted){

View File

@ -42,7 +42,6 @@ public class MockController {
public final LessonRequestService lessonRequestService; public final LessonRequestService lessonRequestService;
ArrayList<User> mockUsers; ArrayList<User> mockUsers;
public static boolean isMocked = false;
public final ResearchesService researchesService; public final ResearchesService researchesService;
public final UserCurriculumRepository ucr; public final UserCurriculumRepository ucr;
public final MinervalRepository minervalRepository; public final MinervalRepository minervalRepository;
@ -79,7 +78,7 @@ public class MockController {
@PostMapping("/mock") @PostMapping("/mock")
public void postMock() { public void postMock() {
if(!isMocked){
// user part // user part
User herobrine = new User("brine","hero","admin@admin.com","behind","ShadowsLand",new Date(0), null,Role.Admin,"admin"); User herobrine = new User("brine","hero","admin@admin.com","behind","ShadowsLand",new Date(0), null,Role.Admin,"admin");
User joe = new User("Piplo","Joe","student@student.com","roundabout","England",new Date(0), null,Role.Student,"student"); User joe = new User("Piplo","Joe","student@student.com","roundabout","England",new Date(0), null,Role.Student,"student");
@ -231,9 +230,6 @@ public class MockController {
externalCurriculum = new ExternalCurriculum(inscriptionRequest, "HEH", "Bachelier en informatique", "Completed", 2015, 2018, null, null); externalCurriculum = new ExternalCurriculum(inscriptionRequest, "HEH", "Bachelier en informatique", "Completed", 2015, 2018, null, null);
externalCurriculumRepository.save(externalCurriculum); externalCurriculumRepository.save(externalCurriculum);
isMocked = true;
}
} }
} }

View File

@ -1,7 +1,7 @@
package ovh.herisson.Clyde.Repositories.Inscription; package ovh.herisson.Clyde.Repositories.Inscription;
import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.CrudRepository;
import ovh.herisson.Clyde.Tables.Inscription.ChangeCurriculumRequest; import ovh.herisson.Clyde.Tables.ChangeCurriculumRequest;
public interface ChangeCurriculumRequestRepository extends CrudRepository<ChangeCurriculumRequest, Long> { public interface ChangeCurriculumRequestRepository extends CrudRepository<ChangeCurriculumRequest, Long> {
ChangeCurriculumRequest findById(long id); ChangeCurriculumRequest findById(long id);

View File

@ -15,33 +15,33 @@ import java.util.Map;
public interface StatsRepository extends CrudRepository<Research,Long> { public interface StatsRepository extends CrudRepository<Research,Long> {
@Query("select new map(to_char(r.releaseDate, 'month') as label, sum(r.views) as y) from Research r where r.author.id = ?1 group by to_char(r.releaseDate, 'month')") @Query("select new map(to_char(r.releaseDate, 'month') as label, sum(r.views) as y) from Research r group by to_char(r.releaseDate, 'month')")
Iterable<Map<String ,Integer>> viewsByMonths(long researcherId); Iterable<Map<String ,Integer>> viewsByMonths();
@Query("select new map(to_char(r.releaseDate,'YYYY') as label, sum (r.views) as y) from Research r group by to_char(r.releaseDate,'YYYY')") @Query("select new map(to_char(r.releaseDate,'YYYY') as label, sum (r.views) as y) from Research r group by to_char(r.releaseDate,'YYYY')")
Iterable<Map<String ,Integer>> viewsByYears(long researcherId); Iterable<Map<String ,Integer>> viewsByYears();
@Query("select new map(r.domain as label, sum(r.views) as y) from Research r where r.author.id = ?1 group by r.domain") @Query("select new map(r.domain as label, sum(r.views) as y) from Research r group by r.domain")
Iterable<Map<String ,Integer>> viewsByTopics(long researcherId); Iterable<Map<String ,Integer>> viewsByTopics();
@Query("select new map(r.domain as label, count(distinct r.language) as y) from Research r where r.author.id = ?1 group by r.domain") @Query("select new map(r.domain as label, count(distinct r.language) as y) from Research r group by r.domain")
Iterable<Map<String ,Integer>> languageByTopics(long researcherId); Iterable<Map<String ,Integer>> languageByTopics();
@Query("select new map(to_char(r.releaseDate,'YYYY') as label, count(distinct r.language) as y) from Research r where r.author.id = ?1 group by to_char(r.releaseDate,'YYYY')") @Query("select new map(to_char(r.releaseDate,'YYYY') as label, count(distinct r.language) as y) from Research r group by to_char(r.releaseDate,'YYYY')")
Iterable<Map<String ,Integer>> languageByYears(long researcherId); Iterable<Map<String ,Integer>> languageByYears();
@Query("select new map(to_char(r.releaseDate, 'month') as label, count(distinct r.language) as y) from Research r where r.author.id = ?1 group by to_char(r.releaseDate, 'month')") @Query("select new map(to_char(r.releaseDate, 'month') as label, count(distinct r.language) as y) from Research r group by to_char(r.releaseDate, 'month')")
Iterable<Map<String ,Integer>> languageByMonths(long researcherId); Iterable<Map<String ,Integer>> languageByMonths();
@Query("select new map(to_char(r.releaseDate,'YYYY') as label, count(distinct r) as y) from Research r where r.author.id = ?1 group by to_char(r.releaseDate,'YYYY')") @Query("select new map(to_char(r.releaseDate,'YYYY') as label, count(distinct r) as y) from Research r group by to_char(r.releaseDate,'YYYY')")
Iterable<Map<String ,Integer>> researchesByYears(long researcherId); Iterable<Map<String ,Integer>> researchesByYears();
@Query("select new map(r.domain as label, count(distinct r) as y) from Research r where r.author.id = ?1 group by r.domain") @Query("select new map(r.domain as label, count(distinct r) as y) from Research r group by r.domain")
Iterable<Map<String ,Integer>> researchesByTopics(long researcherId); Iterable<Map<String ,Integer>> researchesByTopics();
@Query("select new map(to_char(r.releaseDate, 'month') as label, count(distinct r) as y) from Research r where r.author.id = ?1 group by to_char(r.releaseDate, 'month')") @Query("select new map(to_char(r.releaseDate, 'month') as label, count(distinct r) as y) from Research r group by to_char(r.releaseDate, 'month')")
Iterable<Map<String ,Integer>> researchesByMonth(long researcherId); Iterable<Map<String ,Integer>> researchesByMonth();
} }

View File

@ -34,17 +34,17 @@ public class StatisticsService {
ArrayList<Iterable<Map<String,Integer>>> toReturn = new ArrayList<>(); ArrayList<Iterable<Map<String,Integer>>> toReturn = new ArrayList<>();
toReturn.add(statsRepo.viewsByYears(researcher.getId())); toReturn.add(statsRepo.viewsByYears());
toReturn.add(statsRepo.viewsByMonths(researcher.getId())); toReturn.add(statsRepo.viewsByMonths());
toReturn.add(statsRepo.viewsByTopics(researcher.getId())); toReturn.add(statsRepo.viewsByTopics());
toReturn.add(statsRepo.researchesByYears(researcher.getId())); toReturn.add(statsRepo.researchesByYears());
toReturn.add(statsRepo.researchesByMonth(researcher.getId())); toReturn.add(statsRepo.researchesByMonth());
toReturn.add(statsRepo.researchesByTopics(researcher.getId())); toReturn.add(statsRepo.researchesByTopics());
toReturn.add(statsRepo.languageByYears(researcher.getId())); toReturn.add(statsRepo.languageByYears());
toReturn.add(statsRepo.languageByMonths(researcher.getId())); toReturn.add(statsRepo.languageByMonths());
toReturn.add(statsRepo.languageByTopics(researcher.getId())); toReturn.add(statsRepo.languageByTopics());
return toReturn; return toReturn;
} }
} }

View File

@ -1,9 +1,6 @@
package ovh.herisson.Clyde.Tables.Inscription; package ovh.herisson.Clyde.Tables;
import jakarta.persistence.*; import jakarta.persistence.*;
import ovh.herisson.Clyde.Tables.Curriculum;
import ovh.herisson.Clyde.Tables.RequestState;
import ovh.herisson.Clyde.Tables.User;
import java.util.Date; import java.util.Date;

View File

@ -2,6 +2,8 @@ package ovh.herisson.Clyde.Tables.Inscription;
import jakarta.persistence.*; import jakarta.persistence.*;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;
import ovh.herisson.Clyde.Tables.Course; import ovh.herisson.Clyde.Tables.Course;
import ovh.herisson.Clyde.Tables.RequestState; import ovh.herisson.Clyde.Tables.RequestState;
import ovh.herisson.Clyde.Tables.User; import ovh.herisson.Clyde.Tables.User;

View File

@ -7,6 +7,7 @@ import ovh.herisson.Clyde.Tables.RequestState;
import ovh.herisson.Clyde.Tables.User; import ovh.herisson.Clyde.Tables.User;
import java.util.Date; import java.util.Date;
import java.util.Map;
@Entity @Entity
public class ScholarshipRequest { public class ScholarshipRequest {

View File

@ -3,6 +3,7 @@ package ovh.herisson.Clyde.Tables.Inscription;
import jakarta.persistence.*; import jakarta.persistence.*;
import ovh.herisson.Clyde.Tables.Curriculum; import ovh.herisson.Clyde.Tables.Curriculum;
import ovh.herisson.Clyde.Tables.RequestState; import ovh.herisson.Clyde.Tables.RequestState;
import ovh.herisson.Clyde.Tables.User;
import java.util.Date; import java.util.Date;

View File

@ -50,7 +50,6 @@ Delete=Delete
Modify=Modify Modify=Modify
Create=Créer Create=Créer
requestType=Request Type requestType=Request Type
lessonType=Course Type
day=Day day=Day
start=Start start=Start
end=End end=End

View File

@ -50,7 +50,6 @@ Delete=Supprimer
Modify=Modifier Modify=Modifier
Create=Créer Create=Créer
requestType=Type de Requête requestType=Type de Requête
lessonType=Type de cours
day=Jour day=Jour
start=Début start=Début
end=Fin end=Fin

View File

@ -1,13 +1,14 @@
<script setup> <script setup>
import { toast } from 'vue3-toastify';
import { ref } from 'vue' import { ref } from 'vue'
import i18n, { setLang } from './i18n.js' import i18n, { setLang } from './i18n.js'
import { isLogged, getSelf } from '@/rest/Users.js' import { isLogged, getSelf } from '@/rest/Users.js'
import { notifications, fetchNotifications, archiveNotification } from '@/rest/notifications.js' import { notifications, fetchNotifications, archiveNotification } from '@/rest/notifications.js'
import {postMock} from "@/rest/restConsumer.js";
import { appList, currentView } from '@/rest/apps.js' import { appList, currentView } from '@/rest/apps.js'
var prevURL; var prevURL;
var currentURL = window.location.hash; var currentURL = window.location.hash;
postMock()
window.onhashchange = function() { window.onhashchange = function() {
prevURL = currentURL; prevURL = currentURL;
currentURL = window.location.hash; currentURL = window.location.hash;
@ -41,7 +42,7 @@ window.addEventListener('hashchange', () => {
<div class="topBar"> <div class="topBar">
<ul class="horizontal"> <ul class="horizontal">
<li title=home> <li title=home>
<a class="icon" href="#home"> <a class="icon" href="#home">
<img class="clyde" src="/Clyde.png" style="width: 40px; height: auto; margin-top:4px"> <img class="clyde" src="/Clyde.png" style="width: 40px; height: auto; margin-top:4px">
</a></li> </a></li>
<li title=home> <li title=home>

View File

@ -51,12 +51,12 @@ async function editChangeCurrReqTeacherApproval(state){
<div> <div>
<button @click="localwindowstate++"> {{ i18n("seeprofile") }} </button> <button @click="localwindowstate++"> {{ i18n("seeprofile") }} </button>
</div> </div>
<div v-if="user.role === 'InscriptionService' || user.role==='Admin'"> <div>
<button v-if="req.state === 'Pending'" @click="req.state='Accepted';uploadandrefreshChangeRequest('Accepted')">{{ i18n("request.accept") }}</button> <button v-if="req.state === 'Pending'" @click="req.state='Accepted';uploadandrefreshChangeRequest('Accepted')">{{ i18n("request.accept") }}</button>
<button v-if="req.state === 'Pending'" @click="req.state='Refused';uploadandrefreshChangeRequest('Refused')" style="margin-left: 2%;">{{i18n("request.refuse")}}</button> <button v-if="req.state === 'Pending'" @click="req.state='Refused';uploadandrefreshChangeRequest('Refused')" style="margin-left: 2%;">{{i18n("request.refuse")}}</button>
</div> </div>
<div v-if="user.role === 'Teacher' || user.role === 'Admin'"> <div v-if="user.role === 'Teacher' || user.role === 'Admin'">
<button v-if="req.teacherApprovalState === 'Pending'" @click="req.teacherApprovalState='Accepted';editChangeCurrReqTeacherApproval('Accepted')" style="margin-right: 2%">{{i18n("acceptequiv")}}</button> <button v-if="req.teacherApprovalState === 'Pending'" @click="req.teacherApprovalState='Accepted';editChangeCurrReqTeacherApproval('Accepted')">{{i18n("acceptequiv")}}</button>
<button v-if="req.teacherApprovalState === 'Pending'" @click="req.teacherApprovalState='Refused';editChangeCurrReqTeacherApproval('Refused')">{{i18n("refuseequiv")}}</button> <button v-if="req.teacherApprovalState === 'Pending'" @click="req.teacherApprovalState='Refused';editChangeCurrReqTeacherApproval('Refused')">{{i18n("refuseequiv")}}</button>
</div> </div>
</div> </div>

View File

@ -18,7 +18,7 @@ const AcceptMod = ref(false);
const moreInfosMod = ref(false); const moreInfosMod = ref(false);
const requestTypes = ["Create", "Modify", "Delete"] const requestTypes = ["Create", "Modify", "Delete"]
const editElementID = ref(''); const editElementID = ref('');
const chosenLocal = ref(); const chosenLocal = ref("");
const locals = ["A0B1","A1B1","A2B1","A0B2"]; const locals = ["A0B1","A1B1","A2B1","A0B2"];
const moreInfos = ref({}); const moreInfos = ref({});
@ -30,7 +30,6 @@ const moreInfos = ref({});
async function upPage(id,review){ async function upPage(id,review){
await changeRequestState(id, review) ; await changeRequestState(id, review) ;
requests.value = await getAllRequests(); requests.value = await getAllRequests();
chosenLocal.value = null;
} }
/* /*

View File

@ -168,9 +168,11 @@
</div> </div>
<div v-if="!createMod && !deleteMod" v-for="item in curriculum" :key="item.title" style="width:50%;margin-left:auto; margin-right:auto;"> <div v-if="!createMod && !deleteMod" v-for="item in curriculum" :key="item.title" style="width:50%;margin-left:auto; margin-right:auto;">
<div v-if="editElementID !== item.title && editAddCourse !== item.title" style="display:flex;"> <div v-if="editElementID !== item.title && editAddCourse !== item.title" style ="padding:15px 15px 15px 15px;">
<button @click="editElementID = item.title; editAddCourse = ''; setModify(item);">{{i18n("courses.modify")}}</button> <button @click="editElementID = item.title; editAddCourse = ''; setModify(item); ">
<button v-if="self.role !== 'Teacher'"@click="editAddCourse = item.title; editElementID ='';setAddToCurriculum(item)">{{i18n("courses.AddToCurriculum")}}</button> {{i18n("courses.modify")}}
</button>
<button v-if="self.role !== 'Teacher'"@click="editAddCourse = item.title; editElementID ='';setAddToCurriculum(item)">Add to a new Curriculum</button>
</div> </div>
<div v-if="editElementID == item.title"> <div v-if="editElementID == item.title">
<button @click="editElementID= '';patchCourse(item)"> {{i18n("courses.confirm")}} </button> <button @click="editElementID= '';patchCourse(item)"> {{i18n("courses.confirm")}} </button>

View File

@ -221,8 +221,6 @@ async function setCourses(){
lessonBuffer.value = Object.assign({}, pattern); lessonBuffer.value = Object.assign({}, pattern);
lessonFinder.value = null; lessonFinder.value = null;
lessonCreatorBuffer.value = Object.assign({},lessonCreator) lessonCreatorBuffer.value = Object.assign({},lessonCreator)
allSchedules.value = await getAllSchedule();
schedule.value = null;
trueSchedule.value = null; trueSchedule.value = null;
} }

View File

@ -343,19 +343,19 @@
<select v-model="changecurrdata.actualcursus" style="margin-right: 3%"> <select v-model="changecurrdata.actualcursus" style="margin-right: 3%">
<option v-for="item in getActualCurriculumList()" style="font-size:20px;" :value="item.curriculumId">Bac {{item.year}} {{item.option}}</option> <option v-for="item in getActualCurriculumList()" style="font-size:20px;" :value="item.curriculumId">Bac {{item.year}} {{item.option}}</option>
</select> </select>
{{ i18n("newcursus") }} : {{ i18n("newcurr") }} :
<select v-model="changecurrdata.newcursus"> <select v-model="changecurrdata.newcursus">
<option v-for="item in curricula" :value="item.curriculumId">Bac {{item.year}} {{item.option}}</option> <option v-for="item in curricula" :value="item.curriculumId">Bac {{item.year}} {{item.option}}</option>
</select> </select>
</div> </div>
<div style="height:40px;" v-if="reRegState === 2"> <div style="height:40px;" v-if="reRegState === 2">
{{ i18n("newcursus") }} : {{ i18n("newcurr") }} :
<select v-model="changecurrdata.newcursus"> <select v-model="changecurrdata.newcursus">
<option v-for="item in curricula" :value="item.curriculumId">Bac {{item.year}} {{item.option}}</option> <option v-for="item in curricula" :value="item.curriculumId">Bac {{item.year}} {{item.option}}</option>
</select> </select>
</div> </div>
<div style="height:40px;" v-if="reRegState === 1"> <div style="height:40px;" v-if="reRegState === 1">
{{ i18n("newcursus") }} : {{ i18n("newcurr") }} :
<select v-model="changecurrdata.newcursus" @change="getActualCurr(changecurrdata.newcursus);"> <select v-model="changecurrdata.newcursus" @change="getActualCurr(changecurrdata.newcursus);">
<option v-for="item in getCurriculumsNextYear()" :value="item.curriculumId">Bac {{item.year}} {{item.option}}</option> <option v-for="item in getCurriculumsNextYear()" :value="item.curriculumId">Bac {{item.year}} {{item.option}}</option>
</select> </select>

View File

@ -136,10 +136,8 @@ const emit = defineEmits(["modified"]);
<style scoped> <style scoped>
#researches{ #researches{
padding-top: 15px;
width: 100%; width: 100%;
height: 100%; height: 100%;
overflow: scroll;
} }
#search{ #search{
width: 100%; width: 100%;

View File

@ -82,7 +82,7 @@ function getPP(){
</div> </div>
<div> <ListResearches :allResearcher="allResearcher" :research-list="researchList" :manage="true" @modified="modifiedResearch"></ListResearches> </div> <ListResearches :allResearcher="allResearcher" :research-list="researchList" :manage="true" @modified="modifiedResearch"></ListResearches>
</div> </div>
</div> </div>
</template> </template>

View File

@ -103,7 +103,7 @@ async function articleClicked(){
</ul> </ul>
<div id="downloads" v-if="article.pdfLocation !== null && !manage"> <div id="downloads" v-if="article.pdfLocation !== null && !manage">
<a :href=downloadPdf() @click.stop="articleClicked" target="_blank">{{i18n("See.Research")}}</a> <a :href=downloadPdf() @click.stop="articleClicked" target="_blank">{{i18n("See.Research")}}</a>
<a v-if="article.bibTexLocation !== null" :href=downloadBibTex() @click.stop="emit('modal-close')" target="_blank">{{i18n("SeeBibTex")}}</a> </div> <a v-if="article.bibTexLocation !== null" :href=downloadBibTex() @click.stop="emit('modal-close')" target="_blank">{{i18n("See.BibTex")}}</a> </div>
</div> </div>
<div v-if="manage" id="manage"> <div v-if="manage" id="manage">
<div> <div>

View File

@ -111,7 +111,7 @@ function update(){
<CanvasJSChart :options="options" id=chart @chart-ref="c => chart = c "/> <CanvasJSChart :options="options" id=chart @chart-ref="c => chart = c "/>
</div> </div>
</div> </div>
<div id="researches" style="margin-top: -15px"><list-researches :researchList="researchList"></list-researches></div> <div id="researches"><list-researches :researchList="researchList"></list-researches></div>
</div> </div>
</template> </template>

View File

@ -27,9 +27,6 @@ export function restPatch(endPoint, data) {
return _rest(endPoint, {method: "PATCH", credentials: 'include', body: JSON.stringify(data)}); return _rest(endPoint, {method: "PATCH", credentials: 'include', body: JSON.stringify(data)});
} }
export function postMock(){
return restPost("/mock")
}
/** /**
* backbone for the request made by the frontend * backbone for the request made by the frontend
* *