diff --git a/src/site/controllers/parts.json.php b/src/site/controllers/parts.json.php index 529b8a7..56307eb 100644 --- a/src/site/controllers/parts.json.php +++ b/src/site/controllers/parts.json.php @@ -12,28 +12,165 @@ class InvalidUserDataException extends UserException {} class ClubsHelperControllerUser { - + /** + * @param string $fcnName + * @param CommonClubsModelUser $user + * @param JInput $post + * @throws Exception + * @return string + */ public function parse($fcnName, $user, $post) { switch($fcnName) { case 'name': - return $this->editName($user, $post); + $this->editName($user, $post); + break; + case 'username': + $this->editUsername($user, $post); + break; + case 'address': + $this->editAddress($user, $post); + break; + case 'city': + $this->editCity($user, $post); + break; + case 'mail': + $this->editMail($user, $post); + break; + case 'phone': + $this->editPhone($user, $post); + break; + case 'mobile': + $this->editMobile($user, $post); + break; + + default: + throw new Exception(); + } + + return "index.php?option=com_clubs&view=part&type=user.$fcnName"; + } + + private function checkLen($value, $len, $msg) + { + if(strlen($value) < 5) + throw new InvalidUserDataException($msg); + } + + private function editName($user, $post) + { + $name = trim($post->getString('value')); + $this->checkLen($name, 5, "Der Name muss mindestens 5 Zeichen lang sein."); + + $user->setName($name); + $user->save(); + } + + private function editUsername($user, $post) + { + $username = $post->getString('value'); + $validator = new ClubsHelperValidator(); + $res = $validator->validateUsername($user, $username); + + switch($res) + { + case ClubsHelperValidator::USERNAME_VALID: + $user->setUsername($username); + $user->save(); + return; + + case ClubsHelperValidator::USERNAME_NOT_FREE: + throw new InvalidUserDataException('Der Benutzername ist bereits vergeben.'); + + case ClubsHelperValidator::USERNAME_NOT_OK: + throw new InvalidUserDataException('Der Benutzername ist nicht korrekt formaitert. Er muss mit einem Buchstaben beginnen.'); default: throw new Exception(); } } - public function editName($user, $post) + private function editAddress($user, $post) { - $name = $post->getString('name'); - if(strlen($name) < 5) - throw new InvalidUserDataException("Der Name muss mindestens 5 Zeichen lang sein."); + $address = trim($post->getString('value')); + $this->checkLen($address, 10, 'Die Adresse muss mindestens 10 Zeichen lang sein.'); - $user->setName($name); + $parts = array_filter(explode("\n", str_replace("\r", "\n", $address))); + if(count($parts) < 2) + throw new InvalidUserDataException('Die Adresse muss mindestens aus 2 Zeilen bestehen.'); + + $addr = join("\n", $parts); + $user->setAddress($addr); + $user->save(); + } + + private function editCity($user, $post) + { + $city = trim($post->getString('value')); + $this->checkLen($city, 4, 'Die Stadt muss aus mindestens 4 Zeichen bestehen.'); + + $user->setCity($city); + $user->save(); + } + + private function editMail($user, $post) + { + $mail = trim($post->getString('value')); + $this->checkLen($mail, 8, "Die Mail-Adresse muss aus mindestens 8 Zeichen bestehen."); + if(! preg_match('/..*@..*\...*/', $mail)) + throw new InvalidUserDataException('Die Mail-Adresse hat kein gültiges Format.'); + + $user->setMail($mail); + $user->save(); + } + + private function editPhone($user, $post) + { + $phone = trim($post->getString('value')); + + if(strlen($phone) == 0) + { + $user->setPhone(null); + $user->save(); + return; + } + + $validator = new ClubsHelperValidator(); + $phonePlain = ''; + $phoneDigits = ''; + $valid = $validator->validatePhoneNumber($phone, $phonePlain, $phoneDigits); + + $this->checkLen($phoneDigits, 6, 'Die Telefonnummer muss mindestens 6 Ziffern umfassen.'); + if(! $valid) + throw new InvalidUserDataException('Keine gültige Telefonnummer gegeben. Erlaubte Zeichen sind 0-9, -, + und Leerzeichen. Bitte Vorwahl mit angeben.'); + + $user->setPhone($phonePlain); + $user->save(); + } + + private function editMobile($user, $post) + { + $mobile = trim($post->getString('value')); + + if(strlen($mobile) == 0) + { + $user->setMobile(null); + $user->save(); + return; + } + + $validator = new ClubsHelperValidator(); + $mobilePlain = ''; + $mobileDigits = ''; + $valid = $validator->validatePhoneNumber($mobile, $mobilePlain, $mobileDigits); + + $this->checkLen($mobileDigits, 6, 'Die Handynummer muss mindestens 6 Ziffern umfassen.'); + if(! $valid) + throw new InvalidUserDataException('Keine gültige Handynummer gegeben. Erlaubte Zeichen sind 0-9, -, + und Leerzeichen. Bitte Vorwahl mit angeben.'); + + $user->setMobile($mobilePlain); $user->save(); - return 'index.php?option=com_clubs&view=mypage&layout=parts&type=name'; } } diff --git a/src/site/helpers/validator.php b/src/site/helpers/validator.php new file mode 100644 index 0000000..417e1ae --- /dev/null +++ b/src/site/helpers/validator.php @@ -0,0 +1,45 @@ +isUsernameFree($username)) + return self::USERNAME_NOT_FREE; + + return self::USERNAME_VALID; + } + +} \ No newline at end of file