Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 6 additions & 86 deletions config/services.config.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,96 +4,16 @@
* Date: 3/18/13
* Time: 6:39 PM
*/
use Zend\ServiceManager\ServiceLocatorInterface;
use ZfcUser\Form\RegisterFilter;
use ZfcUser\Mapper\UserHydrator;
use ZfcUser\Validator\NoRecordExists;
use ZfcUserAdmin\Form;
use ZfcUserAdmin\Options;
use ZfcUserAdmin\Validator\NoRecordExistsEdit;

return array(
'invokables' => array(
'ZfcUserAdmin\Form\EditUser' => 'ZfcUserAdmin\Form\EditUser',
'zfcuseradmin_user_service' => 'ZfcUserAdmin\Service\User',
'ZfcUserAdmin\Form\EditUser' => 'ZfcUserAdmin\Form\EditUser',
'zfcuseradmin_user_service' => 'ZfcUserAdmin\Service\User',
),
'factories' => array(
'zfcuseradmin_module_options' => function (ServiceLocatorInterface $sm) {
$config = $sm->get('Config');
return new Options\ModuleOptions(isset($config['zfcuseradmin']) ? $config['zfcuseradmin'] : array());
},
'zfcuseradmin_edituser_form' => function (ServiceLocatorInterface $sm) {
/** @var $zfcUserOptions \ZfcUser\Options\UserServiceOptionsInterface */
$zfcUserOptions = $sm->get('zfcuser_module_options');
/** @var $zfcUserAdminOptions \ZfcUserAdmin\Options\ModuleOptions */
$zfcUserAdminOptions = $sm->get('zfcuseradmin_module_options');
$form = new Form\EditUser(null, $zfcUserAdminOptions, $zfcUserOptions, $sm);
$filter = new RegisterFilter(
new NoRecordExistsEdit(array(
'mapper' => $sm->get('zfcuser_user_mapper'),
'key' => 'email'
)),
new NoRecordExistsEdit(array(
'mapper' => $sm->get('zfcuser_user_mapper'),
'key' => 'username'
)),
$zfcUserOptions
);
if (!$zfcUserAdminOptions->getAllowPasswordChange()) {
$filter->remove('password')->remove('passwordVerify');
} else {
$filter->get('password')->setRequired(false);
$filter->remove('passwordVerify');
}
$form->setInputFilter($filter);
return $form;
},
'zfcuseradmin_createuser_form' => function (ServiceLocatorInterface $sm) {
/** @var $zfcUserOptions \ZfcUser\Options\UserServiceOptionsInterface */
$zfcUserOptions = $sm->get('zfcuser_module_options');
/** @var $zfcUserAdminOptions \ZfcUserAdmin\Options\ModuleOptions */
$zfcUserAdminOptions = $sm->get('zfcuseradmin_module_options');
$form = new Form\CreateUser(null, $zfcUserAdminOptions, $zfcUserOptions, $sm);
$filter = new RegisterFilter(
new NoRecordExists(array(
'mapper' => $sm->get('zfcuser_user_mapper'),
'key' => 'email'
)),
new NoRecordExists(array(
'mapper' => $sm->get('zfcuser_user_mapper'),
'key' => 'username'
)),
$zfcUserOptions
);
if ($zfcUserAdminOptions->getCreateUserAutoPassword()) {
$filter->remove('password')->remove('passwordVerify');
}
$form->setInputFilter($filter);
return $form;
},
'zfcuser_user_mapper' => function (ServiceLocatorInterface $sm) {
/** @var $config \ZfcUserAdmin\Options\ModuleOptions */
$config = $sm->get('zfcuseradmin_module_options');
$mapperClass = $config->getUserMapper();
if (stripos($mapperClass, 'doctrine') !== false) {
$mapper = new $mapperClass(
$sm->get('zfcuser_doctrine_em'),
$sm->get('zfcuser_module_options')
);
} else {
/** @var $zfcUserOptions \ZfcUser\Options\UserServiceOptionsInterface */
$zfcUserOptions = $sm->get('zfcuser_module_options');

/** @var $mapper \ZfcUserAdmin\Mapper\UserZendDb */
$mapper = new $mapperClass();
$mapper->setDbAdapter($sm->get('zfcuser_zend_db_adapter'));
$entityClass = $zfcUserOptions->getUserEntityClass();
$mapper->setEntityPrototype(new $entityClass);
$mapper->setHydrator($sm->get('zfcuser_user_hydrator'));
$mapper->setTableName($zfcUserOptions->getTableName());
}

return $mapper;
},
'zfcuseradmin_module_options' => 'ZfcUserAdmin\Factory\Options\ModuleOptionsFactory',
'zfcuser_user_mapper' => 'ZfcUserAdmin\Factory\Mapper\UserZendDbFactory',
'zfcuseradmin_createuser_form' => 'ZfcUserAdmin\Factory\Form\CreateUserFactory',
'zfcuseradmin_edituser_form' => 'ZfcUserAdmin\Factory\Form\EditUserFactory',
),
);
23 changes: 13 additions & 10 deletions src/ZfcUserAdmin/Controller/UserAdminController.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,19 +40,19 @@ public function createAction()
{
/** @var $form \ZfcUserAdmin\Form\CreateUser */
$form = $this->getServiceLocator()->get('zfcuseradmin_createuser_form');
/** @var $request \Zend\Http\Request */
$request = $this->getRequest();

/** @var $request \Zend\Http\Request */
if ($request->isPost()) {
$zfcUserOptions = $this->getZfcUserOptions();
$class = $zfcUserOptions->getUserEntityClass();
$user = new $class();
$form->setHydrator(new ClassMethods());
$form->bind($user);

$form->setData($request->getPost());

if ($form->isValid()) {
$user = $this->getAdminUserService()->create($form, (array)$request->getPost());
$user = $this->getAdminUserService()->create($form, (array)$request->getPost(), $user);
if ($user) {
$this->flashMessenger()->addSuccessMessage('The user was created');
return $this->redirect()->toRoute('zfcadmin/zfcuseradmin/list');
Expand All @@ -67,15 +67,17 @@ public function createAction()

public function editAction()
{
$userId = $this->getEvent()->getRouteMatch()->getParam('userId');
$user = $this->getUserMapper()->findById($userId);

/** @var $form \ZfcUserAdmin\Form\EditUser */
$form = $this->getServiceLocator()->get('zfcuseradmin_edituser_form');
$form->setUser($user);

/** @var $request \Zend\Http\Request */
$request = $this->getRequest();

$userId = $this->getEvent()->getRouteMatch()->getParam('userId');
$user = $this->getUserMapper()->findById($userId);
$form->bind($user);

// don't automatically overwrite password since input permit blank
$form->getInputFilter()->remove('password');
if ($request->isPost()) {
$form->setData($request->getPost());
if ($form->isValid()) {
Expand All @@ -85,9 +87,10 @@ public function editAction()
return $this->redirect()->toRoute('zfcadmin/zfcuseradmin/list');
}
}
} else {
$form->populateFromUser($user);
}
// Necessary so validators know whether a username and email have changed since they may be a "duplicate" of
// their own database record, but not of other users.
$form->get('userId')->setValue($user->getId());

return array(
'editUserForm' => $form,
Expand Down
42 changes: 42 additions & 0 deletions src/ZfcUserAdmin/Factory/Form/CreateUserFactory.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?php
/**
* Created by PhpStorm.
* User: Clayton Daley
* Date: 1/31/2015
* Time: 1:06 PM
*/

namespace ZfcUserAdmin\Factory\Form;

use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use ZfcUser\Form\RegisterFilter;
use ZfcUser\Validator\NoRecordExists;
use ZfcUserAdmin\Form\CreateUser;

class CreateUserFactory implements FactoryInterface {

function createService(ServiceLocatorInterface $serviceLocator) {
/** @var $zfcUserOptions \ZfcUser\Options\UserServiceOptionsInterface */
$zfcUserOptions = $serviceLocator->get('zfcuser_module_options');
/** @var $zfcUserAdminOptions \ZfcUserAdmin\Options\ModuleOptions */
$zfcUserAdminOptions = $serviceLocator->get('zfcuseradmin_module_options');
$form = new CreateUser(null, $zfcUserAdminOptions, $zfcUserOptions, $serviceLocator);
$filter = new RegisterFilter(
new NoRecordExists(array(
'mapper' => $serviceLocator->get('zfcuser_user_mapper'),
'key' => 'email'
)),
new NoRecordExists(array(
'mapper' => $serviceLocator->get('zfcuser_user_mapper'),
'key' => 'username'
)),
$zfcUserOptions
);
if ($zfcUserAdminOptions->getCreateUserAutoPassword()) {
$filter->remove('password')->remove('passwordVerify');
}
$form->setInputFilter($filter);
return $form;
}
}
45 changes: 45 additions & 0 deletions src/ZfcUserAdmin/Factory/Form/EditUserFactory.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?php
/**
* Created by PhpStorm.
* User: Clayton Daley
* Date: 1/31/2015
* Time: 1:03 PM
*/

namespace ZfcUserAdmin\Factory\Form;

use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use ZfcUser\Form\RegisterFilter;
use ZfcUserAdmin\Form\EditUser;
use ZfcUserAdmin\Validator\NoRecordExistsEdit;

class EditUserFactory implements FactoryInterface {

public function createService(ServiceLocatorInterface $serviceLocator) {
/** @var $zfcUserOptions \ZfcUser\Options\UserServiceOptionsInterface */
$zfcUserOptions = $serviceLocator->get('zfcuser_module_options');
/** @var $zfcUserAdminOptions \ZfcUserAdmin\Options\ModuleOptions */
$zfcUserAdminOptions = $serviceLocator->get('zfcuseradmin_module_options');
$form = new EditUser(null, $zfcUserAdminOptions, $zfcUserOptions, $serviceLocator);
$filter = new RegisterFilter(
new NoRecordExistsEdit(array(
'mapper' => $serviceLocator->get('zfcuser_user_mapper'),
'key' => 'email'
)),
new NoRecordExistsEdit(array(
'mapper' => $serviceLocator->get('zfcuser_user_mapper'),
'key' => 'username'
)),
$zfcUserOptions
);
if (!$zfcUserAdminOptions->getAllowPasswordChange()) {
$filter->remove('password')->remove('passwordVerify');
} else {
$filter->get('password')->setRequired(false);
$filter->remove('passwordVerify');
}
$form->setInputFilter($filter);
return $form;
}
}
40 changes: 40 additions & 0 deletions src/ZfcUserAdmin/Factory/Mapper/UserZendDbFactory.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php
/**
* Created by PhpStorm.
* User: Clayton Daley
* Date: 1/31/2015
* Time: 1:09 PM
*/

namespace ZfcUserAdmin\Factory\Mapper;

use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;

class UserZendDbFactory implements FactoryInterface {

public function createService(ServiceLocatorInterface $serviceLocator) {
/** @var $config \ZfcUserAdmin\Options\ModuleOptions */
$config = $serviceLocator->get('zfcuseradmin_module_options');
$mapperClass = $config->getUserMapper();
if (stripos($mapperClass, 'doctrine') !== false) {
$mapper = new $mapperClass(
$serviceLocator->get('zfcuser_doctrine_em'),
$serviceLocator->get('zfcuser_module_options')
);
} else {
/** @var $zfcUserOptions \ZfcUser\Options\UserServiceOptionsInterface */
$zfcUserOptions = $serviceLocator->get('zfcuser_module_options');

/** @var $mapper \ZfcUserAdmin\Mapper\UserZendDb */
$mapper = new $mapperClass();
$mapper->setDbAdapter($serviceLocator->get('zfcuser_zend_db_adapter'));
$entityClass = $zfcUserOptions->getUserEntityClass();
$mapper->setEntityPrototype(new $entityClass);
$mapper->setHydrator($serviceLocator->get('zfcuser_user_hydrator'));
$mapper->setTableName($zfcUserOptions->getTableName());
}

return $mapper;
}
}
21 changes: 21 additions & 0 deletions src/ZfcUserAdmin/Factory/Options/ModuleOptionsFactory.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php
/**
* Created by PhpStorm.
* User: Clayton Daley
* Date: 1/31/2015
* Time: 1:13 PM
*/

namespace ZfcUserAdmin\Factory\Options;

use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use ZfcUserAdmin\Options\ModuleOptions;

class ModuleOptionsFactory implements FactoryInterface {

public function createService(ServiceLocatorInterface $serviceLocator) {
$config = $serviceLocator->get('Config');
return new ModuleOptions(isset($config['zfcuseradmin']) ? $config['zfcuseradmin'] : array());
}
}
35 changes: 34 additions & 1 deletion src/ZfcUserAdmin/Form/CreateUser.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@

namespace ZfcUserAdmin\Form;

use ZfcUserAdmin\Options\UserCreateOptionsInterface;
use Zend\Stdlib\Hydrator\ClassMethods;
use ZfcUser\Options\RegistrationOptionsInterface;
use ZfcUser\Form\Register as Register;
use ZfcUserAdmin\Options\UserCreateOptionsInterface;

class CreateUser extends Register
{
Expand All @@ -24,6 +25,8 @@ public function __construct($name = null, UserCreateOptionsInterface $createOpti
$this->setCreateOptions($createOptions);
$this->setServiceManager($serviceManager);
parent::__construct($name, $registerOptions);
// ZfcUser should have setHydrator() which we replace or extend
$this->setHydrator($serviceManager->get('zfcuser_user_hydrator'));

if ($createOptions->getCreateUserAutoPassword()) {
$this->remove('password');
Expand Down Expand Up @@ -68,4 +71,34 @@ public function getServiceManager()
{
return $this->serviceManager;
}

/**
* Override isValid() to set an validation group of all elements that do not
* have an 'exclude' option, if at least one element has this option set.
*
* @return boolean
*/
public function isValid()
{
if ($this->hasValidated) {
return $this->isValid;
}

if ($this->getValidationGroup() === null) {
// Add all non-excluded elements to the validation group
$validationGroup = null;
foreach ($this->getElements() as $element) {
if ($element->getOption('exclude') === false or
($element->getAttribute('readonly') !== true && $element->getOption('exclude') !== true))
{
$validationGroup[] = $element->getName();
}
}
if ($validationGroup) {
$this->setValidationGroup($validationGroup);
}
}

return parent::isValid();
}
}
Loading