Created basic class to handle Ajax changes to the user
This commit is contained in:
parent
e89aac01a3
commit
55b44d9b6f
@ -12,28 +12,165 @@ class InvalidUserDataException extends UserException {}
|
|||||||
|
|
||||||
class ClubsHelperControllerUser
|
class ClubsHelperControllerUser
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @param string $fcnName
|
||||||
|
* @param CommonClubsModelUser $user
|
||||||
|
* @param JInput $post
|
||||||
|
* @throws Exception
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
public function parse($fcnName, $user, $post)
|
public function parse($fcnName, $user, $post)
|
||||||
{
|
{
|
||||||
switch($fcnName)
|
switch($fcnName)
|
||||||
{
|
{
|
||||||
case 'name':
|
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:
|
default:
|
||||||
throw new Exception();
|
throw new Exception();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function editName($user, $post)
|
private function editAddress($user, $post)
|
||||||
{
|
{
|
||||||
$name = $post->getString('name');
|
$address = trim($post->getString('value'));
|
||||||
if(strlen($name) < 5)
|
$this->checkLen($address, 10, 'Die Adresse muss mindestens 10 Zeichen lang sein.');
|
||||||
throw new InvalidUserDataException("Der Name muss mindestens 5 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();
|
$user->save();
|
||||||
return 'index.php?option=com_clubs&view=mypage&layout=parts&type=name';
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
45
src/site/helpers/validator.php
Normal file
45
src/site/helpers/validator.php
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
// No direct access.
|
||||||
|
defined('_JEXEC') or die;
|
||||||
|
|
||||||
|
class ClubsHelperValidator
|
||||||
|
{
|
||||||
|
|
||||||
|
public function validatePhoneNumber($number, &$cleanedNumber, &$plainDigits = null)
|
||||||
|
{
|
||||||
|
if($plainDigits !== null)
|
||||||
|
$plainDigits = preg_replace('/[^+0-9]/', '', $number);
|
||||||
|
|
||||||
|
$cleanedNumber = preg_replace('/[^-+ 0-9]/', '', $number);
|
||||||
|
|
||||||
|
$validNational = preg_match('/^0[0-9 -]+$/', $cleanedNumber);
|
||||||
|
$validInternational = preg_match('/^\+[0-9 -]+$/', $cleanedNumber);
|
||||||
|
|
||||||
|
return ($validNational || $validInternational);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const USERNAME_VALID = 0;
|
||||||
|
const USERNAME_NOT_FREE = 1;
|
||||||
|
const USERNAME_NOT_OK = 2;
|
||||||
|
/**
|
||||||
|
* @param CommonClubsModelUser $user
|
||||||
|
* @param string $username
|
||||||
|
*/
|
||||||
|
public function validateUsername($user, &$username)
|
||||||
|
{
|
||||||
|
// Remove false chars
|
||||||
|
$username = preg_replace('/[^a-zA-Z0-9!@#$%^&*()[]{}_+=\/\\?-]/', '', $username);
|
||||||
|
|
||||||
|
// Ensure start with an alphabetic char
|
||||||
|
if(! preg_match('/^[a-zA-Z]/', $username))
|
||||||
|
return self::USERNAME_NOT_OK;
|
||||||
|
|
||||||
|
if(! $user->isUsernameFree($username))
|
||||||
|
return self::USERNAME_NOT_FREE;
|
||||||
|
|
||||||
|
return self::USERNAME_VALID;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user