Merge branch 'master' into wal/front/listingUsers
This commit is contained in:
		@ -2,6 +2,7 @@ package ovh.herisson.Clyde.EndPoints;
 | 
			
		||||
 | 
			
		||||
import org.springframework.http.HttpStatus;
 | 
			
		||||
import org.springframework.http.ResponseEntity;
 | 
			
		||||
import org.springframework.web.bind.annotation.CrossOrigin;
 | 
			
		||||
import org.springframework.web.bind.annotation.GetMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.PathVariable;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestHeader;
 | 
			
		||||
@ -9,10 +10,12 @@ import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import ovh.herisson.Clyde.Services.AuthenticatorService;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Applications;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Role;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.User;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
 | 
			
		||||
@RestController
 | 
			
		||||
@CrossOrigin(originPatterns = "*", allowCredentials = "true")
 | 
			
		||||
public class ApplicationsController {
 | 
			
		||||
 | 
			
		||||
    AuthenticatorService authServ;
 | 
			
		||||
@ -41,12 +44,17 @@ public class ApplicationsController {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public ArrayList<Applications> getAuthorizedApplications(String token){
 | 
			
		||||
        Role posterRole = authServ.getUserFromToken(token).getRole();
 | 
			
		||||
        ArrayList<Applications> authorizedApps = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
        authorizedApps.add(Applications.Login);
 | 
			
		||||
        authorizedApps.add(Applications.Profile);
 | 
			
		||||
 | 
			
		||||
		User user = authServ.getUserFromToken(token);
 | 
			
		||||
		if(user == null)
 | 
			
		||||
			return authorizedApps;
 | 
			
		||||
 | 
			
		||||
		Role posterRole = user.getRole();
 | 
			
		||||
 | 
			
		||||
        if (posterRole == Role.Teacher || posterRole == Role.Student || posterRole == Role.Admin){
 | 
			
		||||
            authorizedApps.add(Applications.Msg);
 | 
			
		||||
            authorizedApps.add(Applications.Forum);
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,80 @@
 | 
			
		||||
package ovh.herisson.Clyde.EndPoints;
 | 
			
		||||
 | 
			
		||||
import org.springframework.http.HttpStatus;
 | 
			
		||||
import org.springframework.http.ResponseEntity;
 | 
			
		||||
import org.springframework.web.bind.annotation.*;
 | 
			
		||||
import ovh.herisson.Clyde.Responses.UnauthorizedResponse;
 | 
			
		||||
import ovh.herisson.Clyde.Services.AuthenticatorService;
 | 
			
		||||
import ovh.herisson.Clyde.Services.CourseService;
 | 
			
		||||
import ovh.herisson.Clyde.Services.TeacherCourseService;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Course;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Role;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.TeacherCourse;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.User;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
@RestController
 | 
			
		||||
@CrossOrigin(originPatterns = "*", allowCredentials = "true")
 | 
			
		||||
public class CourseController {
 | 
			
		||||
 | 
			
		||||
    private final CourseService courseServ;
 | 
			
		||||
 | 
			
		||||
    private final TeacherCourseService teacherCourseServ;
 | 
			
		||||
 | 
			
		||||
    private final AuthenticatorService authServ;
 | 
			
		||||
 | 
			
		||||
    public CourseController(CourseService courseServ, TeacherCourseService teacherCourseServ, AuthenticatorService authServ) {
 | 
			
		||||
        this.courseServ = courseServ;
 | 
			
		||||
        this.teacherCourseServ = teacherCourseServ;
 | 
			
		||||
        this.authServ = authServ;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @GetMapping("/course/{id}")
 | 
			
		||||
    public ResponseEntity<Course> getCourse(@RequestHeader("Authorization") String token, @PathVariable long id){
 | 
			
		||||
        if (authServ.getUserFromToken(token) == null)
 | 
			
		||||
            return new UnauthorizedResponse<>(null);
 | 
			
		||||
 | 
			
		||||
        return new ResponseEntity<>(courseServ.findById(id), HttpStatus.OK);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    @PostMapping("/course")
 | 
			
		||||
    public ResponseEntity<Course> postCourse(@RequestHeader("Authorization") String token, @RequestBody Course course){
 | 
			
		||||
        if (authServ.isNotSecretaryOrAdmin(token))
 | 
			
		||||
            return new UnauthorizedResponse<>(null);
 | 
			
		||||
 | 
			
		||||
        return new ResponseEntity<>(courseServ.save(course), HttpStatus.CREATED);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    @PatchMapping("/course/{id}")
 | 
			
		||||
    public ResponseEntity<Course> patchCourse(@RequestHeader("Authorization") String token,
 | 
			
		||||
                                              @RequestBody Map<String,Object> updates,
 | 
			
		||||
                                              @PathVariable long id)
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        if (authServ.IsNotIn(new Role[]{Role.Admin,Role.Teacher,Role.Secretary}, token)){
 | 
			
		||||
            return new UnauthorizedResponse<>(null);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return new ResponseEntity<>(courseServ.modifyData(id, updates, authServ.getUserFromToken(token).getRole()), HttpStatus.OK);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PostMapping("/course/{id}")
 | 
			
		||||
    public ResponseEntity<String> postTeachers(@RequestHeader("Authorization") String token,
 | 
			
		||||
                                               @RequestBody Iterable<Long> teacherIds,
 | 
			
		||||
                                               @PathVariable Long id)
 | 
			
		||||
    {
 | 
			
		||||
        if (authServ.IsNotIn(new Role[]{Role.Admin,Role.Secretary}, token))
 | 
			
		||||
            return new UnauthorizedResponse<>(null);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        teacherCourseServ.saveAll(teacherIds,courseServ.findById(id));
 | 
			
		||||
        return new ResponseEntity<>(HttpStatus.OK);
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -15,6 +15,7 @@ import ovh.herisson.Clyde.Tables.User;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
@RestController
 | 
			
		||||
@CrossOrigin(originPatterns = "*", allowCredentials = "true")
 | 
			
		||||
public class CurriculumController {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -43,4 +44,17 @@ public class CurriculumController {
 | 
			
		||||
    public ResponseEntity<Iterable<CurriculumCourse>> findAll(){
 | 
			
		||||
        return new ResponseEntity<>(curriculumCourseServ.findAll(),HttpStatus.OK);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**@PostMapping("/curriculum") //todo now
 | 
			
		||||
    public ResponseEntity<String> postCurriculum(@RequestHeader("Authorization") String token,@RequestBody Curriculum curriculum){
 | 
			
		||||
 | 
			
		||||
        if (!isSecretaryOrAdmin(token)){
 | 
			
		||||
            return new UnauthorizedResponse<>("you're not allowed to post a Curriculum");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        CurriculumServ.save(Curriculum);
 | 
			
		||||
 | 
			
		||||
        return new ResponseEntity<>("created !",HttpStatus.CREATED);
 | 
			
		||||
    }**/
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -47,6 +47,6 @@ public class LoginController {
 | 
			
		||||
    @PostMapping("/request/register")
 | 
			
		||||
    public ResponseEntity<String> register(@RequestBody InscriptionRequest inscriptionRequest){
 | 
			
		||||
        authServ.register(inscriptionRequest);
 | 
			
		||||
        return new ResponseEntity<>("Is OK", HttpStatus.OK);
 | 
			
		||||
        return new ResponseEntity<>("Is OK", HttpStatus.CREATED);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -68,10 +68,10 @@ public class MockController {
 | 
			
		||||
        curriculumService.save(psychologyBab1);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        Course progra1 = new Course(5,"Programmation et algorithimque 1","TODO DELETE");
 | 
			
		||||
        Course chemistry1 = new Course(12, "Thermochimie","TODO DELETE");
 | 
			
		||||
        Course psycho1 = new Course(21, "rien faire t'as cru c'est psycho", "TODO DELETE");
 | 
			
		||||
        Course commun = new Course(2, "cours commun","TODO DELETE");
 | 
			
		||||
        Course progra1 = new Course(5,"Programmation et algorithimque 1",joke);
 | 
			
		||||
        Course chemistry1 = new Course(12, "Thermochimie",joke);
 | 
			
		||||
        Course psycho1 = new Course(21, "rien faire t'as cru c'est psycho",joke);
 | 
			
		||||
        Course commun = new Course(2, "cours commun",joke);
 | 
			
		||||
 | 
			
		||||
        courseService.save(progra1);
 | 
			
		||||
        courseService.save(chemistry1);
 | 
			
		||||
 | 
			
		||||
@ -9,6 +9,8 @@ import ovh.herisson.Clyde.Services.AuthenticatorService;
 | 
			
		||||
import ovh.herisson.Clyde.Services.UserService;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Role;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.User;
 | 
			
		||||
 | 
			
		||||
import java.security.Key;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
@ -72,6 +74,23 @@ public class UserController {
 | 
			
		||||
 | 
			
		||||
        return new ResponseEntity<>("data modified", HttpStatus.OK);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @GetMapping("/teachers")
 | 
			
		||||
    public ResponseEntity<Iterable<HashMap<String,Object>>> getAllTeachers(@RequestHeader("Authorization") String token){
 | 
			
		||||
        if (authServ.getUserFromToken(token) == null)
 | 
			
		||||
            return new UnauthorizedResponse<>(null);
 | 
			
		||||
        Iterable<User> teachers = userService.getAllTeachers();
 | 
			
		||||
        ArrayList<HashMap<String, Object>> withoutPassword = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
        for (User t: teachers){
 | 
			
		||||
            withoutPassword.add(userWithoutPassword(t));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return new ResponseEntity<>(withoutPassword, HttpStatus.OK);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /** return user's data except password
 | 
			
		||||
         * @param user the user to return
 | 
			
		||||
         * @return all the user data without the password
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,8 @@
 | 
			
		||||
package ovh.herisson.Clyde.Repositories;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
import org.springframework.data.repository.CrudRepository;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.TeacherCourse;
 | 
			
		||||
 | 
			
		||||
public interface TeacherCourseRepository extends CrudRepository<TeacherCourse, Long> {
 | 
			
		||||
}
 | 
			
		||||
@ -15,4 +15,8 @@ public interface UserRepository extends CrudRepository<User, Long> {
 | 
			
		||||
    /**
 | 
			
		||||
    @Query(value = "select a.* from Users a ",nativeQuery = true)
 | 
			
		||||
    Iterable<User> findAllUsers();**/
 | 
			
		||||
 | 
			
		||||
    @Query("select u from User u where u.role = ovh.herisson.Clyde.Tables.Role.Teacher")
 | 
			
		||||
    Iterable<User> findAllTeachers();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -50,5 +50,18 @@ public class AuthenticatorService {
 | 
			
		||||
        return poster.getRole() != Role.Secretary || poster.getRole() != Role.Admin;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean IsNotIn(Role[] roles, String token){
 | 
			
		||||
        if (token == null)
 | 
			
		||||
            return true;
 | 
			
		||||
 | 
			
		||||
        User poster = getUserFromToken(token);
 | 
			
		||||
        if (poster == null) return true;
 | 
			
		||||
 | 
			
		||||
        for (Role r:roles){
 | 
			
		||||
            if (poster.getRole() == r)
 | 
			
		||||
                return false;
 | 
			
		||||
        }
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -3,6 +3,10 @@ package ovh.herisson.Clyde.Services;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
import ovh.herisson.Clyde.Repositories.CourseRepository;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Course;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Role;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.User;
 | 
			
		||||
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
@Service
 | 
			
		||||
public class CourseService {
 | 
			
		||||
@ -13,11 +17,39 @@ public class CourseService {
 | 
			
		||||
        this.courseRepo = courseRepo;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void save(Course course){
 | 
			
		||||
        courseRepo.save(course);
 | 
			
		||||
    public Course save(Course course){
 | 
			
		||||
        return courseRepo.save(course);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Course findById(long id){
 | 
			
		||||
        return courseRepo.findById(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Course modifyData(long id, Map<String, Object> updates, Role role) {
 | 
			
		||||
        Course target = courseRepo.findById(id);
 | 
			
		||||
 | 
			
		||||
        if (role == Role.Teacher){
 | 
			
		||||
            for (Map.Entry<String, Object> entry : updates.entrySet()){
 | 
			
		||||
                if (entry.getKey().equals("title")){
 | 
			
		||||
                    target.setTitle((String) entry.getValue());
 | 
			
		||||
                    return courseRepo.save(target);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        for (Map.Entry<String ,Object> entry: updates.entrySet()){
 | 
			
		||||
            switch (entry.getKey()){
 | 
			
		||||
                case "title":
 | 
			
		||||
                    target.setTitle((String) entry.getValue());
 | 
			
		||||
                    break;
 | 
			
		||||
                case "credits":
 | 
			
		||||
                    target.setCredits((Integer) entry.getValue());
 | 
			
		||||
                    break;
 | 
			
		||||
                case "owner":
 | 
			
		||||
                    target.setOwner((User) entry.getValue()); //todo check if is a teacher !
 | 
			
		||||
                    break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return courseRepo.save(target);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,39 @@
 | 
			
		||||
package ovh.herisson.Clyde.Services;
 | 
			
		||||
 | 
			
		||||
import org.springframework.stereotype.Controller;
 | 
			
		||||
import ovh.herisson.Clyde.Repositories.TeacherCourseRepository;
 | 
			
		||||
import ovh.herisson.Clyde.Repositories.UserRepository;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Course;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.TeacherCourse;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.User;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
 | 
			
		||||
@Controller
 | 
			
		||||
public class TeacherCourseService {
 | 
			
		||||
    private final TeacherCourseRepository teacherCourseRepo;
 | 
			
		||||
 | 
			
		||||
    private final UserRepository userRepo;
 | 
			
		||||
 | 
			
		||||
    public TeacherCourseService(TeacherCourseRepository teacherCourseRepo, UserRepository userRepo) {
 | 
			
		||||
        this.teacherCourseRepo = teacherCourseRepo;
 | 
			
		||||
        this.userRepo = userRepo;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean saveAll(Iterable<Long> teacherIds, Course course){
 | 
			
		||||
 | 
			
		||||
        ArrayList<Long> addedIds = new ArrayList<>();
 | 
			
		||||
        for (Long teacherId : teacherIds){
 | 
			
		||||
            User teacher = userRepo.findById((long) teacherId);
 | 
			
		||||
            if ( teacher== null){
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
            if (!addedIds.contains(teacherId))
 | 
			
		||||
            {
 | 
			
		||||
                teacherCourseRepo.save(new TeacherCourse(teacher,course));
 | 
			
		||||
                addedIds.add(teacherId);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -103,4 +103,8 @@ public class UserService {
 | 
			
		||||
    public Iterable<User> getAll(){
 | 
			
		||||
        return userRepo.findAll();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public Iterable<User> getAllTeachers (){return userRepo.findAllTeachers();}
 | 
			
		||||
}
 | 
			
		||||
@ -1,9 +1,6 @@
 | 
			
		||||
package ovh.herisson.Clyde.Tables;
 | 
			
		||||
 | 
			
		||||
import jakarta.persistence.Entity;
 | 
			
		||||
import jakarta.persistence.GeneratedValue;
 | 
			
		||||
import jakarta.persistence.GenerationType;
 | 
			
		||||
import jakarta.persistence.Id;
 | 
			
		||||
import jakarta.persistence.*;
 | 
			
		||||
 | 
			
		||||
@Entity
 | 
			
		||||
public class Course {
 | 
			
		||||
@ -12,12 +9,15 @@ public class Course {
 | 
			
		||||
    private int courseID;
 | 
			
		||||
    private int credits;
 | 
			
		||||
    private String title;
 | 
			
		||||
    private String faculty;
 | 
			
		||||
 | 
			
		||||
    public Course(int credits, String title, String faculty){
 | 
			
		||||
    @ManyToOne(fetch = FetchType.EAGER)
 | 
			
		||||
    @JoinColumn(name = "Users")
 | 
			
		||||
    private User owner;
 | 
			
		||||
 | 
			
		||||
    public Course(int credits, String title, User owner){
 | 
			
		||||
        this.credits = credits;
 | 
			
		||||
        this.title = title;
 | 
			
		||||
        this.faculty = faculty;
 | 
			
		||||
        this.owner = owner;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Course() {}
 | 
			
		||||
@ -34,14 +34,6 @@ public class Course {
 | 
			
		||||
        this.credits = credits;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getFaculty() {
 | 
			
		||||
        return faculty;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setFaculty(String faculty){
 | 
			
		||||
        this.faculty = faculty;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getTitle() {
 | 
			
		||||
        return title;
 | 
			
		||||
    }
 | 
			
		||||
@ -49,4 +41,12 @@ public class Course {
 | 
			
		||||
    public void setTitle(String title){
 | 
			
		||||
        this.title = title;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public User getOwner() {
 | 
			
		||||
        return owner;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setOwner(User owner) {
 | 
			
		||||
        this.owner = owner;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -3,30 +3,26 @@ package ovh.herisson.Clyde.Tables;
 | 
			
		||||
import jakarta.persistence.*;
 | 
			
		||||
 | 
			
		||||
@Entity
 | 
			
		||||
public class TeacherGivenCourse {
 | 
			
		||||
public class TeacherCourse {
 | 
			
		||||
    @Id
 | 
			
		||||
    @GeneratedValue(strategy = GenerationType.AUTO)
 | 
			
		||||
    private int id;
 | 
			
		||||
 | 
			
		||||
    @ManyToOne(fetch = FetchType.LAZY)
 | 
			
		||||
    @ManyToOne(fetch = FetchType.EAGER)
 | 
			
		||||
    @JoinColumn(name = "Users")
 | 
			
		||||
    private User user;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    @ManyToOne(fetch = FetchType.LAZY)
 | 
			
		||||
    @ManyToOne(fetch = FetchType.EAGER)
 | 
			
		||||
    @JoinColumn(name = "Course")
 | 
			
		||||
    private Course course;
 | 
			
		||||
 | 
			
		||||
    //This flag helps make the difference between an assistant or a Teacher (who owns the course)
 | 
			
		||||
    private boolean owned;
 | 
			
		||||
 | 
			
		||||
    public TeacherGivenCourse(User user, Course course, boolean owned){
 | 
			
		||||
    public TeacherCourse(User user, Course course){
 | 
			
		||||
        this.user = user;
 | 
			
		||||
        this.course = course;
 | 
			
		||||
        this.owned = owned;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public TeacherGivenCourse() {}
 | 
			
		||||
    public TeacherCourse() {}
 | 
			
		||||
 | 
			
		||||
    public int getId() {
 | 
			
		||||
        return id;
 | 
			
		||||
@ -48,11 +44,4 @@ public class TeacherGivenCourse {
 | 
			
		||||
        this.course = course;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isOwned() {
 | 
			
		||||
        return owned;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setOwned(boolean owned) {
 | 
			
		||||
        this.owned = owned;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -1,36 +1,10 @@
 | 
			
		||||
<script setup>
 | 
			
		||||
  import { toast } from 'vue3-toastify';
 | 
			
		||||
  import { ref, computed } from 'vue'
 | 
			
		||||
  import { ref } from 'vue'
 | 
			
		||||
  import i18n, { setLang } from './i18n.js'
 | 
			
		||||
  import { isLogged } from '@/rest/Users.js'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  // Liste des apps
 | 
			
		||||
  import LoginPage from './Apps/Login.vue'
 | 
			
		||||
  import Inscription from "./Apps/Inscription.vue"
 | 
			
		||||
  import Profil from "./Apps/Profil.vue"
 | 
			
		||||
  import Courses from "./Apps/ManageCourses.vue" 
 | 
			
		||||
  import Students from "./Apps/StudentsList.vue"
 | 
			
		||||
  import Users from "./Apps/UsersList.vue"
 | 
			
		||||
 | 
			
		||||
  const apps = {
 | 
			
		||||
 	'/login': LoginPage,
 | 
			
		||||
	'/inscription': Inscription,
 | 
			
		||||
  '/profil': Profil,
 | 
			
		||||
  '/manage-courses' : Courses,
 | 
			
		||||
  '/students' : Students,
 | 
			
		||||
  '/users' : Users,
 | 
			
		||||
  }
 | 
			
		||||
  const currentPath = ref(window.location.hash)
 | 
			
		||||
 | 
			
		||||
  window.addEventListener('hashchange', () => {
 | 
			
		||||
	Logged.value = isLogged();
 | 
			
		||||
    currentPath.value = window.location.hash
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  const currentView = computed(() => {
 | 
			
		||||
    return apps[currentPath.value.slice(1) || '/']
 | 
			
		||||
  })
 | 
			
		||||
  import { appList, currentView } from '@/rest/apps.js'
 | 
			
		||||
 | 
			
		||||
  const home=ref(i18n("app.home"))
 | 
			
		||||
  const notifications=ref(i18n("app.notifications"))
 | 
			
		||||
@ -40,6 +14,9 @@
 | 
			
		||||
 | 
			
		||||
  const Logged = ref(isLogged());
 | 
			
		||||
 | 
			
		||||
	const apps = ref([])
 | 
			
		||||
	appList().then(e => apps.value = e)
 | 
			
		||||
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<template>
 | 
			
		||||
@ -88,37 +65,12 @@
 | 
			
		||||
 | 
			
		||||
    <div class="leftBar">
 | 
			
		||||
    <ul class="vertical">
 | 
			
		||||
        <li style="margin-top: 25px;" >
 | 
			
		||||
          <a href="#Messages">
 | 
			
		||||
            <div class="fa-solid fa-comment" style="font-size: 40px;"></div>
 | 
			
		||||
            <div class="text">{{i18n("app.messages")}}</div>
 | 
			
		||||
          </a></li>
 | 
			
		||||
        <li >
 | 
			
		||||
          <a href="#Notifications">
 | 
			
		||||
            <div class="fa-solid fa-bell" style="font-size: 40px;" ></div>
 | 
			
		||||
            <div class="text">{{i18n("app.notifications")}}</div>
 | 
			
		||||
          </a></li>
 | 
			
		||||
        <li >
 | 
			
		||||
          <a href="#Schedule">
 | 
			
		||||
            <div class="fa-solid fa-calendar-days" style="font-size: 40px;"></div>
 | 
			
		||||
            <div class="text">{{i18n("app.schedules")}}</div>
 | 
			
		||||
          </a></li>
 | 
			
		||||
        <li ><a href="#Forum">
 | 
			
		||||
            <div class="fa-solid fa-envelope" style="font-size: 40px;" ></div>
 | 
			
		||||
            <div class="text">{{i18n("app.forum")}}</div></a></li>
 | 
			
		||||
        <li><a href="#/inscription">
 | 
			
		||||
            <div class="fa-solid fa-users" style="align-self:center;font-size: 40px;"></div>
 | 
			
		||||
            <div class="text" style="top:0;">{{i18n("app.inscription.requests")}}</div></a></li>
 | 
			
		||||
 | 
			
		||||
        <li><a href="#/manage-courses">
 | 
			
		||||
            <div class="fa-solid fa-book" style="align-self:center;font-size: 40px;overflow:none;"></div>
 | 
			
		||||
            <div class="text">{{i18n("app.manage.courses")}}</div></a></li>
 | 
			
		||||
        <li><a href="#/students">
 | 
			
		||||
            <div class="fa-solid fa-users-between-lines" style="font-size: 40px"></div>
 | 
			
		||||
            <div class="text">{{i18n("app.studentList")}}</div></a></li>
 | 
			
		||||
        <li><a href="#/users">
 | 
			
		||||
            <div class="fa-solid fa-users" style="font-size: 40px"></div>
 | 
			
		||||
            <div class="text">{{i18n("app.users")}}</div></a></li>
 | 
			
		||||
        <li v-for="app in apps">
 | 
			
		||||
						<a href="app.path">
 | 
			
		||||
            <div class="fa-solid" :class="app.icon" style="font-size: 40px;"></div>
 | 
			
		||||
            <div class="text">{{app.text}}</div>
 | 
			
		||||
						</a>
 | 
			
		||||
				</li>
 | 
			
		||||
    </ul>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="page">
 | 
			
		||||
@ -289,3 +241,5 @@
 | 
			
		||||
	  }
 | 
			
		||||
    
 | 
			
		||||
</style>
 | 
			
		||||
 | 
			
		||||
<!-- vim:set noet sts=0 sw=4 ts=2: --> 
 | 
			
		||||
 | 
			
		||||
@ -1,9 +1,60 @@
 | 
			
		||||
import { restGet } from './restConsumer.js' 
 | 
			
		||||
import { ref, computed } from 'vue'
 | 
			
		||||
import i18n from '@/i18n.js'
 | 
			
		||||
 | 
			
		||||
export async function appList(){
 | 
			
		||||
	return restGet("/apps")
 | 
			
		||||
// Liste des apps
 | 
			
		||||
import LoginPage from '@/Apps/Login.vue'
 | 
			
		||||
import Inscription from "@/Apps/Inscription.vue"
 | 
			
		||||
import Profil from "@/Apps/Profil.vue"
 | 
			
		||||
import Courses from "@/Apps/ManageCourses.vue" 
 | 
			
		||||
 | 
			
		||||
const apps = {
 | 
			
		||||
		'/login': LoginPage,
 | 
			
		||||
		'/inscription': Inscription,
 | 
			
		||||
		'/profil': Profil,
 | 
			
		||||
		'/manage-courses' : Courses,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const appsList = {
 | 
			
		||||
		'Msg': { path: '#/msg', icon: 'fa-comment', text: i18n("app.messages") },
 | 
			
		||||
		'Notification': { path: '#/notifs', icon: 'fa-bell', text: i18n("app.notifications") },
 | 
			
		||||
		'Forum': { path: '#/forum', icon: 'fa-envelope', text: i18n("app.forum") },
 | 
			
		||||
		'Schedule': { path: '#/schedule', icon: 'fa-calendar-days', text: i18n("app.schedules") },
 | 
			
		||||
		'Inscription': { path: '#/inscription', icon: 'fa-users', text: i18n("app.inscription.requests") },
 | 
			
		||||
		'ManageCourses': { path: '#/manage-courses', icon: 'fa-book', text: i18n("app.manage.courses") },
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const currentPath = ref(window.location.hash)
 | 
			
		||||
 | 
			
		||||
export const currentView = computed(() => {
 | 
			
		||||
		return apps[currentPath.value.slice(1) || '/']
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Return the list of app accesible by a logged (or not)
 | 
			
		||||
 * user.
 | 
			
		||||
 */
 | 
			
		||||
export async function appList(){
 | 
			
		||||
		let ret = [];
 | 
			
		||||
		let userAppList = await restGet("/apps");
 | 
			
		||||
		for (let userapp in userAppList) {
 | 
			
		||||
				if(appsList[userAppList[userapp]] != null){
 | 
			
		||||
						ret.push(appsList[userAppList[userapp]])
 | 
			
		||||
				}
 | 
			
		||||
		}
 | 
			
		||||
		return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Check if the specified page is authorized for the
 | 
			
		||||
 * user
 | 
			
		||||
 */
 | 
			
		||||
export async function checkPage(page){
 | 
			
		||||
		return restGet("/apps/" + page)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
window.addEventListener('hashchange', () => {
 | 
			
		||||
		currentPath.value = window.location.hash
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
// vim:set noet sts=0 sw=4 ts=2 tw=2:
 | 
			
		||||
 | 
			
		||||
@ -46,7 +46,6 @@ async function _rest(endPoint, config){
 | 
			
		||||
			pending: config['pending'] != null ? config['pending'] : 'pending',
 | 
			
		||||
			error: config['error'] != null ? config['error'] : 'Network Failure...',
 | 
			
		||||
			success: config['success'] != null ? config['success'] : {render(res){
 | 
			
		||||
				console.log(res);
 | 
			
		||||
				return res.data.ok ? "Success" : "error";
 | 
			
		||||
			}},
 | 
			
		||||
		})
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user