I am looking for a good approach with add/update already prepared (by default) Magento User's (module-user) form. The form can be reached in admin panel by this path:
System > All users > [chosen_user] > User's main edit tab (Account Information)
Now I'm trying with using di.xml in my custom module where I specify dependencies: `
<preference for="Magento\User\Block\User\Edit\Tab\Main" type="Vendor_Name\Module_Name\Block\User\Edit\Tab\Main" />
<preference for="Magento\User\Block\Role\Grid\User" type="Vendor_Name\Module_Name\Block\Role\Grid\User" />
`
This is content that I've already made for a Main.php class
// @codingStandardsIgnoreFile
namespace Vendor_Name\Module_Name\Block\User\Edit\Tab;
use \Magento\User\Block\User\Edit\Tab\Main as UserEditMainTab;
use \Magento\Backend\Block\Template\Context;
use \Magento\Framework\Registry;
use \Magento\Framework\Data\FormFactory;
use \Magento\Backend\Model\Auth\Session;
use \Magento\Framework\Locale\ListsInterface;
class Main extends UserEditMainTab
{
public function __construct(
Context $context,
Registry $registry,
FormFactory $formFactory,
Session $authSession,
ListsInterface $localeLists,
array $data = []
) {
parent::__construct($context, $registry, $formFactory, $authSession, $localeLists, $data);
}
protected function _prepareForm()
{
/** @var $model \Magento\User\Model\User */
$model = $this->_coreRegistry->registry('permissions_user');
/** @var \Magento\Framework\Data\Form $form */
$form = $this->_formFactory->create();
$form->setHtmlIdPrefix('user_');
$baseFieldset = $form->addFieldset('base_fieldset', ['legend' => __('Account Information __ TEST')]);
if ($model->getUserId()) {
$baseFieldset->addField('user_id', 'hidden', ['name' => 'user_id']);
} else {
if (!$model->hasData('is_active')) {
$model->setIsActive(1);
}
}
$baseFieldset->addField(
'user_image',
'image',
[
'name' => 'user_image',
'label' => __('User Image'),
'id' => 'user_image',
'title' => __('User Image'),
'required' => false,
'note' => 'Allow image type: jpg, jpeg, png'
]
);
$baseFieldset->addField(
'username',
'text',
[
'name' => 'username',
'label' => __('User Name'),
'id' => 'username',
'title' => __('User Name'),
'required' => true
]
);
$baseFieldset->addField(
'firstname',
'text',
[
'name' => 'firstname',
'label' => __('First Name'),
'id' => 'firstname',
'title' => __('First Name'),
'required' => true
]
);
$baseFieldset->addField(
'lastname',
'text',
[
'name' => 'lastname',
'label' => __('Last Name'),
'id' => 'lastname',
'title' => __('Last Name'),
'required' => true
]
);
$baseFieldset->addField(
'email',
'text',
[
'name' => 'email',
'label' => __('Email'),
'id' => 'customer_email',
'title' => __('User Email'),
'class' => 'required-entry validate-email',
'required' => true
]
);
$isNewObject = $model->isObjectNew();
if ($isNewObject) {
$passwordLabel = __('Password');
} else {
$passwordLabel = __('New Password');
}
$confirmationLabel = __('Password Confirmation');
$this->_addPasswordFields($baseFieldset, $passwordLabel, $confirmationLabel, $isNewObject);
$baseFieldset->addField(
'interface_locale',
'select',
[
'name' => 'interface_locale',
'label' => __('Interface Locale'),
'title' => __('Interface Locale'),
'values' => $this->_LocaleLists->getTranslatedOptionLocales(),
'class' => 'select'
]
);
if ($this->_authSession->getUser()->getId() != $model->getUserId()) {
$baseFieldset->addField(
'is_active',
'select',
[
'name' => 'is_active',
'label' => __('This account is'),
'id' => 'is_active',
'title' => __('Account Status'),
'class' => 'input-select',
'options' => ['1' => __('Active'), '0' => __('Inactive')]
]
);
}
$baseFieldset->addField('user_roles', 'hidden', ['name' => 'user_roles', 'id' => '_user_roles']);
$currentUserVerificationFieldset = $form->addFieldset(
'current_user_verification_fieldset',
['legend' => __('Current User Identity Verification')]
);
$currentUserVerificationFieldset->addField(
self::CURRENT_USER_PASSWORD_FIELD,
'password',
[
'name' => self::CURRENT_USER_PASSWORD_FIELD,
'label' => __('Your Password'),
'id' => self::CURRENT_USER_PASSWORD_FIELD,
'title' => __('Your Password'),
'class' => 'input-text validate-current-password required-entry',
'required' => true
]
);
$data = $model->getData();
unset($data['password']);
unset($data[self::CURRENT_USER_PASSWORD_FIELD]);
$form->setValues($data);
$this->setForm($form);
return parent::_prepareForm();
}
}
and some code for User.php
namespace Vendor_Name\Module_Name\Block\Role\Grid;
use \Magento\User\Block\Role\Grid\User as RoleGridUser;
use \Magento\Backend\Block\Widget\Grid\Extended as ExtendedGrid;
class User extends RoleGridUser
{
protected function _prepareColumns()
{
parent::_prepareCollection();
$this->addColumn(
'user_image',
[
'header' => __('User Image'),
'width' => 5,
'align' => 'left',
'sortable' => true,
'index' => 'user_image'
]
);
return ExtendedGrid::_prepareCollection();
}
}
If you take a look closer you already now that I'm trying to add a field with user's image.
Unfortunately, I don't see any changes in admin front. Of course, the needed column was added by InstallSchema script earlier to 'admin_user' table.
Contents of directories in a tree-like format:
Module_Name ├── Block │ ├── Catalog │ │ └── Product │ │ └── RelatedPosts.php │ ├── Role │ │ └── Grid │ │ └── User.php │ └── User │ └── Edit │ └── Tab │ └── Main.php ├── composer.json ├── etc │ ├── di.xml │ └── module.xml ├── Setup └── InstallSchema.php
What Did I do Wrong?