0

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?

1

2 Answers 2

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

10
  • I'm trying this out right now hang tight I'll upvote and choose as answer if it works 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
    Nov 14, 2016 at 20:02
  • Use varchar for that
    – Rajan Soni
    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 form
    – Rajan Soni
    Nov 14, 2016 at 20:07
  • Let us continue this discussion in chat.
    – Rajan Soni
    Nov 14, 2016 at 20:09
1

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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.