Compare commits
	
		
			31 Commits
		
	
	
		
			tonitch/fi
			...
			3825565b16
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 3825565b16 | |||
| 48640dfa8b | |||
| 3acfd02bfb | |||
| a3fe6ce6bd | |||
| 96965bde97 | |||
| 302e0b555c | |||
| 84a408298d | |||
| 3b48e5adfb | |||
| 78da7b23d2 | |||
| 1831cc7eb2 | |||
| cc51510dac | |||
| 44bb04f21b | |||
| 1ed61c8c7b | |||
| 59c82d7482 | |||
| 772fa09e28 | |||
| 672fcd099f | |||
| 3198a7ade0 | |||
| 5516f75346 | |||
| 1f66ac5a4d | |||
| 59b82abf71 | |||
| cf0c465248 | |||
| 2917d645fa | |||
| 730a72dba3 | |||
| 47eb98da57 | |||
| eafcf6b265 | |||
| 34e537ff02 | |||
| 364f39c4bc | |||
| f2675ed764 | |||
| 85c1282f48 | |||
| 4d6387ca8b | |||
| fa2deca1b9 | 
| @ -14,26 +14,26 @@ on: | |||||||
|   workflow_dispatch: |   workflow_dispatch: | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   deploy-frontend: |   # deploy-frontend: | ||||||
|     runs-on: ubuntu-latest |   #   runs-on: ubuntu-latest | ||||||
|     steps: |   #   steps: | ||||||
|     - uses: actions/checkout@v4 |   #   - uses: actions/checkout@v4 | ||||||
|     - name: Use Node.js ${{ matrix.node-version }} |   #   - name: Use Node.js ${{ matrix.node-version }} | ||||||
|       uses: actions/setup-node@v3 |   #     uses: actions/setup-node@v3 | ||||||
|       working-directory: ./frontend |   #     working-directory: ./frontend | ||||||
|     - run: npm ci  |   #   - run: npm ci  | ||||||
|       name: clean install |   #     name: clean install | ||||||
|       working-directory: ./frontend |   #     working-directory: ./frontend | ||||||
|     - name: building  |   #   - name: building  | ||||||
|       working-directory: ./frontend |   #     working-directory: ./frontend | ||||||
|       run: npm run build |   #     run: npm run build | ||||||
|     - name: pushing to the server |   #   - name: pushing to the server | ||||||
|       working-directory: ./frontend |   #     working-directory: ./frontend | ||||||
|       run: | |   #     run: | | ||||||
|         echo "${{ secrets.SSH_KEY }}" > key |   #       echo "${{ secrets.SSH_KEY }}" > key | ||||||
|         chmod 0600 key |   #       chmod 0600 key | ||||||
|         scp -o "StrictHostKeyChecking=no" -o "LogLevel=ERROR" -i key -r dist/ ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}: |   #       scp -o "StrictHostKeyChecking=no" -o "LogLevel=ERROR" -i key -r dist/ ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}: | ||||||
|     - run: echo "The website has been deployed. visit https://clyde.herisson.ovh/" |   #   - run: echo "The website has been deployed. visit https://clyde.herisson.ovh/" | ||||||
|  |  | ||||||
|   deploy-backend: |   deploy-backend: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
| @ -46,5 +46,5 @@ jobs: | |||||||
|         scp -o "StrictHostKeyChecking=no" -o "LogLevel=ERROR" -i key -r * ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:api/ |         scp -o "StrictHostKeyChecking=no" -o "LogLevel=ERROR" -i key -r * ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:api/ | ||||||
|     - name: restarting the backend  |     - name: restarting the backend  | ||||||
|       run: | |       run: | | ||||||
|         ssh -o "StrictHostKeyChecking=no" -o "LogLevel=ERROR" -i key ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} 'cd api/ && sed -i compose.yaml -e "s/8080:8080/4001:8080/" -e "s/8000:8080/4000:8080/" && docker-compose up --force-recreate --build -d' |         ssh -o "StrictHostKeyChecking=no" -o "LogLevel=ERROR" -i key ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} 'cd api/ && sed -i compose.yaml -e "s/8080:8080/4001:8080/" -e "s/8000:8080/4000:8080/" && sed -e "8d" -i frontend/Dockerfile && docker-compose up --force-recreate --build -d' | ||||||
|     - run: echo "The backend has been deployed. running at https://clyde.herisson.ovh/api" |     - run: echo "The backend has been deployed. running at https://clyde.herisson.ovh/api" | ||||||
|  | |||||||
| @ -13,10 +13,7 @@ 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.ExemptionsRequest; | import ovh.herisson.Clyde.Tables.Inscription.*; | ||||||
| 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; | ||||||
| @ -328,7 +325,7 @@ public class RequestsController { | |||||||
|             return new ResponseEntity<>(HttpStatus.OK); |             return new ResponseEntity<>(HttpStatus.OK); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         toEdit.setState(newteacherstate); |         toEdit.setTeacherApprovalState(newteacherstate); | ||||||
|         changeCurriculumRequestRepository.save(toEdit); |         changeCurriculumRequestRepository.save(toEdit); | ||||||
|  |  | ||||||
|         if (newteacherstate == RequestState.Accepted && toEdit.getState() == RequestState.Accepted){ |         if (newteacherstate == RequestState.Accepted && toEdit.getState() == RequestState.Accepted){ | ||||||
|  | |||||||
| @ -42,6 +42,7 @@ 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; | ||||||
| @ -78,7 +79,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"); | ||||||
| @ -184,11 +185,11 @@ public class MockController { | |||||||
|  |  | ||||||
|         //Schedule part |         //Schedule part | ||||||
|  |  | ||||||
|         Lesson lesson_0_progra1 = new Lesson(progra1, "Mon Apr 22 2024 08:15", "Mon Apr 22 2024 10:15","rgb(0,50,100)","A0B2","Course"); |         Lesson lesson_0_progra1 = new Lesson(progra1, "Mon Apr 22 2024 08:15", "Mon Apr 22 2024 10:15","rgb(255,36,175)","A0B2","Course"); | ||||||
|         Lesson lesson_0_chemistry1 = new Lesson(chemistry1, "Wed Mar 27 2024 08:15", "Wed Mar 27 2024 09:15","rgb(100,50,0)","A0B2","TP"); |         Lesson lesson_0_chemistry1 = new Lesson(chemistry1, "Wed Mar 27 2024 08:15", "Wed Mar 27 2024 09:15","rgb(36,175,255)","A0B2","TP"); | ||||||
|         Lesson lesson_0_psycho1 = new Lesson(psycho1, "Sun Mar 24 2024 10:30 ","Sun Mar 24 2024 12:30 ","rgb(100,50,100)", "A0B2","TD"); |         Lesson lesson_0_psycho1 = new Lesson(psycho1, "Sun Mar 24 2024 10:30 ","Sun Mar 24 2024 12:30 ","rgb(255,36,175)", "A0B2","TD"); | ||||||
|         Lesson lesson_1_progra1 = new Lesson(progra1, "Mon Apr 02 2024 13:30", "Mon Apr 02 2024 15:30","rgb(0,50,100)","A0B2","TP"); |         Lesson lesson_1_progra1 = new Lesson(progra1, "Mon Apr 02 2024 13:30", "Mon Apr 02 2024 15:30","rgb(36,175,255)","A0B2","TP"); | ||||||
|         Lesson lesson_0_commun = new Lesson(commun, "Mon Apr 01 2024 10:30", "Mon Apr 01 2024 12:30","rgb(0,50,100)","A0B2","Course"); |         Lesson lesson_0_commun = new Lesson(commun, "Mon Apr 01 2024 10:30", "Mon Apr 01 2024 12:30","rgb(255,36,175)","A0B2","Course"); | ||||||
|  |  | ||||||
|         LessonChangesRequest request1 = new LessonChangesRequest(joke,RequestState.Pending,null,null,null,null,2,null,1); |         LessonChangesRequest request1 = new LessonChangesRequest(joke,RequestState.Pending,null,null,null,null,2,null,1); | ||||||
|         LessonChangesRequest request2 = new LessonChangesRequest(joke,RequestState.Pending,"Fri Apr 19 2024 10:30 ","Fri Apr 19 2024 12:30 ",null,null,1,null,2); |         LessonChangesRequest request2 = new LessonChangesRequest(joke,RequestState.Pending,"Fri Apr 19 2024 10:30 ","Fri Apr 19 2024 12:30 ",null,null,1,null,2); | ||||||
| @ -230,6 +231,9 @@ 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; | ||||||
|  |     } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | |||||||
| @ -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.ChangeCurriculumRequest; | import ovh.herisson.Clyde.Tables.Inscription.ChangeCurriculumRequest; | ||||||
|  |  | ||||||
| public interface ChangeCurriculumRequestRepository extends CrudRepository<ChangeCurriculumRequest, Long> { | public interface ChangeCurriculumRequestRepository extends CrudRepository<ChangeCurriculumRequest, Long> { | ||||||
|     ChangeCurriculumRequest findById(long id); |     ChangeCurriculumRequest findById(long id); | ||||||
|  | |||||||
| @ -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 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 where r.author.id = ?1 group by to_char(r.releaseDate, 'month')") | ||||||
|     Iterable<Map<String ,Integer>> viewsByMonths(); |     Iterable<Map<String ,Integer>> viewsByMonths(long researcherId); | ||||||
|  |  | ||||||
|     @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(); |     Iterable<Map<String ,Integer>> viewsByYears(long researcherId); | ||||||
|  |  | ||||||
|  |  | ||||||
|     @Query("select new map(r.domain as label, sum(r.views) as y) from Research r group by r.domain") |     @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") | ||||||
|     Iterable<Map<String ,Integer>> viewsByTopics(); |     Iterable<Map<String ,Integer>> viewsByTopics(long researcherId); | ||||||
|  |  | ||||||
|  |  | ||||||
|     @Query("select new map(r.domain as label, count(distinct r.language) as y) from Research r group by r.domain") |     @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") | ||||||
|     Iterable<Map<String ,Integer>> languageByTopics(); |     Iterable<Map<String ,Integer>> languageByTopics(long researcherId); | ||||||
|  |  | ||||||
|     @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')") |     @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')") | ||||||
|     Iterable<Map<String ,Integer>> languageByYears(); |     Iterable<Map<String ,Integer>> languageByYears(long researcherId); | ||||||
|  |  | ||||||
|     @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')") |     @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')") | ||||||
|     Iterable<Map<String ,Integer>> languageByMonths(); |     Iterable<Map<String ,Integer>> languageByMonths(long researcherId); | ||||||
|  |  | ||||||
|     @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')") |     @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')") | ||||||
|     Iterable<Map<String ,Integer>> researchesByYears(); |     Iterable<Map<String ,Integer>> researchesByYears(long researcherId); | ||||||
|  |  | ||||||
|     @Query("select new map(r.domain as label, count(distinct r) as y) from Research r group by r.domain") |     @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") | ||||||
|     Iterable<Map<String ,Integer>> researchesByTopics(); |     Iterable<Map<String ,Integer>> researchesByTopics(long researcherId); | ||||||
|  |  | ||||||
|     @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')") |     @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')") | ||||||
|     Iterable<Map<String ,Integer>> researchesByMonth(); |     Iterable<Map<String ,Integer>> researchesByMonth(long researcherId); | ||||||
|  |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -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()); |         toReturn.add(statsRepo.viewsByYears(researcher.getId())); | ||||||
|         toReturn.add(statsRepo.viewsByMonths()); |         toReturn.add(statsRepo.viewsByMonths(researcher.getId())); | ||||||
|         toReturn.add(statsRepo.viewsByTopics()); |         toReturn.add(statsRepo.viewsByTopics(researcher.getId())); | ||||||
|  |  | ||||||
|         toReturn.add(statsRepo.researchesByYears()); |         toReturn.add(statsRepo.researchesByYears(researcher.getId())); | ||||||
|         toReturn.add(statsRepo.researchesByMonth()); |         toReturn.add(statsRepo.researchesByMonth(researcher.getId())); | ||||||
|         toReturn.add(statsRepo.researchesByTopics()); |         toReturn.add(statsRepo.researchesByTopics(researcher.getId())); | ||||||
|  |  | ||||||
|         toReturn.add(statsRepo.languageByYears()); |         toReturn.add(statsRepo.languageByYears(researcher.getId())); | ||||||
|         toReturn.add(statsRepo.languageByMonths()); |         toReturn.add(statsRepo.languageByMonths(researcher.getId())); | ||||||
|         toReturn.add(statsRepo.languageByTopics()); |         toReturn.add(statsRepo.languageByTopics(researcher.getId())); | ||||||
|         return toReturn; |         return toReturn; | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @ -51,8 +51,8 @@ public class TokenService { | |||||||
|         ArrayList<Token> tokenList = tokenRepo.getByUserOrderByExpirationDate(token.getUser()); |         ArrayList<Token> tokenList = tokenRepo.getByUserOrderByExpirationDate(token.getUser()); | ||||||
|  |  | ||||||
|         while(tokenList.size() >= 5){ |         while(tokenList.size() >= 5){ | ||||||
|             tokenRepo.delete(tokenList.getFirst()); |             tokenRepo.delete(tokenList.get(0)); | ||||||
|             tokenList.remove(tokenList.getFirst()); |             tokenList.remove(tokenList.get(0)); | ||||||
|         } |         } | ||||||
|         tokenRepo.save(token); |         tokenRepo.save(token); | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -1,6 +1,9 @@ | |||||||
| package ovh.herisson.Clyde.Tables; | package ovh.herisson.Clyde.Tables.Inscription; | ||||||
| 
 | 
 | ||||||
| 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; | ||||||
| 
 | 
 | ||||||
| @ -2,8 +2,6 @@ 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; | ||||||
|  | |||||||
| @ -7,7 +7,6 @@ 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 { | ||||||
|  | |||||||
| @ -3,7 +3,6 @@ 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; | ||||||
|  |  | ||||||
|  | |||||||
| @ -23,6 +23,7 @@ import ovh.herisson.Clyde.Repositories.TokenRepository; | |||||||
| import ovh.herisson.Clyde.Repositories.UserRepository; | import ovh.herisson.Clyde.Repositories.UserRepository; | ||||||
| import ovh.herisson.Clyde.Responses.UnauthorizedResponse; | import ovh.herisson.Clyde.Responses.UnauthorizedResponse; | ||||||
| import ovh.herisson.Clyde.Services.TokenService; | import ovh.herisson.Clyde.Services.TokenService; | ||||||
|  | import ovh.herisson.Clyde.Services.UserService; | ||||||
| import ovh.herisson.Clyde.Tables.Role; | import ovh.herisson.Clyde.Tables.Role; | ||||||
| import ovh.herisson.Clyde.Tables.Token; | import ovh.herisson.Clyde.Tables.Token; | ||||||
| import ovh.herisson.Clyde.Tables.User; | import ovh.herisson.Clyde.Tables.User; | ||||||
| @ -46,7 +47,8 @@ public class UserControllerTest { | |||||||
|  |  | ||||||
|     @Autowired |     @Autowired | ||||||
|     private TokenService tokenService; |     private TokenService tokenService; | ||||||
|  |     @Autowired | ||||||
|  |     private UserService userService; | ||||||
|     @Autowired |     @Autowired | ||||||
|     private UserRepository userRepository; |     private UserRepository userRepository; | ||||||
|     @Autowired |     @Autowired | ||||||
| @ -72,6 +74,7 @@ public class UserControllerTest { | |||||||
|     @BeforeEach |     @BeforeEach | ||||||
|     void setup(){ |     void setup(){ | ||||||
|         RestAssured.baseURI = "http://localhost:" + port; |         RestAssured.baseURI = "http://localhost:" + port; | ||||||
|  |         userRepository.deleteAll(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @AfterEach |     @AfterEach | ||||||
| @ -84,7 +87,7 @@ public class UserControllerTest { | |||||||
|     public void userPostTest(){ |     public void userPostTest(){ | ||||||
|         User god = new User("god","god","admin@admin.com","everywhere","every",new Date(0), null, Role.Admin,"goddoesntneedpassword"); |         User god = new User("god","god","admin@admin.com","everywhere","every",new Date(0), null, Role.Admin,"goddoesntneedpassword"); | ||||||
|         Token godToken = new Token(god, tokenService.generateNewToken(), new Date()); |         Token godToken = new Token(god, tokenService.generateNewToken(), new Date()); | ||||||
|         userRepository.save(god); |         userService.save(god); | ||||||
|         tokenService.saveToken(godToken); |         tokenService.saveToken(godToken); | ||||||
|  |  | ||||||
|         //Can god post herobrine himself ? |         //Can god post herobrine himself ? | ||||||
|  | |||||||
| @ -70,7 +70,7 @@ class TokenServiceTest { | |||||||
|         ArrayList<Token> tokenList = new ArrayList<>(); |         ArrayList<Token> tokenList = new ArrayList<>(); | ||||||
|         GregorianCalendar gc = new GregorianCalendar(); |         GregorianCalendar gc = new GregorianCalendar(); | ||||||
|  |  | ||||||
|         User malveillant = new User("Cargo", "John", "CargoJ@mail.com", "secret", "secret", null, null, null, "secret"); |         User malveillant = new User("Cargo", "John", "CargoJ@mail.com", "secret", "secret", new Date(), null, "secret", null); | ||||||
|         userRepository.save(malveillant); |         userRepository.save(malveillant); | ||||||
|  |  | ||||||
|         for (int i = 0; i < 20; i++){ |         for (int i = 0; i < 20; i++){ | ||||||
|  | |||||||
| @ -50,6 +50,7 @@ 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 | ||||||
|  | |||||||
| @ -50,6 +50,7 @@ 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 | ||||||
|  | |||||||
| @ -1,14 +1,13 @@ | |||||||
| <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; | ||||||
|  | |||||||
| @ -32,6 +32,7 @@ async function createResearcher(){ | |||||||
|   toCreate.user = user.value |   toCreate.user = user.value | ||||||
|   await postResearcher(toCreate) |   await postResearcher(toCreate) | ||||||
|   creating.value = false |   creating.value = false | ||||||
|  |   allResearcher.value = await fetchAllResearchers() | ||||||
|   for (let i = 0; i < allResearcher.value.length; i++) { |   for (let i = 0; i < allResearcher.value.length; i++) { | ||||||
|     if (user.value.regNo === allResearcher.value[i].user.regNo){ |     if (user.value.regNo === allResearcher.value[i].user.regNo){ | ||||||
|       researcher.value = allResearcher.value[i] |       researcher.value = allResearcher.value[i] | ||||||
| @ -147,8 +148,7 @@ async function modify(){ | |||||||
|   column-gap:2.7%; |   column-gap:2.7%; | ||||||
|   row-gap:45px; |   row-gap:45px; | ||||||
|   grid-template-areas: |   grid-template-areas: | ||||||
|   "profilPic globalInfos" |   "profilPic globalInfos"; | ||||||
|   "minfos minfos"; |  | ||||||
| } | } | ||||||
|  |  | ||||||
| .profilPic{ | .profilPic{ | ||||||
| @ -167,7 +167,8 @@ async function modify(){ | |||||||
|   display:flex; |   display:flex; | ||||||
|   align-items:center; |   align-items:center; | ||||||
|   justify-content:center; |   justify-content:center; | ||||||
|   margin-top:5%; |   margin-right: auto; | ||||||
|  |   margin-left: auto; | ||||||
| } | } | ||||||
|  |  | ||||||
| .subContainer{ | .subContainer{ | ||||||
|  | |||||||
| @ -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> |           <div v-if="user.role === 'InscriptionService' || user.role==='Admin'"> | ||||||
|             <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')">{{i18n("acceptequiv")}}</button> |             <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='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> | ||||||
|  | |||||||
| @ -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,6 +30,7 @@ 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; | ||||||
| } | } | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  | |||||||
| @ -168,11 +168,9 @@ | |||||||
|     </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 ="padding:15px 15px 15px 15px;"> |       <div  v-if="editElementID !== item.title && editAddCourse !== item.title" style="display:flex;"> | ||||||
|         <button   @click="editElementID = item.title; editAddCourse = ''; setModify(item); "> |         <button   @click="editElementID = item.title; editAddCourse = ''; setModify(item);">{{i18n("courses.modify")}}</button> | ||||||
|         {{i18n("courses.modify")}} |         <button v-if="self.role !== 'Teacher'"@click="editAddCourse = item.title; editElementID ='';setAddToCurriculum(item)">{{i18n("courses.AddToCurriculum")}}</button> | ||||||
|         </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> | ||||||
|  | |||||||
| @ -221,6 +221,8 @@ 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; | ||||||
|  |  | ||||||
|   } |   } | ||||||
|  | |||||||
| @ -93,12 +93,14 @@ | |||||||
|    |    | ||||||
|   async function ChangeInfos(){ |   async function ChangeInfos(){ | ||||||
|     for (let element in toModify){ |     for (let element in toModify){ | ||||||
|  |       console.log(element) | ||||||
|  |       console.log(toModify[element]) | ||||||
|          if (element ==="email" && (toModify[element] !== null)){ |          if (element ==="email" && (toModify[element] !== null)){ | ||||||
|           await  alterSelf(user.value.regNo,{email : toModify[element]}); |           await  alterSelf(user.value.regNo,{email : toModify[element]}); | ||||||
|         }       |         }       | ||||||
|  |  | ||||||
|         if (element ==="profilPictureUrl" && (toModify[element] !== null)){ |         if (element ==="profilePictureUrl" && (toModify[element] !== null)){ | ||||||
|           await  alterSelf(user.value.regNo,{ profilPictureUrl : toModify[element]}); |           await  alterSelf(user.value.regNo,{ profilePictureUrl : toModify[element]}); | ||||||
|         } |         } | ||||||
|         else if(element === "address" && (toModify[element] !== null)){ |         else if(element === "address" && (toModify[element] !== null)){ | ||||||
|           await  alterSelf(user.value.regNo,{address : toModify[element]}); |           await  alterSelf(user.value.regNo,{address : toModify[element]}); | ||||||
| @ -116,7 +118,7 @@ | |||||||
|      toModify.address = item.address; |      toModify.address = item.address; | ||||||
|      toModify.profilPictureUrl = item.profilPictureUrl; |      toModify.profilPictureUrl = item.profilPictureUrl; | ||||||
|      toModify.email= item.email; |      toModify.email= item.email; | ||||||
|      toModify.password= item.password; |      toModify.password= item.password | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   function getPP(){ |   function getPP(){ | ||||||
| @ -176,6 +178,13 @@ | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   async function getProfilePic(data){ | ||||||
|  |     const pp= await uploadProfilePicture(data) | ||||||
|  |     toModify.profilePictureUrl = pp.url | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |  | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
| <template> | <template> | ||||||
| @ -306,7 +315,7 @@ | |||||||
|         <div v-else-if="windowState === 1" class="infosContainer"> |         <div v-else-if="windowState === 1" class="infosContainer"> | ||||||
|           <div> |           <div> | ||||||
|             {{i18n("profile.picture")}}: |             {{i18n("profile.picture")}}: | ||||||
|             <input type="file" @change="user.profilPicture = uploadProfilePicture($event.target.files);" accept="image/*"> |             <input type="file" @change="getProfilePic($event.target.files)" accept="image/*"> | ||||||
|           </div> |           </div> | ||||||
|           <div> |           <div> | ||||||
|             {{ i18n("login.guest.email")}} |             {{ i18n("login.guest.email")}} | ||||||
| @ -343,19 +352,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("newcurr") }} : |             {{ i18n("newcursus") }} : | ||||||
|             <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("newcurr") }} : |             {{ i18n("newcursus") }} : | ||||||
|             <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("newcurr") }} : |             {{ i18n("newcursus") }} : | ||||||
|             <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> | ||||||
|  | |||||||
| @ -8,7 +8,7 @@ | |||||||
|  |  | ||||||
| <script setup> | <script setup> | ||||||
|   import { ref } from 'vue' |   import { ref } from 'vue' | ||||||
|   import {getDifferenceTime,lastDateOfMonth,formatDate,getFirstDay,sortByDate,weekFromList,sundayToTheEnd,getMarginTop,getHoursMinutes, monthFromList, durationCourse} from '../scheduleFunctions.js' |   import {getDifferenceTime,lastDateOfMonth,formatDate,getFirstDay,sortByDate,weekFromList,sundayToTheEnd,getMarginTop,getHoursMinutes, monthFromList} from '../scheduleFunctions.js' | ||||||
|   import {getAllSchedule} from "@/rest/scheduleRest.js"; |   import {getAllSchedule} from "@/rest/scheduleRest.js"; | ||||||
|   import {getOnesLessons, getOwnedLessons } from "@/rest/lessonSchedule.js" |   import {getOnesLessons, getOwnedLessons } from "@/rest/lessonSchedule.js" | ||||||
|   import {isLogged, getSelf,getTeachers} from "@/rest/Users.js" |   import {isLogged, getSelf,getTeachers} from "@/rest/Users.js" | ||||||
| @ -76,8 +76,6 @@ | |||||||
|   } |   } | ||||||
|   const days = ["monday","tuesday","wednesday","thursday","friday","saturday","sunday"]; |   const days = ["monday","tuesday","wednesday","thursday","friday","saturday","sunday"]; | ||||||
|   const months = ["january","february","march","april",'may',"june","july","august","september","october","november","december"] |   const months = ["january","february","march","april",'may',"june","july","august","september","october","november","december"] | ||||||
|   const firstDayOfMonth = ref(getFirstDay(new Date())) |  | ||||||
|   const monthDone = ref(false); |  | ||||||
|   function getMonday(d) { |   function getMonday(d) { | ||||||
|     d = new Date(d); |     d = new Date(d); | ||||||
|     d.setHours(0,0,0); |     d.setHours(0,0,0); | ||||||
| @ -534,7 +532,7 @@ | |||||||
|         <option v-for="item in allSchedules" :value='item'>{{item.curriculum.option}}-{{item.curriculum.year}}</option> |         <option v-for="item in allSchedules" :value='item'>{{item.curriculum.option}}-{{item.curriculum.year}}</option> | ||||||
|       </select> |       </select> | ||||||
|       <button v-if="display=='Week'" @click="display='Month'">{{i18n("Week")}}</button> |       <button v-if="display=='Week'" @click="display='Month'">{{i18n("Week")}}</button> | ||||||
|       <button v-if="display=='Month'" @click="display='Week'; value=1;">{{i18("Month")}}</button> |       <button v-if="display=='Month'" @click="display='Week'; value=1;">{{i18n("Month")}}</button> | ||||||
|       <button v-if="format == 'Grid'" @click="format ='List'">{{i18n("Grid")}}</button> |       <button v-if="format == 'Grid'" @click="format ='List'">{{i18n("Grid")}}</button> | ||||||
|       <button v-if="format == 'List'" @click ="format = 'Grid'">{{i18n("List")}}</button> |       <button v-if="format == 'List'" @click ="format = 'Grid'">{{i18n("List")}}</button> | ||||||
|       <button v-if="verifUser()" @click="jsonMod=false ;displayOwnSchedule();">{{i18n("OwnSchedule")}}</button> |       <button v-if="verifUser()" @click="jsonMod=false ;displayOwnSchedule();">{{i18n("OwnSchedule")}}</button> | ||||||
| @ -577,6 +575,7 @@ | |||||||
|         </div> |         </div> | ||||||
|         <div class="body"  style="background-color:rgb(50,50,50);">{{i18n("schedule.courses")}}</div> |         <div class="body"  style="background-color:rgb(50,50,50);">{{i18n("schedule.courses")}}</div> | ||||||
|        <div class="body" style="background-color:#484848;"v-for="lesson in focusLessons"> |        <div class="body" style="background-color:#484848;"v-for="lesson in focusLessons"> | ||||||
|  |           {{formatDate(lesson.lessonStart)}} | ||||||
|           {{ getHoursMinutes(lesson.lessonStart)}}-{{getHoursMinutes(lesson.lessonEnd)}} |           {{ getHoursMinutes(lesson.lessonStart)}}-{{getHoursMinutes(lesson.lessonEnd)}} | ||||||
|           {{ lesson.local}} |           {{ lesson.local}} | ||||||
|           {{i18n(lesson.lessonType.toString())}} |           {{i18n(lesson.lessonType.toString())}} | ||||||
|  | |||||||
| @ -35,6 +35,14 @@ watch( | |||||||
|     } |     } | ||||||
| ); | ); | ||||||
|  |  | ||||||
|  | async function modified(){ | ||||||
|  |   if (typeof props.researchList === 'undefined'){ | ||||||
|  |     researchList.value = await fetchAllResearches() | ||||||
|  |   } | ||||||
|  |   else { | ||||||
|  |     emit('modified') | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
| const openFilter = () => { | const openFilter = () => { | ||||||
|   isFilterOpened.value = true; |   isFilterOpened.value = true; | ||||||
| @ -112,7 +120,7 @@ const emit = defineEmits(["modified"]); | |||||||
| <template> | <template> | ||||||
| <div id="researches"> | <div id="researches"> | ||||||
|   <FilterComponent :isOpen="isFilterOpened" :allArticles="researchList" @modal-close="closeFilter" @submit="submitFilters"></FilterComponent> |   <FilterComponent :isOpen="isFilterOpened" :allArticles="researchList" @modal-close="closeFilter" @submit="submitFilters"></FilterComponent> | ||||||
|   <ArticleComponent :allResearcher="allResearcher" :article="articleToDisplay" :isOpen="isResearchOpened" :manage="props.manage" @modal-close="closeResearch" @modified="emit('modified')"></ArticleComponent> |   <ArticleComponent :allResearcher="allResearcher" :article="articleToDisplay" :isOpen="isResearchOpened" :manage="props.manage" @modal-close="closeResearch" @modified="modified"></ArticleComponent> | ||||||
|   <div id="search"> |   <div id="search"> | ||||||
|     <input v-if="!isResearcher" type="text" id="search-input" :placeholder="i18n('Search.Researches')"  v-model="input"/> |     <input v-if="!isResearcher" type="text" id="search-input" :placeholder="i18n('Search.Researches')"  v-model="input"/> | ||||||
|     <input v-else type="text" id="search-input" :placeholder="i18n('Search.Researchers')" v-model="input"/> |     <input v-else type="text" id="search-input" :placeholder="i18n('Search.Researchers')" v-model="input"/> | ||||||
| @ -136,8 +144,10 @@ 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%; | ||||||
|  | |||||||
| @ -51,7 +51,7 @@ function getPP(){ | |||||||
| <template> <div class="body"><div id="main"> | <template> <div class="body"><div id="main"> | ||||||
|     <ResearchPostComponent :allResearcher="allResearcher" :researcher="researcher" :isOpen="isPostResearchOpened" @modal-close="isPostResearchOpened = false" @posted="modifiedResearch"></ResearchPostComponent> |     <ResearchPostComponent :allResearcher="allResearcher" :researcher="researcher" :isOpen="isPostResearchOpened" @modal-close="isPostResearchOpened = false" @posted="modifiedResearch"></ResearchPostComponent> | ||||||
|     <div id="profilePicture" > |     <div id="profilePicture" > | ||||||
|       <img :src=getPP() /> |       <img :src=getPP() style="border-radius: 20%"/> | ||||||
|     </div> |     </div> | ||||||
|     <div id="researcherInfos"> |     <div id="researcherInfos"> | ||||||
|       <div class="surrounded" v-if="!changing">{{researcher.user.lastName}} {{researcher.user.firstName}}</div> |       <div class="surrounded" v-if="!changing">{{researcher.user.lastName}} {{researcher.user.firstName}}</div> | ||||||
| @ -82,7 +82,7 @@ function getPP(){ | |||||||
|  |  | ||||||
|  |  | ||||||
|     </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> | </div> | ||||||
| </template> | </template> | ||||||
|  | |||||||
| @ -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("See.BibTex")}}</a> </div> |             <a v-if="article.bibTexLocation !== null" :href=downloadBibTex() @click.stop="emit('modal-close')"  target="_blank">{{i18n("SeeBibTex")}}</a> </div> | ||||||
|         </div> |         </div> | ||||||
|         <div v-if="manage" id="manage"> |         <div v-if="manage" id="manage"> | ||||||
|           <div> |           <div> | ||||||
|  | |||||||
| @ -73,12 +73,16 @@ function update(){ | |||||||
|   } |   } | ||||||
|  |  | ||||||
| } | } | ||||||
|  | async function modifiedResearch(){ | ||||||
|  |   researchList.value = await fetchResearches(researcher.value.id) | ||||||
|  | } | ||||||
|  |  | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
| <template> | <template> | ||||||
|   <div id="main"> |   <div id="main"> | ||||||
|     <div id="profilePicture"> |     <div id="profilePicture"> | ||||||
|       <img :src=getPP() /> |       <img :src=getPP() style="border-radius: 20%"/> | ||||||
|     </div> |     </div> | ||||||
|     <div id="researcherInfos"> |     <div id="researcherInfos"> | ||||||
|       <div class="surrounded">{{researcher.user.lastName}} {{researcher.user.firstName}}</div> |       <div class="surrounded">{{researcher.user.lastName}} {{researcher.user.firstName}}</div> | ||||||
| @ -111,7 +115,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"><list-researches :researchList="researchList"></list-researches></div> |     <div id="researches" style="margin-top: -15px"><list-researches :researchList="researchList" @modified="modifiedResearch"></list-researches></div> | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
|  | |||||||
| @ -27,6 +27,9 @@ 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 | ||||||
|  * |  * | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user