Compare commits
	
		
			21 Commits
		
	
	
		
			4d6387ca8b
			...
			364f39c4bc
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 364f39c4bc | |||
| f2675ed764 | |||
| 490bf403f0 | |||
| c61a092809 | |||
| 
						
						
							
						
						2cffe28720
	
				 | 
					
					
						|||
| 
						
						
							
						
						060526c20d
	
				 | 
					
					
						|||
| af8bc8872d | |||
| 
						
						
							
						
						82cf7cbfaf
	
				 | 
					
					
						|||
| 3b63896439 | |||
| bd3b03dfea | |||
| b38b1ab6b8 | |||
| 6e0a9a46e5 | |||
| 2d8fcb4712 | |||
| fcb48ac71a | |||
| 
						
						
							
						
						043f5c87d2
	
				 | 
					
					
						|||
| 
						
						
							
						
						a03983d625
	
				 | 
					
					
						|||
| b382bf957f | |||
| 
						
						
							
						
						bbddcb26ad
	
				 | 
					
					
						|||
| 71c2af7fcb | |||
| c717205764 | |||
| 
						
						
							
						
						8ac1f7ed8b
	
				 | 
					
					
						
@ -12,14 +12,8 @@ import org.springframework.http.HttpStatus;
 | 
				
			|||||||
import org.springframework.http.ResponseEntity;
 | 
					import org.springframework.http.ResponseEntity;
 | 
				
			||||||
import org.springframework.web.bind.annotation.*;
 | 
					import org.springframework.web.bind.annotation.*;
 | 
				
			||||||
import ovh.herisson.Clyde.Responses.UnauthorizedResponse;
 | 
					import ovh.herisson.Clyde.Responses.UnauthorizedResponse;
 | 
				
			||||||
import ovh.herisson.Clyde.Services.AuthenticatorService;
 | 
					import ovh.herisson.Clyde.Services.*;
 | 
				
			||||||
import ovh.herisson.Clyde.Services.LessonRequestService;
 | 
					import ovh.herisson.Clyde.Tables.*;
 | 
				
			||||||
import ovh.herisson.Clyde.Services.LessonService;
 | 
					 | 
				
			||||||
import ovh.herisson.Clyde.Services.ProtectionService;
 | 
					 | 
				
			||||||
import ovh.herisson.Clyde.Tables.LessonChangesRequest;
 | 
					 | 
				
			||||||
import ovh.herisson.Clyde.Tables.RequestState;
 | 
					 | 
				
			||||||
import ovh.herisson.Clyde.Tables.Role;
 | 
					 | 
				
			||||||
import ovh.herisson.Clyde.Tables.User;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -28,11 +22,13 @@ import java.util.Map;
 | 
				
			|||||||
public class LessonRequestsController {
 | 
					public class LessonRequestsController {
 | 
				
			||||||
    private final LessonRequestService lessonRequestServ;
 | 
					    private final LessonRequestService lessonRequestServ;
 | 
				
			||||||
    private final AuthenticatorService authServ;
 | 
					    private final AuthenticatorService authServ;
 | 
				
			||||||
 | 
					    private final UserService userServ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private final LessonService lessonServ;
 | 
					    private final LessonService lessonServ;
 | 
				
