```plantuml

@startuml

left to right direction

skinparam usecase {
BackgroundColor lightGreen
BorderColor DarkSlateGray

ArrowColor darkgreen
}

actor User as User
actor Admin as Admin
actor Teacher as Teacher
actor Student as Student
actor Visitor as Visitor

User <|--- Admin
User <|---- Teacher
User <|-- Student
Visitor <|- User

note left of (User)
  The user must
  be connected
end note


package App {
 
  usecase "Add a group" as ES1.1
  usecase "Delete a group" as ES1.2
  usecase "Import students automatically \n from an Excel doc" as ES1.3
  usecase "Show the groups" as ES1.4
  usecase "Delete a user" as ES1.5
  usecase "Show the users list" as ES1.6
  usecase "Give a role" as ES1.7
  usecase "Add a student in a group" as ES1.9
  usecase "Delete a student in a group" as ES1.10
  usecase "Ban a user" as ES1.11
  usecase "Choose if a quiz is \n accessible only to a particular group \n or open to all, to each group" as ES1.13
  usecase "Share my quiz with other teachers" as ES1.14
  usecase "Listen to the words to also \n work my listening comprehension" as ES1.15



  usecase "Create an interactive quiz during a course" as ES2.1
  usecase "Know my overall progress since I installed the app" as ES2.4
  usecase "Consult the translation and the meaning \n of certain words in an online dictionary" as ES2.5
  usecase "Create my own flash card to train myself" as ES2.7
  usecase "Know my progress on a quiz" as ES2.8
  usecase "View student results who \n participate in my quizzes at all moment" as ES2.9

  usecase "Create a quiz for students training" as ES3.1
  usecase "Download quizzes to do them \n later without an internet connection" as ES3.3
  usecase "Join a quizz with a code" as ES3.4
  usecase "Have access to the vocabulary \n list with a link" as ES3.6
  
  usecase "Evaluate students from anywhere" as ES4.1
  usecase "Receive an email to notify \n me when I’m about to have an exam " as ES4.2
  usecase "Change the level of my \n trainings games/quizzes" as ES4.3
  usecase "Choose if I want to work \n from English to French or vice \nversa in the tests" as ES4.4
  usecase "Choose a strict difficulty mode (0 error) \n or tolerant (1 or 2 errors) for my exams" as ES4.5

  usecase "Easily switch from dark \n theme to theme clear and vice versa \n when I’m on the application (web or mobile)" as ES5.1
  usecase "Change the speed of scrolling \n flashcard when I use scroll mode automatic" as ES5.3
  usecase "Change my password" as ES5.6
  usecase "Receive a message encouraging the end \n of my test to motivate me to continue" as ES5.8
  usecase "Show my rank on quizzes" as ES5.10


  usecase "Play a game in a demo to test the app" as ES6.1
  usecase "Play a game" as ES6.2
  usecase "Choose a game" as ES6.3
  usecase "Choose the vocabulary list" as ES6.4  
  usecase "Give feedback after a quiz" as ES6.5
  usecase "Sign in" as ES6.6
  usecase "List quizzes/Vocabulary" as ES6.7
  usecase "Delete a quiz" as ES6.8
  usecase "Change nickname" as ES6.9
}

Admin --> ES1.1

Admin --> ES1.3
Admin --> ES1.4
Admin ----> ES1.6
Student --> ES1.15

Teacher -> ES2.1
Student --> ES2.4
Student --> ES2.5
Student --> ES2.7

ES6.2 <.. ES2.8 : include


Student --> ES3.3
Student --> ES3.4

ES3.1 ..> ES3.6 : extends
ES2.1 ..> ES3.6 : extends

Teacher ---> ES4.1
Student --> ES4.2

ES4.1 ..> ES4.5 : include
ES3.1 ..> ES1.13 : include

ES3.1 ..> ES1.14 : extends

Teacher --> ES3.1

ES6.3 ..> ES4.3 : extends
ES6.3 ..> ES4.4 : include
ES4.1 ..> ES2.9 : extends

Visitor --> ES5.1
User --> ES5.3
User --> ES5.6

ES3.4 <.. ES5.10 : include
ES6.2 <.. ES5.8 : include

Visitor --> ES6.1
Student --> ES6.2
Visitor --> ES6.6
Teacher --> ES6.7
User --> ES6.9

ES6.2 ..> ES6.3 : include
ES6.3 ..> ES6.4 : include

ES6.2 <.. ES6.5 : include

ES6.7 ..> ES6.8 : extends

ES1.6 ..> ES1.7 : extends
ES1.6 ..> ES1.5 : extends
ES1.6 ..> ES1.11 : extends

ES1.4 ..> ES1.2 : extends
ES1.4 ..> ES1.9 : extends
ES1.4 ..> ES1.10 : extends

ES1.6 ..> ES1.9 : extends



@enduml