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
|
try
|
||||||
{
|
{
|
||||||
// Fetch the posted data
|
// Fetch the posted data
|
||||||
$values = $this->loadData();
|
$values = $this->loadData($this->additionalData());
|
||||||
|
|
||||||
$this->filterRawCheck($values);
|
$this->filterRaw($values);
|
||||||
|
|
||||||
// Check the input data
|
// Check the input data
|
||||||
if( ! $this->requiredDataIsAvailable($values) )
|
if( ! $this->requiredDataIsAvailable($values) )
|
||||||
@ -70,7 +70,9 @@ abstract class AbstractClubsController extends BaseController
|
|||||||
if( ! $this->rawDataIsValid($values) )
|
if( ! $this->rawDataIsValid($values) )
|
||||||
throw new DataParsingException();
|
throw new DataParsingException();
|
||||||
|
|
||||||
$obj->setValues($values, true);
|
$obj->applyAndMergeValues($values, true);
|
||||||
|
|
||||||
|
$this->filterObject($obj, $values);
|
||||||
|
|
||||||
// Do some additional tests by the controller
|
// Do some additional tests by the controller
|
||||||
if( ! $this->objectValid($obj) )
|
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();
|
$values = array();
|
||||||
$factory = $this->getFactory();
|
$factory = $this->getFactory();
|
||||||
@ -114,10 +121,17 @@ abstract class AbstractClubsController extends BaseController
|
|||||||
$values[$column->getAlias()] = $column->getFilter()->getFilteredValue($input, $column->getAlias());
|
$values[$column->getAlias()] = $column->getFilter()->getFilteredValue($input, $column->getAlias());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach($additionalData as $k => $v)
|
||||||
|
{
|
||||||
|
$values[$k] = $v->getFilteredValue($input, $k);
|
||||||
|
}
|
||||||
|
|
||||||
return $values;
|
return $values;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function filterRawCheck(&$values){}
|
protected function filterRaw(&$values){}
|
||||||
|
|
||||||
|
protected function filterObject($obj){}
|
||||||
|
|
||||||
protected function objectValid($obj)
|
protected function objectValid($obj)
|
||||||
{
|
{
|
||||||
|
@ -48,6 +48,27 @@ abstract class AbstractCommonClubsModel
|
|||||||
$this->values = $values;
|
$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)
|
protected function setValue($key, $value)
|
||||||
{
|
{
|
||||||
if(is_null($this->values))
|
if(is_null($this->values))
|
||||||
@ -134,6 +155,7 @@ abstract class AbstractCommonClubsModel
|
|||||||
$vals[$alias] = $a->packValue($vals[$alias]);
|
$vals[$alias] = $a->packValue($vals[$alias]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// XXX Joins
|
||||||
return $vals;
|
return $vals;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,7 +166,8 @@ abstract class AbstractCommonClubsModel
|
|||||||
foreach($factory->getAttributes() as $a)
|
foreach($factory->getAttributes() as $a)
|
||||||
{
|
{
|
||||||
$alias = $a->getAlias();
|
$alias = $a->getAlias();
|
||||||
$vals[$alias] = $a->unpackValue($vals[$alias]);
|
if(isset($vals[$alias]))
|
||||||
|
$vals[$alias] = $a->unpackValue($vals[$alias]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$joins = $factory->getJoins();
|
$joins = $factory->getJoins();
|
||||||
|
@ -141,10 +141,16 @@ abstract class AbstractCommonClubsModelFactory
|
|||||||
* @param int $id
|
* @param int $id
|
||||||
* @return AbstractCommonClubsModel
|
* @return AbstractCommonClubsModel
|
||||||
*/
|
*/
|
||||||
public function loadById($id) {
|
public function loadById($id, $throwErr = true)
|
||||||
|
{
|
||||||
$arr = $this->loadElements("main.id = " . ((int)$id) );
|
$arr = $this->loadElements("main.id = " . ((int)$id) );
|
||||||
if(sizeof($arr) == 0)
|
if(sizeof($arr) == 0)
|
||||||
throw new ElementNotFoundException();
|
{
|
||||||
|
if($throwErr)
|
||||||
|
throw new ElementNotFoundException();
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
return $arr[0];
|
return $arr[0];
|
||||||
}
|
}
|
||||||
|
@ -8,14 +8,14 @@ class CommonClubsModelFactoryUser extends AbstractCommonClubsModelFactory
|
|||||||
public function fetchAttributes()
|
public function fetchAttributes()
|
||||||
{
|
{
|
||||||
return array(
|
return array(
|
||||||
new CommonClubsModelColumnString('user'),
|
new CommonClubsModelColumnString('user', new CommonClubsControllerMappingCmd('Benutzername')),
|
||||||
new CommonClubsModelColumnString('name'),
|
new CommonClubsModelColumnString('name', new CommonClubsControllerMappingString('Bürgerlicher Name')),
|
||||||
new CommonClubsModelColumnString('password'),
|
new CommonClubsModelColumnString('password', new CommonClubsControllerMappingString('Passwort', false)),
|
||||||
new CommonClubsModelColumnString('address'),
|
new CommonClubsModelColumnString('address', new CommonClubsControllerMappingString('Adresse')),
|
||||||
new CommonClubsModelColumnString('city'),
|
new CommonClubsModelColumnString('city', new CommonClubsControllerMappingString('Stadt')),
|
||||||
new CommonClubsModelColumnString('mail'),
|
new CommonClubsModelColumnString('mail', new CommonClubsControllerMappingString('E-Mail')),
|
||||||
new CommonClubsModelColumnString('phone'),
|
new CommonClubsModelColumnString('phone', new CommonClubsControllerMappingString('Telefonnummer', false)),
|
||||||
new CommonClubsModelColumnString('mobile')
|
new CommonClubsModelColumnString('mobile', new CommonClubsControllerMappingString('Handynummer', false))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,6 +114,12 @@ class CommonClubsModelUser extends AbstractCommonClubsModel
|
|||||||
$this->setValue('password', $hash);
|
$this->setValue('password', $hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function isPasswordSet()
|
||||||
|
{
|
||||||
|
$password = $this->getValues()['password'];
|
||||||
|
return isset($password) && strlen($password) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
public function getPositions()
|
public function getPositions()
|
||||||
{
|
{
|
||||||
return $this->fetchAssociatedElements(new CommonClubsModelFactoryUserassoc(), 'userid');
|
return $this->fetchAssociatedElements(new CommonClubsModelFactoryUserassoc(), 'userid');
|
||||||
@ -139,7 +145,7 @@ class CommonClubsModelUser extends AbstractCommonClubsModel
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isUsernameSuitable($user)
|
public function isUsernameFree($user)
|
||||||
{
|
{
|
||||||
$factory = new CommonClubsModelFactoryUser();
|
$factory = new CommonClubsModelFactoryUser();
|
||||||
$users = $factory->loadElements(null, null, function($q) use ($user){
|
$users = $factory->loadElements(null, null, function($q) use ($user){
|
||||||
@ -167,5 +173,33 @@ class CommonClubsModelUser extends AbstractCommonClubsModel
|
|||||||
$db->execute();
|
$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']))
|
if(is_null($values['charitable']))
|
||||||
$values['charitable'] = false;
|
$values['charitable'] = false;
|
||||||
|
@ -18,7 +18,7 @@ class ClubsControllerUser extends AbstractClubsController
|
|||||||
return ClubsUser::isUserNameFree($username, $id);
|
return ClubsUser::isUserNameFree($username, $id);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getNameOfElement()
|
protected function getSingleBaseName()
|
||||||
{
|
{
|
||||||
return 'user';
|
return 'user';
|
||||||
}
|
}
|
||||||
@ -38,49 +38,44 @@ class ClubsControllerUser extends AbstractClubsController
|
|||||||
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
protected function rawDataIsValid($values)
|
||||||
* @see AbstractClubsController::checkData()
|
|
||||||
*/
|
|
||||||
protected function rawDataIsValid($values, $isNew, $obj)
|
|
||||||
{
|
{
|
||||||
if(! parent::rawDataIsValid($values, $isNew, $obj))
|
if(! parent::rawDataIsValid($values))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// TODO Auto-generated method stub
|
if($this->passwordIsSet($values))
|
||||||
if(isset($values['pwd']) && strlen($values['pwd']) > 0)
|
|
||||||
{
|
{
|
||||||
$pwd = $values['pwd'];
|
if( ! $this->passwordIsValid($values))
|
||||||
$pwdConfirm = $values['pwdConfirm'];
|
|
||||||
|
|
||||||
if(trim($pwd) != trim($pwdConfirm))
|
|
||||||
{
|
|
||||||
Factory::getApplication()->enqueueMessage('Die Passwörter stimmen nicht überein.', 'error');
|
|
||||||
return false;
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FIXME Check password strength
|
||||||
|
// if(! ClubsUser::checkPasswordStrength(trim($pwd)))
|
||||||
|
// {
|
||||||
|
// Factory::getApplication()->enqueueMessage('Das Passwort ist zu schwach.', 'error');
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,8 +107,55 @@ class ClubsControllerUser extends AbstractClubsController
|
|||||||
|
|
||||||
$this->applyDataToObject($obj, $values, $mapping);
|
$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