			||||||
    public LessonRequestsController(LessonRequestService lessonRequestServer, AuthenticatorService authServ, LessonService lessonServ) {
 | 
					    public LessonRequestsController(LessonRequestService lessonRequestServer, AuthenticatorService authServ, UserService userServ, LessonService lessonServ) {
 | 
				
			||||||
        this.lessonRequestServ = lessonRequestServer;
 | 
					        this.lessonRequestServ = lessonRequestServer;
 | 
				
			||||||
        this.authServ = authServ;
 | 
					        this.authServ = authServ;
 | 
				
			||||||
 | 
					        this.userServ = userServ;
 | 
				
			||||||
        this.lessonServ = lessonServ;
 | 
					        this.lessonServ = lessonServ;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@ -113,6 +109,7 @@ public class LessonRequestsController {
 | 
				
			|||||||
        if(lessonRequest.getRequestType() == 0 ) {
 | 
					        if(lessonRequest.getRequestType() == 0 ) {
 | 
				
			||||||
            if (!lessonRequestServ.modifyCreateRequestState(lessonRequest, state, local))
 | 
					            if (!lessonRequestServ.modifyCreateRequestState(lessonRequest, state, local))
 | 
				
			||||||
                return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
 | 
					                return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
 | 
				
			||||||
 | 
					            userServ.Notify(lessonRequest.getUser(), new Notification("Request took in charge","Request"+ state + ":" + lessonRequest.getCourse().getTitle(), "#/manage-owned-lessons"));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        else if(lessonRequest.getRequestType() == 1){
 | 
					        else if(lessonRequest.getRequestType() == 1){
 | 
				
			||||||
@ -122,12 +119,14 @@ public class LessonRequestsController {
 | 
				
			|||||||
            if(!lessonRequestServ.modifyChangeRequestState(infos,lessonRequest.getLessonId(),state))
 | 
					            if(!lessonRequestServ.modifyChangeRequestState(infos,lessonRequest.getLessonId(),state))
 | 
				
			||||||
                return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
 | 
					                return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
 | 
				
			||||||
            lessonRequest.setState(state);
 | 
					            lessonRequest.setState(state);
 | 
				
			||||||
 | 
					            userServ.Notify(lessonRequest.getUser(), new Notification("Request took in charge","Request"+ state + ":" + lessonServ.findById(lessonRequest.getLessonId()).getCourse().getTitle(), "#/manage-owned-lessons"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        else{
 | 
					        else{
 | 
				
			||||||
 | 
					            userServ.Notify(lessonRequest.getUser(), new Notification("Request took in charge","Request"+ state + ":" + lessonServ.findById(lessonRequest.getLessonId()).getCourse().getTitle(), "#/manage-owned-lessons"));
 | 
				
			||||||
            lessonRequestServ.modifyDeleteRequest(lessonRequest, state);
 | 
					            lessonRequestServ.modifyDeleteRequest(lessonRequest, state);
 | 
				
			||||||
            lessonRequest.setState(state);
 | 
					            lessonRequest.setState(state);
 | 
				
			||||||
              
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        lessonRequestServ.save(lessonRequest);
 | 
					        lessonRequestServ.save(lessonRequest);
 | 
				
			||||||
        return new ResponseEntity<>(HttpStatus.OK);
 | 
					        return new ResponseEntity<>(HttpStatus.OK);
 | 
				
			||||||
 | 
				
			|||||||
@ -44,7 +44,7 @@ public class UserController {
 | 
				
			|||||||
    @GetMapping("/user/{id}")
 | 
					    @GetMapping("/user/{id}")
 | 
				
			||||||
    public ResponseEntity<HashMap<String ,Object>> getUserById(@RequestHeader("Authorization") String token, @PathVariable Long id){
 | 
					    public ResponseEntity<HashMap<String ,Object>> getUserById(@RequestHeader("Authorization") String token, @PathVariable Long id){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary,Role.InscriptionService},token))
 | 
					        if (authServ.isNotIn(new Role[]{Role.Admin,Role.Secretary,Role.InscriptionService, Role.Teacher},token))
 | 
				
			||||||
            return new UnauthorizedResponse<>(null);
 | 
					            return new UnauthorizedResponse<>(null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return new ResponseEntity<>(ProtectionService.userWithoutPassword(userService.getUserById(id)), HttpStatus.OK);
 | 
					        return new ResponseEntity<>(ProtectionService.userWithoutPassword(userService.getUserById(id)), HttpStatus.OK);
 | 
				
			||||||
 | 
				
			|||||||
@ -22,6 +22,9 @@ public interface ScheduleLessonRepository extends CrudRepository<ScheduleLesson,
 | 
				
			|||||||
    @Query("select distinct sl.schedule from ScheduleLesson sl where sl.schedule.curriculum = ?1")
 | 
					    @Query("select distinct sl.schedule from ScheduleLesson sl where sl.schedule.curriculum = ?1")
 | 
				
			||||||
    Schedule findScheduleByCurriculum(Curriculum curriculum);
 | 
					    Schedule findScheduleByCurriculum(Curriculum curriculum);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Query("select distinct sl from ScheduleLesson sl where sl.lesson = ?1")
 | 
				
			||||||
 | 
					    ScheduleLesson findByLesson(Lesson lesson);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Modifying
 | 
					    @Modifying
 | 
				
			||||||
    @Transactional
 | 
					    @Transactional
 | 
				
			||||||
    @Query("delete from ScheduleLesson sl where sl.lesson =?1")
 | 
					    @Query("delete from ScheduleLesson sl where sl.lesson =?1")
 | 
				
			||||||
 | 
				
			|||||||
@ -13,9 +13,11 @@ public interface UserCurriculumRepository extends CrudRepository<UserCurriculum,
 | 
				
			|||||||
    @Query("select uc.curriculum from UserCurriculum uc where uc.user = ?1")
 | 
					    @Query("select uc.curriculum from UserCurriculum uc where uc.user = ?1")
 | 
				
			||||||
    Curriculum findByUser(User student);
 | 
					    Curriculum findByUser(User student);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Query("select distinct uc.user from UserCurriculum uc where uc.curriculum = ?1")
 | 
				
			||||||
 | 
					   Iterable<User> findUsersByCurriculum(Curriculum curriculum);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ArrayList<UserCurriculum> findByUserOrderByCurriculum(User student);
 | 
					    ArrayList<UserCurriculum> findByUserOrderByCurriculum(User student);
 | 
				
			||||||
    UserCurriculum findByUserAndCurriculumAndActual(User user, Curriculum curriculum, boolean actual);
 | 
					    UserCurriculum findByUserAndCurriculumAndActual(User user, Curriculum curriculum, boolean actual);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ArrayList<UserCurriculum> findByUserAndActual(User user, boolean actual);
 | 
					    ArrayList<UserCurriculum> findByUserAndActual(User user, boolean actual);
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -7,10 +7,7 @@ package ovh.herisson.Clyde.Services;
 | 
				
			|||||||
 * @scope Extension Horaire
 | 
					 * @scope Extension Horaire
 | 
				
			||||||
 ******************************************************/
 | 
					 ******************************************************/
 | 
				
			||||||
import org.springframework.stereotype.Service;
 | 
					import org.springframework.stereotype.Service;
 | 
				
			||||||
import ovh.herisson.Clyde.Repositories.CourseRepository;
 | 
					import ovh.herisson.Clyde.Repositories.*;
 | 
				
			||||||
import ovh.herisson.Clyde.Repositories.CurriculumCourseRepository;
 | 
					 | 
				
			||||||
import ovh.herisson.Clyde.Repositories.LessonRepository;
 | 
					 | 
				
			||||||
import ovh.herisson.Clyde.Repositories.UserCurriculumRepository;
 | 
					 | 
				
			||||||
import ovh.herisson.Clyde.Tables.*;
 | 
					import ovh.herisson.Clyde.Tables.*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
@ -19,12 +16,17 @@ import java.util.Map;
 | 
				
			|||||||
@Service
 | 
					@Service
 | 
				
			||||||
public class LessonService {
 | 
					public class LessonService {
 | 
				
			||||||
    private final LessonRepository lessonRepo;
 | 
					    private final LessonRepository lessonRepo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private final ScheduleLessonRepository scheduleLessonRepo;
 | 
				
			||||||
    private final UserCurriculumRepository userCurriculumRepo;
 | 
					    private final UserCurriculumRepository userCurriculumRepo;
 | 
				
			||||||
 | 
					    private final UserService userServ;
 | 
				
			||||||
    private final CourseRepository courseRepo;
 | 
					    private final CourseRepository courseRepo;
 | 
				
			||||||
    private final CurriculumCourseRepository curriculumCourseRepo;
 | 
					    private final CurriculumCourseRepository curriculumCourseRepo;
 | 
				
			||||||
    public LessonService(LessonRepository lessonRepo, UserCurriculumRepository userCurriculumRepo, CourseRepository courseRepo, CurriculumCourseRepository curriculumCourseRepo){
 | 
					    public LessonService(LessonRepository lessonRepo, ScheduleLessonRepository scheduleLessonRepo, UserCurriculumRepository userCurriculumRepo, UserService userServ, CourseRepository courseRepo, CurriculumCourseRepository curriculumCourseRepo){
 | 
				
			||||||
        this.lessonRepo = lessonRepo;
 | 
					        this.lessonRepo = lessonRepo;
 | 
				
			||||||
 | 
					        this.scheduleLessonRepo = scheduleLessonRepo;
 | 
				
			||||||
        this.userCurriculumRepo = userCurriculumRepo;
 | 
					        this.userCurriculumRepo = userCurriculumRepo;
 | 
				
			||||||
 | 
					        this.userServ = userServ;
 | 
				
			||||||
        this.courseRepo = courseRepo;
 | 
					        this.courseRepo = courseRepo;
 | 
				
			||||||
        this.curriculumCourseRepo = curriculumCourseRepo;
 | 
					        this.curriculumCourseRepo = curriculumCourseRepo;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -136,7 +138,12 @@ public class LessonService {
 | 
				
			|||||||
                    break;
 | 
					                    break;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        lessonRepo.save(target);
 | 
					        Lesson lesson = lessonRepo.save(target);
 | 
				
			||||||
 | 
					        ScheduleLesson scheduleLesson = scheduleLessonRepo.findByLesson(lesson);
 | 
				
			||||||
 | 
					        Iterable<User> users = userCurriculumRepo.findUsersByCurriculum(scheduleLesson.getSchedule().getCurriculum());
 | 
				
			||||||
 | 
					        for(User user: users){
 | 
				
			||||||
 | 
					            userServ.Notify(user, new Notification("Course modified in the schedule", "Course Modified " + lesson.getCourse().getTitle() , "/#/schedule"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        return true;
 | 
					        return true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,9 @@ import lombok.AllArgsConstructor;
 | 
				
			|||||||
import ovh.herisson.Clyde.Repositories.CourseRepository;
 | 
					import ovh.herisson.Clyde.Repositories.CourseRepository;
 | 
				
			||||||
import ovh.herisson.Clyde.Repositories.Msg.ForumRepository;
 | 
					import ovh.herisson.Clyde.Repositories.Msg.ForumRepository;
 | 
				
			||||||
import ovh.herisson.Clyde.Repositories.Msg.TopicRepository;
 | 
					import ovh.herisson.Clyde.Repositories.Msg.TopicRepository;
 | 
				
			||||||
 | 
					import ovh.herisson.Clyde.Services.UserService;
 | 
				
			||||||
import ovh.herisson.Clyde.Tables.Course;
 | 
					import ovh.herisson.Clyde.Tables.Course;
 | 
				
			||||||
 | 
					import ovh.herisson.Clyde.Tables.Notification;
 | 
				
			||||||
import ovh.herisson.Clyde.Tables.User;
 | 
					import ovh.herisson.Clyde.Tables.User;
 | 
				
			||||||
import ovh.herisson.Clyde.Tables.Msg.Answer;
 | 
					import ovh.herisson.Clyde.Tables.Msg.Answer;
 | 
				
			||||||
import ovh.herisson.Clyde.Tables.Msg.Forum;
 | 
					import ovh.herisson.Clyde.Tables.Msg.Forum;
 | 
				
			||||||
@ -16,17 +18,24 @@ import ovh.herisson.Clyde.Tables.Msg.Topic;
 | 
				
			|||||||
@AllArgsConstructor
 | 
					@AllArgsConstructor
 | 
				
			||||||
public class ForumService {
 | 
					public class ForumService {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private UserService userServ;
 | 
				
			||||||
	private CourseRepository courseRepo;
 | 
						private CourseRepository courseRepo;
 | 
				
			||||||
	private ForumRepository forumRepo;
 | 
						private ForumRepository forumRepo;
 | 
				
			||||||
	private TopicRepository topicRepo;
 | 
						private TopicRepository topicRepo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public void createForum(Course c, Forum f){
 | 
						public void createForum(Course c, Forum f){
 | 
				
			||||||
		c.addForum(f);
 | 
							c.addForum(f);
 | 
				
			||||||
 | 
							for (User u: f.getRegister()) {
 | 
				
			||||||
 | 
								userServ.Notify(u, new Notification("forum.notification.forum.new", f.getName(), "/#/Forum"));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		courseRepo.save(c);
 | 
							courseRepo.save(c);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void createTopic(Forum f, Topic data) {
 | 
					    public void createTopic(Forum f, Topic data) {
 | 
				
			||||||
		f.addTopic(data);
 | 
							f.addTopic(data);
 | 
				
			||||||
 | 
							for (User u: f.getRegister()) {
 | 
				
			||||||
 | 
								userServ.Notify(u, new Notification("forum.notification.topic.new", data.getSubject(), "/#/Forum"));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		forumRepo.save(f);
 | 
							forumRepo.save(f);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -9,22 +9,26 @@ import org.springframework.stereotype.Service;
 | 
				
			|||||||
import ovh.herisson.Clyde.Repositories.LessonRepository;
 | 
					import ovh.herisson.Clyde.Repositories.LessonRepository;
 | 
				
			||||||
import ovh.herisson.Clyde.Repositories.ScheduleLessonRepository;
 | 
					import ovh.herisson.Clyde.Repositories.ScheduleLessonRepository;
 | 
				
			||||||
import ovh.herisson.Clyde.Repositories.ScheduleRepository;
 | 
					import ovh.herisson.Clyde.Repositories.ScheduleRepository;
 | 
				
			||||||
 | 
					import ovh.herisson.Clyde.Repositories.UserCurriculumRepository;
 | 
				
			||||||
import ovh.herisson.Clyde.Tables.*;
 | 
					import ovh.herisson.Clyde.Tables.*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
import java.util.HashMap;
 | 
					import java.util.HashMap;
 | 
				
			||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
import java.util.Optional;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Service
 | 
					@Service
 | 
				
			||||||
public class ScheduleLessonService {
 | 
					public class ScheduleLessonService {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private final ScheduleLessonRepository scheduleLessonRepo;
 | 
					    private final ScheduleLessonRepository scheduleLessonRepo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private final UserCurriculumRepository userCurriculumRepo;
 | 
				
			||||||
 | 
					    private final UserService userServ;
 | 
				
			||||||
    private final LessonRepository lessonRepo;
 | 
					    private final LessonRepository lessonRepo;
 | 
				
			||||||
    private final ScheduleRepository scheduleRepo;
 | 
					    private final ScheduleRepository scheduleRepo;
 | 
				
			||||||
    public ScheduleLessonService(ScheduleLessonRepository scheduleLessonRepo, LessonRepository lessonRepo, ScheduleRepository scheduleRepo) {
 | 
					    public ScheduleLessonService(ScheduleLessonRepository scheduleLessonRepo, UserCurriculumRepository userCurriculumRepo, UserService userServ, LessonRepository lessonRepo, ScheduleRepository scheduleRepo) {
 | 
				
			||||||
        this.scheduleLessonRepo = scheduleLessonRepo;
 | 
					        this.scheduleLessonRepo = scheduleLessonRepo;
 | 
				
			||||||
 | 
					        this.userCurriculumRepo = userCurriculumRepo;
 | 
				
			||||||
 | 
					        this.userServ = userServ;
 | 
				
			||||||
        this.lessonRepo = lessonRepo;
 | 
					        this.lessonRepo = lessonRepo;
 | 
				
			||||||
        this.scheduleRepo = scheduleRepo;
 | 
					        this.scheduleRepo = scheduleRepo;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -32,19 +36,22 @@ public class ScheduleLessonService {
 | 
				
			|||||||
        if(scheduleLesson == null)
 | 
					        if(scheduleLesson == null)
 | 
				
			||||||
          return false;
 | 
					          return false;
 | 
				
			||||||
        scheduleLessonRepo.save(scheduleLesson);
 | 
					        scheduleLessonRepo.save(scheduleLesson);
 | 
				
			||||||
 | 
					        Iterable<User> users = userCurriculumRepo.findUsersByCurriculum(scheduleLesson.getSchedule().getCurriculum());
 | 
				
			||||||
 | 
					        for(User user: users){
 | 
				
			||||||
 | 
					            userServ.Notify(user, new Notification("New course in the schedule", "Course added " + scheduleLesson.getLesson().getCourse().getTitle(), "/#/schedule"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        return true;
 | 
					        return true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Save a lesson to all the schedule it is linked
 | 
					     * Save a lesson to all the schedule it is linked
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public boolean saveToAllSchedule(Lesson lesson){
 | 
					    public void saveToAllSchedule(Lesson lesson){
 | 
				
			||||||
        Iterable<Schedule> schedules = scheduleRepo.findAllLessonSchedule(lesson.getCourse());
 | 
					        Iterable<Schedule> schedules = scheduleRepo.findAllLessonSchedule(lesson.getCourse());
 | 
				
			||||||
        if(schedules == null)
 | 
					        if(schedules == null)
 | 
				
			||||||
            return false;
 | 
					            return;
 | 
				
			||||||
        for (Schedule schedule : schedules){
 | 
					        for (Schedule schedule : schedules){
 | 
				
			||||||
            save(new ScheduleLesson(schedule, lesson));
 | 
					            save(new ScheduleLesson(schedule, lesson));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return true;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Delete a scheduleLesson via its lesson
 | 
					     * Delete a scheduleLesson via its lesson
 | 
				
			||||||
@ -52,6 +59,11 @@ public class ScheduleLessonService {
 | 
				
			|||||||
    public boolean delete(long lessonId){
 | 
					    public boolean delete(long lessonId){
 | 
				
			||||||
        if(lessonId == 0)
 | 
					        if(lessonId == 0)
 | 
				
			||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
 | 
					        ScheduleLesson scheduleLesson = scheduleLessonRepo.findByLesson(lessonRepo.findById(lessonId));
 | 
				
			||||||
 | 
					        Iterable<User> users = userCurriculumRepo.findUsersByCurriculum(scheduleLesson.getSchedule().getCurriculum());
 | 
				
			||||||
 | 
					        for(User user: users){
 | 
				
			||||||
 | 
					            userServ.Notify(user, new Notification("Course deleted in the schedule","Course deleted " +  scheduleLesson.getLesson().getCourse().getTitle(), "/#/schedule"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        scheduleLessonRepo.delete(lessonRepo.findById(lessonId));
 | 
					        scheduleLessonRepo.delete(lessonRepo.findById(lessonId));
 | 
				
			||||||
        return true;
 | 
					        return true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -12,6 +12,7 @@ import ovh.herisson.Clyde.Tables.Msg.Discussion;
 | 
				
			|||||||
import ovh.herisson.Clyde.Tables.Msg.Message;
 | 
					import ovh.herisson.Clyde.Tables.Msg.Message;
 | 
				
			||||||
import ovh.herisson.Clyde.Tables.Notification.Status;
 | 
					import ovh.herisson.Clyde.Tables.Notification.Status;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.ArrayList;
 | 
				
			||||||
import java.util.Date;
 | 
					import java.util.Date;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -41,7 +42,7 @@ public class User {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	@JsonIgnore
 | 
						@JsonIgnore
 | 
				
			||||||
	@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
 | 
						@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
 | 
				
			||||||
	private List<Notification> notifications; 
 | 
						private List<Notification> notifications = new ArrayList<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	////// Extension Messagerie /////
 | 
						////// Extension Messagerie /////
 | 
				
			||||||
	@JsonIgnore
 | 
						@JsonIgnore
 | 
				
			||||||
 | 
				
			|||||||
@ -203,6 +203,8 @@ msg.notification.new=You have a new message
 | 
				
			|||||||
forum.create=Create forum
 | 
					forum.create=Create forum
 | 
				
			||||||
forum.create.name=New forum's name
 | 
					forum.create.name=New forum's name
 | 
				
			||||||
forum.post.create.name=New post's title 
 | 
					forum.post.create.name=New post's title 
 | 
				
			||||||
 | 
					forum.notification.topic.new=New topic created
 | 
				
			||||||
 | 
					forum.notification.forum.new=New Forum created
 | 
				
			||||||
firstname/name=Firstname/Name
 | 
					firstname/name=Firstname/Name
 | 
				
			||||||
regNo=regNo
 | 
					regNo=regNo
 | 
				
			||||||
From=From
 | 
					From=From
 | 
				
			||||||
@ -282,7 +284,7 @@ rereg=Reregister in the next year of one of my cursus
 | 
				
			|||||||
reregsup=Register in a supplementary cursus
 | 
					reregsup=Register in a supplementary cursus
 | 
				
			||||||
chcur=Change from a cursus to another
 | 
					chcur=Change from a cursus to another
 | 
				
			||||||
iwouldlike=I would like to :
 | 
					iwouldlike=I would like to :
 | 
				
			||||||
newcurr=New curriculum
 | 
					newcurr=Actual curriculums
 | 
				
			||||||
cursusprereq=The cursus you selected has some prerequisites ensure that your external curriculum data is updated in your profile
 | 
					cursusprereq=The cursus you selected has some prerequisites ensure that your external curriculum data is updated in your profile
 | 
				
			||||||
imposecurriculum=Impose a curriculum
 | 
					imposecurriculum=Impose a curriculum
 | 
				
			||||||
impose=Impose
 | 
					impose=Impose
 | 
				
			||||||
 | 
				
			|||||||
@ -201,6 +201,8 @@ msg.notification.new=Vous avez un nouveau message!
 | 
				
			|||||||
forum.create=Créer un forum
 | 
					forum.create=Créer un forum
 | 
				
			||||||
forum.create.name=Nom du forum
 | 
					forum.create.name=Nom du forum
 | 
				
			||||||
forum.post.create.name=Titre du post
 | 
					forum.post.create.name=Titre du post
 | 
				
			||||||
 | 
					forum.notification.topic.new=Nouveau Topic crée
 | 
				
			||||||
 | 
					forum.notification.forum.new=Nouveau forum crée
 | 
				
			||||||
firstname/name=Prénom/Nom
 | 
					firstname/name=Prénom/Nom
 | 
				
			||||||
regNo=Matricule
 | 
					regNo=Matricule
 | 
				
			||||||
From=De
 | 
					From=De
 | 
				
			||||||
@ -280,7 +282,7 @@ rereg=Me réinscrire dans l'année supérieure
 | 
				
			|||||||
reregsup=M'inscrire dans un cursus supplémentaire
 | 
					reregsup=M'inscrire dans un cursus supplémentaire
 | 
				
			||||||
chcur=Changer d'un cursus vers un autre
 | 
					chcur=Changer d'un cursus vers un autre
 | 
				
			||||||
iwouldlike=Je voudrais :
 | 
					iwouldlike=Je voudrais :
 | 
				
			||||||
newcurr=Nouveau cursus
 | 
					newcurr=Cursus actuels
 | 
				
			||||||
cursusprereq=Le cursus que vous avez selectionné a des prérequis assurez vous que votre dossier de parcours est a jour dans votre profil
 | 
					cursusprereq=Le cursus que vous avez selectionné a des prérequis assurez vous que votre dossier de parcours est a jour dans votre profil
 | 
				
			||||||
imposecurriculum=Imposer un cursusgotimposed
 | 
					imposecurriculum=Imposer un cursusgotimposed
 | 
				
			||||||
impose=Imposer
 | 
					impose=Imposer
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@
 | 
				
			|||||||
  import { toast } from 'vue3-toastify';
 | 
					  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 } 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 { appList, currentView } from '@/rest/apps.js'
 | 
					  import { appList, currentView } from '@/rest/apps.js'
 | 
				
			||||||
@ -14,9 +14,11 @@ window.onhashchange = function() {
 | 
				
			|||||||
    currentURL = window.location.hash;
 | 
					    currentURL = window.location.hash;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
const Logged = ref(isLogged());
 | 
					const Logged = ref(isLogged());
 | 
				
			||||||
 | 
					const user = ref();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(Logged.value){
 | 
					if(Logged.value){
 | 
				
			||||||
	fetchNotifications();
 | 
						fetchNotifications();
 | 
				
			||||||
 | 
						getSelf().then(e => user.value = e);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
window.addEventListener('hashchange', () => {
 | 
					window.addEventListener('hashchange', () => {
 | 
				
			||||||
@ -49,7 +51,7 @@ window.addEventListener('hashchange', () => {
 | 
				
			|||||||
            </a></li>
 | 
					            </a></li>
 | 
				
			||||||
        <li style="float: right;" title=login>
 | 
					        <li style="float: right;" title=login>
 | 
				
			||||||
            <a class="icon" href="#/login">
 | 
					            <a class="icon" href="#/login">
 | 
				
			||||||
                <div class="fa-solid fa-user" :style="Logged ? 'color: red' : ''" style="margin-top: 7px; margin-bottom: 3px; "></div>
 | 
													<div class="fa-solid fa-user" :style="Logged ? 'color: red' : ''" style="margin-top: 7px; margin-bottom: 3px; "></div>
 | 
				
			||||||
            </a></li>
 | 
					            </a></li>
 | 
				
			||||||
        <li style="float: right;" title=notifications @click="notification = !notification">
 | 
					        <li style="float: right;" title=notifications @click="notification = !notification">
 | 
				
			||||||
            <a class="icon">
 | 
					            <a class="icon">
 | 
				
			||||||
@ -75,6 +77,7 @@ window.addEventListener('hashchange', () => {
 | 
				
			|||||||
                    {{i18n("app.manage.profile")}}
 | 
					                    {{i18n("app.manage.profile")}}
 | 
				
			||||||
                  </a>
 | 
					                  </a>
 | 
				
			||||||
                  </div>
 | 
					                  </div>
 | 
				
			||||||
 | 
														<span v-if=Logged>RegNo - {{ user.regNo }}</span>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
            </a></li>
 | 
					            </a></li>
 | 
				
			||||||
      </ul>
 | 
					      </ul>
 | 
				
			||||||
@ -133,10 +136,12 @@ window.addEventListener('hashchange', () => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.dropdown {
 | 
					.dropdown {
 | 
				
			||||||
 | 
					  color:black;
 | 
				
			||||||
  margin-top:55px;
 | 
					  margin-top:55px;
 | 
				
			||||||
  width:160px;
 | 
					  width:160px;
 | 
				
			||||||
  display: inline-block;
 | 
					  display: inline-block;
 | 
				
			||||||
  height:110px;
 | 
					  /* height:110px; */
 | 
				
			||||||
 | 
						text-align: center;
 | 
				
			||||||
  font-size: 13px;
 | 
					  font-size: 13px;
 | 
				
			||||||
  position: absolute;
 | 
					  position: absolute;
 | 
				
			||||||
  z-index: 1;
 | 
					  z-index: 1;
 | 
				
			||||||
@ -162,12 +167,12 @@ window.addEventListener('hashchange', () => {
 | 
				
			|||||||
		margin-top: var(--header-size);
 | 
							margin-top: var(--header-size);
 | 
				
			||||||
    top:0;
 | 
					    top:0;
 | 
				
			||||||
    left:0;
 | 
					    left:0;
 | 
				
			||||||
		padding: 25px 0 0;
 | 
							padding: 25px 0;
 | 
				
			||||||
		width: 70px ;
 | 
							width: 70px ;
 | 
				
			||||||
		background-color: rgb(53, 53, 53);
 | 
							background-color: rgb(53, 53, 53);
 | 
				
			||||||
		border-right:5px;
 | 
							border-right:5px;
 | 
				
			||||||
		border-color:black;
 | 
							border-color:black;
 | 
				
			||||||
		height: 100%;
 | 
							height: calc( 95% - var(--header-size) ) ;
 | 
				
			||||||
		position: fixed;
 | 
							position: fixed;
 | 
				
			||||||
		overflow: scroll;
 | 
							overflow: scroll;
 | 
				
			||||||
		transition-duration: .3s;
 | 
							transition-duration: .3s;
 | 
				
			||||||
@ -237,8 +242,7 @@ window.addEventListener('hashchange', () => {
 | 
				
			|||||||
	  .text {
 | 
						  .text {
 | 
				
			||||||
		right: 0%;
 | 
							right: 0%;
 | 
				
			||||||
		width: 0%;
 | 
							width: 0%;
 | 
				
			||||||
		visibility: collapse;
 | 
							display:none;
 | 
				
			||||||
		opacity: 0;
 | 
					 | 
				
			||||||
		color: white;
 | 
							color: white;
 | 
				
			||||||
		font-size: 1.2em;
 | 
							font-size: 1.2em;
 | 
				
			||||||
		font-weight: 600;
 | 
							font-weight: 600;
 | 
				
			||||||
@ -247,7 +251,7 @@ window.addEventListener('hashchange', () => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	  ul.vertical:hover .text {
 | 
						  ul.vertical:hover .text {
 | 
				
			||||||
		opacity:1;
 | 
							opacity:1;
 | 
				
			||||||
		visibility:visible;
 | 
							display: inline;
 | 
				
			||||||
		width: 60%;
 | 
							width: 60%;
 | 
				
			||||||
		transition-duration: .3s;
 | 
							transition-duration: .3s;
 | 
				
			||||||
		padding-left: 15px;
 | 
							padding-left: 15px;
 | 
				
			||||||
 | 
				
			|||||||
@ -147,8 +147,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 +166,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{
 | 
				
			||||||
 | 
				
			|||||||
@ -32,6 +32,9 @@
 | 
				
			|||||||
          <div>
 | 
					          <div>
 | 
				
			||||||
            {{ i18n("firstname/name") }} : {{user.firstName}} {{user.lastName}}
 | 
					            {{ i18n("firstname/name") }} : {{user.firstName}} {{user.lastName}}
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
 | 
					          <div>
 | 
				
			||||||
 | 
					            {{ i18n("regNo") }} :  {{user.regNo}}
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
          <div>
 | 
					          <div>
 | 
				
			||||||
            {{ i18n("login.guest.email") }}: {{user.email}}
 | 
					            {{ i18n("login.guest.email") }}: {{user.email}}
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
 | 
				
			|||||||
@ -80,7 +80,7 @@ function isExempted(course){
 | 
				
			|||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
  <div v-if="list === false">
 | 
					  <div v-if="list === false">
 | 
				
			||||||
    <button @click="list=!list;submitted=!submitted">{{ i18n("courses.back") }}</button>
 | 
					    <button @click="list=!list;submitted=false">{{ i18n("courses.back") }}</button>
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -115,7 +115,7 @@
 | 
				
			|||||||
          <div class="studentfirstname">{{item.user.firstName}}</div>
 | 
					          <div class="studentfirstname">{{item.user.firstName}}</div>
 | 
				
			||||||
          <div class="studentlastname">{{item.user.lastName}}</div>
 | 
					          <div class="studentlastname">{{item.user.lastName}}</div>
 | 
				
			||||||
          <div class="reqState">{{ i18n("approval")}}{{item.state}}</div>
 | 
					          <div class="reqState">{{ i18n("approval")}}{{item.state}}</div>
 | 
				
			||||||
          <div class="teacherApproval">{{ i18n("teacherapproval") }} : {{item.teacherApprovalState}}</div>
 | 
					          <div class="teacherApproval">{{ i18n("teacherapproval") }} {{item.teacherApprovalState}}</div>
 | 
				
			||||||
          <div class="infos"><button @click="windowsState=5;targetId=item.id">{{ i18n("request.moreInfos") }}</button></div>
 | 
					          <div class="infos"><button @click="windowsState=5;targetId=item.id">{{ i18n("request.moreInfos") }}</button></div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
 | 
				
			|||||||
@ -192,10 +192,10 @@
 | 
				
			|||||||
          <div>
 | 
					          <div>
 | 
				
			||||||
            {{ i18n("login.guest.email") }}: {{user.email}}
 | 
					            {{ i18n("login.guest.email") }}: {{user.email}}
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
          <div v-if="user.role==='Student'">
 | 
					          <div>
 | 
				
			||||||
            {{ i18n("regNo") }} :  {{user.regNo}}
 | 
					            {{ i18n("regNo") }} :  {{user.regNo}}
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
          <div v-else>
 | 
					          <div>
 | 
				
			||||||
            {{ i18n("role") }}:  {{i18n((user.role))}}
 | 
					            {{ i18n("role") }}:  {{i18n((user.role))}}
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
          <div>
 | 
					          <div>
 | 
				
			||||||
@ -253,7 +253,7 @@
 | 
				
			|||||||
            {{ i18n("alreadypaid") }}
 | 
					            {{ i18n("alreadypaid") }}
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
          <div>
 | 
					          <div>
 | 
				
			||||||
            <button @click="windowState=7" v-if="minerv.value.toPay <= 0">{{ i18n("askscholarship") }}</button>
 | 
					            <button @click="windowState=7" v-if="minerv.value.toPay >= 0">{{ i18n("askscholarship") }}</button>
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
        <div v-if="windowState === 5">
 | 
					        <div v-if="windowState === 5">
 | 
				
			||||||
@ -369,7 +369,7 @@
 | 
				
			|||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
      <div v-if="windowState === 0" class="moreInfos">
 | 
					      <div v-if="windowState === 0 && user.role==='Student'" class="moreInfos">
 | 
				
			||||||
        <div class = "oldcursus">
 | 
					        <div class = "oldcursus">
 | 
				
			||||||
            <div class="listTitle">
 | 
					            <div class="listTitle">
 | 
				
			||||||
              {{ i18n("oldcursus") }}
 | 
					              {{ i18n("oldcursus") }}
 | 
				
			||||||
 | 
				
			|||||||
@ -2,9 +2,14 @@ import { ref } from 'vue'
 | 
				
			|||||||
import { restGet, restPost } from '@/rest/restConsumer.js'
 | 
					import { restGet, restPost } from '@/rest/restConsumer.js'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const notifications = ref([]);
 | 
					export const notifications = ref([]);
 | 
				
			||||||
 | 
					let timerSet = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function fetchNotifications(){
 | 
					export function fetchNotifications(){
 | 
				
			||||||
	restGet("/notifications").then( e => notifications.value = e );
 | 
						restGet("/notifications").then( e => notifications.value = e );
 | 
				
			||||||
 | 
						if(!timerSet){
 | 
				
			||||||
 | 
							timerSet = true;
 | 
				
			||||||
 | 
							setTimeout(() => {timerSet = false; fetchNotifications()}, 5000);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function archiveNotification(id){
 | 
					export function archiveNotification(id){
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user