0

I have created admin grid and associated form. In that, If I add a new item the time and date is automatically saved. But the name of who is added the item and who is edited the item is also need to be save in DB.How to retrieve these things and dispaly it in Backend ? Please suggest me a solution ... Thanks in advance.

I have created below files to display it

xxx\HomeSlider\Block\Adminhtml\Edit\Tab\View\AdditionalInfo.php

<?php

namespace xxx\HomeSlider\Block\Adminhtml\Edit\Tab\View;

use Magento\Framework\Exception\NoSuchEntityException;
use xxx\HomeSlider\Model\Post;

class AdditionalInfo extends \Magento\Backend\Block\Template
{

    /**
     * Interval in minutes that shows how long customer will be marked 'Online'
     * since his last activity. Used only if it's impossible to get such setting
     * from configuration.
     */
    const DEFAULT_ONLINE_MINUTES_INTERVAL = 15;

    protected $dateTime;


    protected $coreRegistry;
    protected $authSession;

    public function __construct(
    \Magento\Backend\Block\Template\Context $context, \Magento\Framework\Stdlib\DateTime $dateTime, \Magento\Backend\Model\Auth\Session $authSession, array $data = []
    )
    {

        $this->authSession = $authSession;

        parent::__construct($context, $data);
    }

    public function getCurrentUser()
    {
        return $this->authSession->getUser();
    }

}

Additionalinfo.phtml

 <?php
    $adminName = $block->getCurrentUser();

    ?>
    <div class="fieldset-wrapper customer-information">
        <div class="fieldset-wrapper-title">
            <span class="title"><?= $block->escapeHtml(__('Additional Information')) ?></span>
        </div>
        <table class="admin__table-secondary">
            <tbody>
                <?= $block->getChildHtml() ?>
                <tr>
                    <th><?= $block->escapeHtml(__('Created At:')) ?></th>
                    <td><?= $block->escapeHtml($adminName) ?></td>
                </tr>

            </tbody>
        </table>


    </div>
    <?php

Controller file save.php

<?php

namespace OX\HomeSlider\Controller\Adminhtml\Post;

class Save extends \Magento\Backend\App\Action
{

    public function __construct(
    \Magento\Backend\App\Action\Context $context, \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory
    )
    {
        $this->resultRedirectFactory = $resultRedirectFactory;
        parent::__construct($context);
    }

    public function execute()
    {
        $id = $this->getRequest()->getParam('id');
        $postModel = $this->_objectManager->create('OX\HomeSlider\Model\Post');

        if ($id) {
            $postModel = $postModel->load($id);
        }
        $post = $this->getRequest()->getParam('general');
        if (empty($post['id'])) {
            $post['id'] = null;
        }

        if (isset($post['image'])) {
            $post['image'] = $post['image'][0]['name'];
        } else {
            $post['image'] = null;
        }


        $postModel->setData($post);
        $postModel->save();
        return $this->resultRedirectFactory->create()->setPath('homeslider/post/index');
    }

}

Controller for edit.php

<?php
namespace OX\HomeSlider\Controller\Adminhtml\Post;
class Edit extends \Magento\Backend\App\Action
{
    protected $_resultPage;
    protected $_resultPageFactory = false;
    protected $_coreRegistry;
    public function __construct(
    \Magento\Backend\App\Action\Context $context, \Magento\Framework\View\Result\PageFactory $resultPageFactory, \Magento\Framework\Registry $coreRegistry
    )
    {
        parent::__construct($context);
        $this->_resultPageFactory = $resultPageFactory;
        $this->_coreRegistry = $coreRegistry;
    }
    public function execute()
    {
        $id = $this->getRequest()->getParam('id');
        $post = $this->_objectManager->create('OX\HomeSlider\Model\Post');
        if ($id) {
            $post = $post->load($id);
            if ($post->getId()) {
                $this->_coreRegistry->register('homepageslider_post', $post);
            }
        }

        $resultPage = $this->getResultPage();
        $resultPage->getConfig()->getTitle()->prepend(__('Image Information'));
        return $resultPage;
    }
    public function getResultPage()
    {
        if (is_null($this->_resultPage)) {
            $this->_resultPage = $this->_resultPageFactory->create();
        }
        return $this->_resultPage;
    }
}
1

you can use this to get current admin details :-

$this->authSession->getUser()->getUsername();//get admin username
$this->authSession->getUser()->getEmail();//get admin email

To save admin username in database change controller file of save action to below

<?php

namespace OX\HomeSlider\Controller\Adminhtml\Post;

class Save extends \Magento\Backend\App\Action
{

    public function __construct(
    \Magento\Backend\App\Action\Context $context, 
    \Magento\Backend\Model\View\Result\RedirectFactory $resultRedirectFactory,
    \Magento\Backend\Model\Auth\Session $authSession
    )
    {
        $this->resultRedirectFactory = $resultRedirectFactory;
        $this->authSession = $authSession;
        parent::__construct($context);
    }

    public function execute()
    {
        $id = $this->getRequest()->getParam('id');
        $postModel = $this->_objectManager->create('OX\HomeSlider\Model\Post');

        if ($id) {
            $postModel = $postModel->load($id);
        }
        $post = $this->getRequest()->getParam('general');
        $user = $this->getCurrentUser();
        $post['username'] = $user;
        if (empty($post['id'])) {
            $post['id'] = null;
        }

        if (isset($post['image'])) {
            $post['image'] = $post['image'][0]['name'];
        } else {
            $post['image'] = null;
        }


        $postModel->setData($post);
        $postModel->save();
        return $this->resultRedirectFactory->create()->setPath('homeslider/post/index');
    }
    public function getCurrentUser()
    {
        return $this->authSession->getUser()->getUsername();
    }

}
  • Then how to save this user name in to DB – Jaisa Nov 21 '17 at 12:54
  • where you want to save username of admin ? – mansi Nov 21 '17 at 13:46
  • In my custom table which is stored in DB – Jaisa Nov 21 '17 at 13:47
  • $username = $this->authSession->getUser()->getUsername(); $model = $this->modelnameFactory->create(); $model->setUsername($username); $model->save(); – mansi Nov 21 '17 at 13:51
  • See my updated post. – Jaisa Nov 21 '17 at 13:59

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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