Unassign.php 1.84 KB
Newer Older
Ketan's avatar
Ketan committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Magento\Sales\Block\Status\Grid\Column;

use Magento\Framework\App\ObjectManager;
use \Magento\Backend\Block\Template\Context;
use Magento\Framework\Serialize\Serializer\Json;

/**
 * @api
 * @since 100.0.2
 */
class Unassign extends \Magento\Backend\Block\Widget\Grid\Column
{
    /**
     * @var Json
     */
    private $json;

    /**
     * @inheritDoc
     *
     * @param Json|null $json
     */
    public function __construct(
        Context $context,
        array $data = [],
        ?Json $json = null
    ) {
        parent::__construct($context, $data);
        $this->json = $json ?? ObjectManager::getInstance()->get(Json::class);
    }

    /**
     * Add decorated action to column
     *
     * @return array
     */
    public function getFrameCallback()
    {
        return [$this, 'decorateAction'];
    }

    /**
     * Decorate values to column
     *
     * @param string $value
     * @param \Magento\Sales\Model\Order\Status $row
     * @param \Magento\Backend\Block\Widget\Grid\Column $column
     * @param bool $isExport
     * @return string
     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
     */
    public function decorateAction($value, $row, $column, $isExport)
    {
        $cell = '';
        $state = $row->getState();
        if (!empty($state)) {
            $url = $this->getUrl('*/*/unassign');
            $label = __('Unassign');
            $cell = '<a href="#" data-post="'
                .$this->escapeHtmlAttr(
                    $this->json->serialize([
                        'action' => $url,
                        'data' => ['status' => $row->getStatus(), 'state' => $row->getState()]
                    ])
                )
                .'">' . $label . '</a>';
        }
        return $cell;
    }
}