diff --git a/.gitignore b/.gitignore index 485dee6..463794e 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ .idea +vendor +composer.lock +*.phar diff --git a/Documentation/data.puml b/Documentation/data.puml old mode 100644 new mode 100755 index d9cc283..90a7929 --- a/Documentation/data.puml +++ b/Documentation/data.puml @@ -3,12 +3,14 @@ class Account { - email: String - phoneNumber: String + - id: int + setMailAddress(String) + getMailAddress(): String + getPhoneNumber(): String + setPhoneNumber(String) + getUser(): AccountUser + + getId(): int } Account --> "- user" AccountUser @@ -16,13 +18,13 @@ Account --> "- teams *" Team interface User { + getName(): String - + getProfilePicture(): URI + + getProfilePicture(): Url + getAge(): int } class AccountUser { - name: String - - profilePicture: URI + - profilePicture: Url - age: int + setName(String) @@ -31,39 +33,39 @@ class AccountUser { } AccountUser ..|> User +class Member { + - userId: int -abstract class Member { - getUser(): User + + getUserId(): int + + getRole(): MemberRole } -Member --> "- user" User +Member --> "- role" MemberRole -class Coach { - 'todo +enum MemberRole { + PLAYER + COACH } -class Player { - 'todo -} - -Player --|> Member -Coach --|> Member - class Team { - name: String - - picture: URI - - mainColor: Color - - secondColor: Color + - picture: Url + - members: array + getName(): String - + getPicture(): URI + + getPicture(): Url + getMainColor(): Color + getSecondColor(): Color - + getCoachs(): array - + getPlayers(): array + + listMembers(): array } -Team --> "- players *" Player -Team --> "- coachs *" Coach +Team --> "- mainColor" Color +Team --> "- secondaryColor" Color + +class Color { + - value: int + + + getValue(): int +} @enduml diff --git a/README.md b/README.md index 50c3e73..d2edce6 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ # IQBall - Web Application This repository hosts the IQBall application for web + diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..d022007 --- /dev/null +++ b/composer.json @@ -0,0 +1,10 @@ +{ + "autoload": { + "psr-4": { + "App\\": "src/" + } + }, + "require": { + "altorouter/altorouter": "1.2.0" + } +} \ No newline at end of file diff --git a/index.php b/index.php index 228703a..0fbd9f7 100644 --- a/index.php +++ b/index.php @@ -1,16 +1,22 @@ - - - - - - - Document - - -

Hello world

hello world" -?> - - \ No newline at end of file + +global $router; +require "./vendor/autoload.php"; + +use App\Controller\HelloPageController; + +// routes initialization +$router = new AltoRouter(); +// hello page controllers +$helloController = new HelloPageController(); +$router->map("GET", "/", fn() => $helloController->display()); + +$match = $router->match(); + +if ($match == null) { + // TODO redirect to a 404 not found page instead (issue #1) + header('HTTP/1.1 404 Not Found'); + exit(1); +} + +call_user_func($match['target']); diff --git a/src/Controller/HelloPageController.php b/src/Controller/HelloPageController.php new file mode 100755 index 0000000..1498afe --- /dev/null +++ b/src/Controller/HelloPageController.php @@ -0,0 +1,10 @@ +email = $email; + $this->phoneNumber = $phoneNumber; + $this->user = $user; + $this->teams = $teams; + $this->id = $id; + } + + /** + * @return string + */ + public function getEmail(): string { + return $this->email; + } + + /** + * @param string $email + */ + public function setEmail(string $email): void { + if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { + throw new InvalidArgumentException("Invalid mail address"); + } + $this->email = $email; + } + + /** + * @return string + */ + public function getPhoneNumber(): string { + return $this->phoneNumber; + } + + /** + * @param string $phoneNumber + */ + public function setPhoneNumber(string $phoneNumber): void { + if (!filter_var($phoneNumber, FILTER_VALIDATE_REGEXP, PHONE_NUMBER_REGEXP)) { + throw new InvalidArgumentException("Invalid phone number"); + } + $this->phoneNumber = $phoneNumber; + } + + public function getId(): int { + return $this->id; + } + + public function getTeams(): array { + return $this->teams; + } + + public function getUser(): AccountUser { + return $this->user; + } +} \ No newline at end of file diff --git a/src/Data/AccountUser.php b/src/Data/AccountUser.php new file mode 100755 index 0000000..7808062 --- /dev/null +++ b/src/Data/AccountUser.php @@ -0,0 +1,52 @@ +name = $name; + $this->profilePicture = $profilePicture; + $this->age = $age; + } + + + public function getName(): string { + return $this->name; + } + + public function getProfilePicture(): Url { + return $this->profilePicture; + } + + public function getAge(): int { + return $this->age; + } + + public function setName(string $name) { + $this->name = $name; + } + + public function setProfilePicture(Url $profilePicture) { + $this->profilePicture = $profilePicture; + } + + public function setAge(int $age) { + $this->age = $age; + } + + +} \ No newline at end of file diff --git a/src/Data/Color.php b/src/Data/Color.php new file mode 100755 index 0000000..f841731 --- /dev/null +++ b/src/Data/Color.php @@ -0,0 +1,30 @@ + 0xFFFFFF) { + throw new InvalidArgumentException("int color value is invalid, must be positive and lower than 0xFFFFFF"); + } + $this->value = $value; + } + + /** + * @return int + */ + public function getValue(): int { + return $this->value; + } +} \ No newline at end of file diff --git a/src/Data/Member.php b/src/Data/Member.php new file mode 100755 index 0000000..91b09c4 --- /dev/null +++ b/src/Data/Member.php @@ -0,0 +1,42 @@ +userId = $userId; + $this->role = $role; + } + + /** + * @return int + */ + public function getUserId(): int { + return $this->userId; + } + + /** + * @return MemberRole + */ + public function getRole(): MemberRole { + return $this->role; + } + +} \ No newline at end of file diff --git a/src/Data/MemberRole.php b/src/Data/MemberRole.php new file mode 100755 index 0000000..05d746d --- /dev/null +++ b/src/Data/MemberRole.php @@ -0,0 +1,40 @@ +isValid($val)) { + throw new InvalidArgumentException("Valeur du rĂ´le invalide"); + } + $this->value = $val; + } + + private function isValid(int $val): bool { + return ($val <= self::MAX and $val >= self::MIN); + } + + public function isPlayer(): bool { + return ($this->value == self::ROLE_PLAYER); + } + + public function isCoach(): bool { + return ($this->value == self::ROLE_COACH); + } + +} \ No newline at end of file diff --git a/src/Data/Team.php b/src/Data/Team.php new file mode 100755 index 0000000..48643d9 --- /dev/null +++ b/src/Data/Team.php @@ -0,0 +1,65 @@ +name = $name; + $this->picture = $picture; + $this->mainColor = $mainColor; + $this->secondColor = $secondColor; + $this->members = $members; + } + + /** + * @return string + */ + public function getName(): string { + return $this->name; + } + + /** + * @return Url + */ + public function getPicture(): Url { + return $this->picture; + } + + /** + * @return Color + */ + public function getMainColor(): Color { + return $this->mainColor; + } + + /** + * @return Color + */ + public function getSecondColor(): Color { + return $this->secondColor; + } + + public function listMembers(): array { + return array_map(fn ($id, $role) => new Member($id, $role), $this->members); + } + +} \ No newline at end of file diff --git a/src/Data/User.php b/src/Data/User.php new file mode 100755 index 0000000..15c9995 --- /dev/null +++ b/src/Data/User.php @@ -0,0 +1,27 @@ + + + + + + + Document + + + +

Hello

+

World

+ + + \ No newline at end of file