Repository URL to install this package:
|
Version:
1.0.21 ▾
|
<?php
namespace ZfcUserAdmin\Form;
use ZfcUser\Entity\UserInterface;
use ZfcUser\Form\Register;
use ZfcUser\Options\RegistrationOptionsInterface;
use ZfcUserAdmin\Options\UserEditOptionsInterface;
use Zend\Form\Form;
use Zend\Form\Element;
class EditUser extends Register
{
/**
* @var \ZfcUserAdmin\Options\UserEditOptionsInterface
*/
protected $userEditOptions;
protected $userEntity;
protected $serviceManager;
public function __construct($name = null, UserEditOptionsInterface $options, RegistrationOptionsInterface $registerOptions, $serviceManager)
{
$this->setUserEditOptions($options);
$this->setServiceManager($serviceManager);
parent::__construct($name, $registerOptions);
$this->remove('captcha');
if ($this->userEditOptions->getAllowPasswordChange()) {
$this->add(array(
'name' => 'reset_password',
'type' => 'Zend\Form\Element\Checkbox',
'options' => array(
'label' => 'Reset password to random',
),
));
$password = $this->get('password');
$password->setAttribute('required', false);
$password->setOptions(array('label' => 'Password (only if want to change)'));
$this->remove('passwordVerify');
} else {
$this->remove('password')->remove('passwordVerify');
}
foreach ($this->getUserEditOptions()->getEditFormElements() as $name => $element) {
// avoid adding fields twice (e.g. email)
// if ($this->get($element)) continue;
$this->add(array(
'name' => $element,
'options' => array(
'label' => $name,
),
'attributes' => array(
'type' => 'text'
),
));
}
$this->get('submit')->setLabel('Save')->setValue('Save');
$this->add(array(
'name' => 'userId',
'attributes' => array(
'type' => 'hidden'
),
));
}
public function setUser($userEntity)
{
$this->userEntity = $userEntity;
$this->getEventManager()->trigger('userSet', $this, array('user' => $userEntity));
}
public function getUser()
{
return $this->userEntity;
}
public function populateFromUser(UserInterface $user)
{
foreach ($this->getElements() as $element) {
/** @var $element \Zend\Form\Element */
$elementName = $element->getName();
if (strpos($elementName, 'password') === 0) continue;
$getter = $this->getAccessorName($elementName, false);
if (method_exists($user, $getter)) $element->setValue(call_user_func(array($user, $getter)));
}
foreach ($this->getUserEditOptions()->getEditFormElements() as $element) {
$getter = $this->getAccessorName($element, false);
$this->get($element)->setValue(call_user_func(array($user, $getter)));
}
$this->get('userId')->setValue($user->getId());
}
protected function getAccessorName($property, $set = true)
{
$parts = explode('_', $property);
array_walk($parts, function (&$val) {
$val = ucfirst($val);
});
return (($set ? 'set' : 'get') . implode('', $parts));
}
public function setUserEditOptions(UserEditOptionsInterface $userEditOptions)
{
$this->userEditOptions = $userEditOptions;
return $this;
}
public function getUserEditOptions()
{
return $this->userEditOptions;
}
public function setServiceManager($serviceManager)
{
$this->serviceManager = $serviceManager;
}
public function getServiceManager()
{
return $this->serviceManager;
}
}