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?