In my Magento Admin Panel
System> Permissions> Users> choose any Users> User Info
I want to add an attribute that's a number called Calc_Code. That the admin user can change in the backend.
Is it possible to add a custom attribute to an Admin user that they can change in the backend?
-
I believe this may have been answered previously here: magento.stackexchange.com/questions/25354/…Douglas Radburn– Douglas Radburn2016年11月14日 19:36:11 +00:00Commented Nov 14, 2016 at 19:36
2 Answers 2
Quick solution
Only for your store open your database find the table admin_user click on it, after opening that table click on structure on top, on bottom click on Go button that add new column for your table. add the name Calc_Code and type varchar than save it.
Then create this file: app/code/local/Mage/Adminhtml/Block/Permissions/User/Edit/Tab/Main.php
and add this code:
<?php class Mage_Adminhtml_Block_Permissions_User_Edit_Tab_Main extends Mage_Adminhtml_Block_Widget_Form
{
protected function _prepareForm()
{
$model = Mage::registry('permissions_user');
$form = new Varien_Data_Form();
$form->setHtmlIdPrefix('user_');
$fieldset = $form->addFieldset('base_fieldset', array('legend'=>Mage::helper('adminhtml')->__('Account Information')));
if ($model->getUserId()) {
$fieldset->addField('user_id', 'hidden', array(
'name' => 'user_id',
));
} else {
if (! $model->hasData('is_active')) {
$model->setIsActive(1);
}
}
$fieldset->addField('username', 'text', array(
'name' => 'username',
'label' => Mage::helper('adminhtml')->__('User Name'),
'id' => 'username',
'title' => Mage::helper('adminhtml')->__('User Name'),
'required' => true,
));
$fieldset->addField('firstname', 'text', array(
'name' => 'firstname',
'label' => Mage::helper('adminhtml')->__('First Name'),
'id' => 'firstname',
'title' => Mage::helper('adminhtml')->__('First Name'),
'required' => true,
));
$fieldset->addField('lastname', 'text', array(
'name' => 'lastname',
'label' => Mage::helper('adminhtml')->__('Last Name'),
'id' => 'lastname',
'title' => Mage::helper('adminhtml')->__('Last Name'),
'required' => true,
));
$fieldset->addField('email', 'text', array(
'name' => 'email',
'label' => Mage::helper('adminhtml')->__('Email'),
'id' => 'customer_email',
'title' => Mage::helper('adminhtml')->__('User Email'),
'class' => 'required-entry validate-email',
'required' => true,
));
// custom field
$fieldset->addField('calc_code', 'text', array(
'name' => 'calc_code',
'label' => Mage::helper('adminhtml')->__('calc_code'),
'id' => 'calc_code',
'title' => Mage::helper('adminhtml')->__('calc_code'),
'class' => 'required-entry',
));
$fieldset->addField('current_password', 'obscure', array(
'name' => 'current_password',
'label' => Mage::helper('adminhtml')->__('Current Admin Password'),
'id' => 'current_password',
'title' => Mage::helper('adminhtml')->__('Current Admin Password'),
'class' => 'input-text',
'required' => true,
));
if ($model->getUserId()) {
$fieldset->addField('password', 'password', array(
'name' => 'new_password',
'label' => Mage::helper('adminhtml')->__('New Password'),
'id' => 'new_pass',
'title' => Mage::helper('adminhtml')->__('New Password'),
'class' => 'input-text validate-admin-password',
));
$fieldset->addField('confirmation', 'password', array(
'name' => 'password_confirmation',
'label' => Mage::helper('adminhtml')->__('Password Confirmation'),
'id' => 'confirmation',
'class' => 'input-text validate-cpassword',
));
}
else {
$fieldset->addField('password', 'password', array(
'name' => 'password',
'label' => Mage::helper('adminhtml')->__('Password'),
'id' => 'customer_pass',
'title' => Mage::helper('adminhtml')->__('Password'),
'class' => 'input-text required-entry validate-admin-password',
'required' => true,
));
$fieldset->addField('confirmation', 'password', array(
'name' => 'password_confirmation',
'label' => Mage::helper('adminhtml')->__('Password Confirmation'),
'id' => 'confirmation',
'title' => Mage::helper('adminhtml')->__('Password Confirmation'),
'class' => 'input-text required-entry validate-cpassword',
'required' => true,
));
}
if (Mage::getSingleton('admin/session')->getUser()->getId() != $model->getUserId()) {
$fieldset->addField('is_active', 'select', array(
'name' => 'is_active',
'label' => Mage::helper('adminhtml')->__('This account is'),
'id' => 'is_active',
'title' => Mage::helper('adminhtml')->__('Account Status'),
'class' => 'input-select',
'style' => 'width: 80px',
'options' => array('1' => Mage::helper('adminhtml')->__('Active'), '0' => Mage::helper('adminhtml')->__('Inactive')),
));
}
$fieldset->addField('user_roles', 'hidden', array(
'name' => 'user_roles',
'id' => '_user_roles',
));
$data = $model->getData();
unset($data['password']);
$form->setValues($data);
$this->setForm($form);
return parent::_prepareForm();
}
}
?>
after clean the cache then check
-
I'm trying this out right now hang tight I'll upvote and choose as answer if it worksCodingMageSheen– CodingMageSheen2016年11月14日 19:57:00 +00:00Commented Nov 14, 2016 at 19:57
-
ya sure, and after creating Main.php add your field in between where you want to show like above example.Rajan Soni– Rajan Soni2016年11月14日 20:02:08 +00:00Commented Nov 14, 2016 at 20:02
-
Use varchar for thatRajan Soni– Rajan Soni2016年11月14日 20:03:01 +00:00Commented Nov 14, 2016 at 20:03
-
you are working on database you just have to go in admin_user table and just click on Go button and fill the formRajan Soni– Rajan Soni2016年11月14日 20:07:12 +00:00Commented Nov 14, 2016 at 20:07
-
Let us continue this discussion in chat.Rajan Soni– Rajan Soni2016年11月14日 20:09:13 +00:00Commented Nov 14, 2016 at 20:09
Thank You to @Rajan for helping me with: I want to add an attribute that's a number called Calc_Code. By directly adding it to the database Admin User's gained that attribute.
However I had to do some work to get the attribute saving in the backend, thus i'm posting my answer here for anyone that needs to do something similar.
I had to create a custom controller:
app/code/local/Sean/CustomCalcCode/controllers/Adminhtml/System/AccountController.php
public function saveAction()
{
$userId = Mage::getSingleton('admin/session')->getUser()->getId();
$pwd = null;
$user = Mage::getModel("admin/user")->load($userId);
$user->setId($userId)
->setUsername($this->getRequest()->getParam('username', false))
->setFirstname($this->getRequest()->getParam('firstname', false))
->setLastname($this->getRequest()->getParam('lastname', false))
->setEmail(strtolower($this->getRequest()->getParam('email', false)));
//IMPORTANT PART HERE
$post = $this->getRequest()->getParams();
$user->setData('calc_code', $post['Calc_Code']);
//IMPORTANT PART HERE
if ( $this->getRequest()->getParam('new_password', false) ) {
$user->setNewPassword($this->getRequest()->getParam('new_password', false));
}
if ($this->getRequest()->getParam('password_confirmation', false)) {
$user->setPasswordConfirmation($this->getRequest()->getParam('password_confirmation', false));
}
$result = $user->validate();
if (is_array($result)) {
foreach($result as $error) {
Mage::getSingleton('adminhtml/session')->addError($error);
}
$this->getResponse()->setRedirect($this->getUrl("*/*/"));
return;
}
Also under: app/code/local/Sean/CustomCalcCode/etc/config.xml
<?xml version="1.0"?>
<config>
<modules>
<Sean_CustomCalcCode>
<version>0.0.1</version>
</Sean_CustomCalcCode>
</modules>
<admin>
<routers>
<adminhtml>
<args>
<modules>
<sean_customcalccode before="Mage_Adminhtml">Sean_CustomCalcCode_Adminhtml</sean_customcalccode>
</modules>
</args>
</adminhtml>
</routers>
</admin>
</config>
I learned from this experience you can't just add controllers through local file to replace mage core files. You need to create the config.xml and manually save it like I did in my custom controller.
If any of you have any questions feel free to comment here or leave a question and PM me! I'll do my best to help you out.