Made user controller working mostly. Not everything is tested but seems good
This commit is contained in:
parent
16e7ed0bc0
commit
fc85e6b322
@ -59,9 +59,9 @@ abstract class AbstractClubsController extends BaseController
|
||||
try
|
||||
{
|
||||
// Fetch the posted data
|
||||
$values = $this->loadData();
|
||||
$values = $this->loadData($this->additionalData());
|
||||
|
||||
$this->filterRawCheck($values);
|
||||
$this->filterRaw($values);
|
||||
|
||||
// Check the input data
|
||||
if( ! $this->requiredDataIsAvailable($values) )
|
||||
@ -70,7 +70,9 @@ abstract class AbstractClubsController extends BaseController
|
||||
if( ! $this->rawDataIsValid($values) )
|
||||
throw new DataParsingException();
|
||||
|
||||
$obj->setValues($values, true);
|
||||
$obj->applyAndMergeValues($values, true);
|
||||
|
||||
$this->filterObject($obj, $values);
|
||||
|
||||
// Do some additional tests by the controller
|
||||
if( ! $this->objectValid($obj) )
|
||||
@ -103,7 +105,12 @@ abstract class AbstractClubsController extends BaseController
|
||||
}
|
||||
}
|
||||
|
||||
protected function loadData()
|
||||
protected function additionalData()
|
||||
{
|
||||
return array();
|
||||
}
|
||||
|
||||
protected function loadData($additionalData)
|
||||
{
|
||||
$values = array();
|
||||
$factory = $this->getFactory();
|
||||
@ -114,10 +121,17 @@ abstract class AbstractClubsController extends BaseController
|
||||
$values[$column->getAlias()] = $column->getFilter()->getFilteredValue($input, $column->getAlias());
|
||||
}
|
||||
|
||||
foreach($additionalData as $k => $v)
|
||||
{
|
||||
$values[$k] = $v->getFilteredValue($input, $k);
|
||||
}
|
||||
|
||||
return $values;
|
||||
}
|
||||
|
||||
protected function filterRawCheck(&$values){}
|
||||
protected function filterRaw(&$values){}
|
||||
|
||||
protected function filterObject($obj){}
|
||||
|
||||
protected function objectValid($obj)
|
||||
{
|
||||
|
@ -48,6 +48,27 @@ abstract class AbstractCommonClubsModel
|
||||
$this->values = $values;
|
||||
}
|
||||
|
||||
public function applyAndMergeValues($values, $unpack = true)
|
||||
{
|
||||
$vals = $this->getValues();
|
||||
|
||||
if($unpack)
|
||||
$vals = $this->packExternalReferencesAsKeys($vals);
|
||||
|
||||
foreach($this->getFactory()->getAttributes() as $column)
|
||||
{
|
||||
if(array_key_exists($column->getAlias(), $values))
|
||||
{
|
||||
$vals[$column->getAlias()] = $values[$column->getAlias()];
|
||||
}
|
||||
}
|
||||
|
||||
if($unpack)
|
||||
$vals = $this->unpackExternalReferencesFromKeys($vals);
|
||||
|
||||
$this->setValues($vals, false);
|
||||
}
|
||||
|
||||
protected function setValue($key, $value)
|
||||
{
|
||||
if(is_null($this->values))
|
||||
@ -134,6 +155,7 @@ abstract class AbstractCommonClubsModel
|
||||
$vals[$alias] = $a->packValue($vals[$alias]);
|
||||
}
|
||||
|
||||
// XXX Joins
|
||||
return $vals;
|
||||
}
|
||||
|
||||
@ -144,7 +166,8 @@ abstract class AbstractCommonClubsModel
|
||||
foreach($factory->getAttributes() as $a)
|
||||
{
|
||||
$alias = $a->getAlias();
|
||||
$vals[$alias] = $a->unpackValue($vals[$alias]);
|
||||
if(isset($vals[$alias]))
|
||||
$vals[$alias] = $a->unpackValue($vals[$alias]);
|
||||
}
|
||||
|
||||
$joins = $factory->getJoins();
|
||||
|
@ -141,10 +141,16 @@ abstract class AbstractCommonClubsModelFactory
|
||||
* @param int $id
|
||||
* @return AbstractCommonClubsModel
|
||||
*/
|
||||
public function loadById($id) {
|
||||
public function loadById($id, $throwErr = true)
|
||||
{
|
||||
$arr = $this->loadElements("main.id = " . ((int)$id) );
|
||||
if(sizeof($arr) == 0)
|
||||
throw new ElementNotFoundException();
|
||||
{
|
||||
if($throwErr)
|
||||
throw new ElementNotFoundException();
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
return $arr[0];
|
||||
}
|
||||
|
@ -8,14 +8,14 @@ class CommonClubsModelFactoryUser extends AbstractCommonClubsModelFactory
|
||||
public function fetchAttributes()
|
||||
{
|
||||
return array(
|
||||
new CommonClubsModelColumnString('user'),
|
||||
new CommonClubsModelColumnString('name'),
|
||||
new CommonClubsModelColumnString('password'),
|
||||
new CommonClubsModelColumnString('address'),
|
||||
new CommonClubsModelColumnString('city'),
|
||||
new CommonClubsModelColumnString('mail'),
|
||||
new CommonClubsModelColumnString('phone'),
|
||||
new CommonClubsModelColumnString('mobile')
|
||||
new CommonClubsModelColumnString('user', new CommonClubsControllerMappingCmd('Benutzername')),
|
||||
new CommonClubsModelColumnString('name', new CommonClubsControllerMappingString('Bürgerlicher Name')),
|
||||
new CommonClubsModelColumnString('password', new CommonClubsControllerMappingString('Passwort', false)),
|
||||
new CommonClubsModelColumnString('address', new CommonClubsControllerMappingString('Adresse')),
|
||||
new CommonClubsModelColumnString('city', new CommonClubsControllerMappingString('Stadt')),
|
||||
new CommonClubsModelColumnString('mail', new CommonClubsControllerMappingString('E-Mail')),
|
||||
new CommonClubsModelColumnString('phone', new CommonClubsControllerMappingString('Telefonnummer', false)),
|
||||
new CommonClubsModelColumnString('mobile', new CommonClubsControllerMappingString('Handynummer', false))
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -114,6 +114,12 @@ class CommonClubsModelUser extends AbstractCommonClubsModel
|
||||
$this->setValue('password', $hash);
|
||||
}
|
||||
|
||||
public function isPasswordSet()
|
||||
{
|
||||
$password = $this->getValues()['password'];
|
||||
return isset($password) && strlen($password) > 0;
|
||||
}
|
||||
|
||||
public function getPositions()
|
||||
{
|
||||
return $this->fetchAssociatedElements(new CommonClubsModelFactoryUserassoc(), 'userid');
|
||||
@ -139,7 +145,7 @@ class CommonClubsModelUser extends AbstractCommonClubsModel
|
||||
return true;
|
||||
}
|
||||
|
||||
public function isUsernameSuitable($user)
|
||||
public function isUsernameFree($user)
|
||||
{
|
||||
$factory = new CommonClubsModelFactoryUser();
|
||||
$users = $factory->loadElements(null, null, function($q) use ($user){
|
||||
@ -167,5 +173,33 @@ class CommonClubsModelUser extends AbstractCommonClubsModel
|
||||
$db->execute();
|
||||
}
|
||||
|
||||
public function dataIsValid()
|
||||
{
|
||||
if(! parent::dataIsValid())
|
||||
return false;
|
||||
|
||||
if(! $this->usernameIsValid())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private function usernameIsValid()
|
||||
{
|
||||
$factory = $this->getFactory();
|
||||
$medb = $factory->loadById($this->getId(), false);
|
||||
|
||||
if($medb !== null && $medb->getUserName() === $this->getUsername())
|
||||
// No change was made
|
||||
return true;
|
||||
|
||||
if(! $this->isUsernameFree($this->getUsername()) )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -28,7 +28,7 @@ class ClubsControllerClub extends AbstractClubsController
|
||||
);
|
||||
}
|
||||
|
||||
protected function filterRawCheck(&$values)
|
||||
protected function filterRaw(&$values)
|
||||
{
|
||||
if(is_null($values['charitable']))
|
||||
$values['charitable'] = false;
|
||||
|
@ -18,7 +18,7 @@ class ClubsControllerUser extends AbstractClubsController
|
||||
return ClubsUser::isUserNameFree($username, $id);
|
||||
}
|
||||
|
||||
protected function getNameOfElement()
|
||||
protected function getSingleBaseName()
|
||||
{
|
||||
return 'user';
|
||||
}
|
||||
@ -38,49 +38,44 @@ class ClubsControllerUser extends AbstractClubsController
|
||||
|
||||
);
|
||||
}
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* @see AbstractClubsController::checkData()
|
||||
*/
|
||||
protected function rawDataIsValid($values, $isNew, $obj)
|
||||
|
||||
protected function rawDataIsValid($values)
|
||||
{
|
||||
if(! parent::rawDataIsValid($values, $isNew, $obj))
|
||||
if(! parent::rawDataIsValid($values))
|
||||
return false;
|
||||
|
||||
// TODO Auto-generated method stub
|
||||
if(isset($values['pwd']) && strlen($values['pwd']) > 0)
|
||||
if($this->passwordIsSet($values))
|
||||
{
|
||||
$pwd = $values['pwd'];
|
||||
$pwdConfirm = $values['pwdConfirm'];
|
||||
|
||||
if(trim($pwd) != trim($pwdConfirm))
|
||||
{
|
||||
Factory::getApplication()->enqueueMessage('Die Passwörter stimmen nicht überein.', 'error');
|
||||
if( ! $this->passwordIsValid($values))
|
||||
return false;
|
||||
}
|
||||
|
||||
if(! ClubsUser::checkPasswordStrength(trim($pwd)))
|
||||
{
|
||||
Factory::getApplication()->enqueueMessage('Das Passwort ist zu schwach.', 'error');
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if($isNew)
|
||||
{
|
||||
Factory::getApplication()->enqueueMessage('Für einen neuen Benutzer muss ein Passwort vergeben werden.', 'error');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if(! $this->checkUserName(trim($values['user']), $obj))
|
||||
return true;
|
||||
}
|
||||
|
||||
private function passwordIsSet($values)
|
||||
{
|
||||
return isset($values['pwd']) && strlen($values['pwd']) > 0;
|
||||
}
|
||||
|
||||
private function passwordIsValid($values)
|
||||
{
|
||||
$pwd = $values['pwd'];
|
||||
$pwdConfirm = $values['pwdConfirm'];
|
||||
|
||||
if(trim($pwd) != trim($pwdConfirm))
|
||||
{
|
||||
Factory::getApplication()->enqueueMessage('Username ' . $$values['user'] . ' ist nicht gültig.', 'error');
|
||||
Factory::getApplication()->enqueueMessage('Die Passwörter stimmen nicht überein.', 'error');
|
||||
return false;
|
||||
}
|
||||
|
||||
// FIXME Check password strength
|
||||
// if(! ClubsUser::checkPasswordStrength(trim($pwd)))
|
||||
// {
|
||||
// Factory::getApplication()->enqueueMessage('Das Passwort ist zu schwach.', 'error');
|
||||
// return false;
|
||||
// }
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -112,8 +107,55 @@ class ClubsControllerUser extends AbstractClubsController
|
||||
|
||||
$this->applyDataToObject($obj, $values, $mapping);
|
||||
}
|
||||
|
||||
protected function getFactory()
|
||||
{
|
||||
return new CommonClubsModelFactoryUser();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* {@inheritDoc}
|
||||
* @see AbstractClubsController::filterObject()
|
||||
* @param CommonClubsModelUser $obj
|
||||
*/
|
||||
protected function filterObject($obj, $values)
|
||||
{
|
||||
// if($obj->isNew() && (empty($values['pwd']) || strlen($values['pwd']) == 0) )
|
||||
|
||||
if(isset($values['pwd']) && strlen($values['pwd']) > 0)
|
||||
{
|
||||
$obj->setPassword($values['pwd']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
* @see AbstractClubsController::objectValid()
|
||||
* @param CommonClubsModelUser $obj
|
||||
*/
|
||||
protected function objectValid($obj)
|
||||
{
|
||||
if(! $obj->isPasswordSet())
|
||||
{
|
||||
Factory::getApplication()->enqueueMessage('Kein Passwort wurde vergeben.', 'error');
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
protected function filterRaw(&$values)
|
||||
{
|
||||
unset($values['password']);
|
||||
}
|
||||
|
||||
protected function additionalData()
|
||||
{
|
||||
return array(
|
||||
'pwd' => new CommonClubsControllerMappingString('Passwort'),
|
||||
'pwdConfirm' => new CommonClubsControllerMappingString('Passwortwiederholung')
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user