Made user controller working mostly. Not everything is tested but seems good

This commit is contained in:
2019-06-05 16:02:36 +02:00
parent 16e7ed0bc0
commit fc85e6b322
8 changed files with 170 additions and 51 deletions

View File

@@ -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();

View File

@@ -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];
}

View File

@@ -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))
);
}

View File

@@ -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;
}
}