_jsonEncoder = $jsonEncoder; parent::__construct($context, $data); } /** * Renders column * * @param \Magento\Framework\DataObject $row * @return string */ public function render(\Magento\Framework\DataObject $row) { $actions = $this->getColumn()->getActions(); if (empty($actions) || !is_array($actions)) { return ' '; } if (sizeof($actions) == 1 && !$this->getColumn()->getNoLink()) { foreach ($actions as $action) { if (is_array($action)) { return $this->_toLinkHtml($action, $row); } } } $out = ''; return $out; } /** * Render single action as dropdown option html * * @param array $action * @param \Magento\Framework\DataObject $row * @return string */ protected function _toOptionHtml($action, \Magento\Framework\DataObject $row) { $actionAttributes = new \Magento\Framework\DataObject(); $actionCaption = ''; $this->_transformActionData($action, $actionCaption, $row); $htmlAttributes = [ 'value' => $this->escapeHtmlAttr($this->_jsonEncoder->encode($action), false) ]; $actionAttributes->setData($htmlAttributes); return ''; } /** * Render single action as link html * * @param array $action * @param \Magento\Framework\DataObject $row * @return string */ protected function _toLinkHtml($action, \Magento\Framework\DataObject $row) { $actionAttributes = new \Magento\Framework\DataObject(); $actionCaption = ''; $this->_transformActionData($action, $actionCaption, $row); if (isset($action['confirm'])) { $action['onclick'] = 'return window.confirm(\'' . addslashes( $this->escapeHtml($action['confirm']) ) . '\')'; unset($action['confirm']); } $actionAttributes->setData($action); return 'serialize() . '>' . $actionCaption . ''; } /** * Prepares action data for html render * * @param array &$action * @param string &$actionCaption * @param \Magento\Framework\DataObject $row * @return $this * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.UnusedLocalVariable) */ protected function _transformActionData(&$action, &$actionCaption, \Magento\Framework\DataObject $row) { foreach ($action as $attribute => $value) { if (isset($action[$attribute]) && !is_array($action[$attribute])) { $this->getColumn()->setFormat($action[$attribute]); $action[$attribute] = parent::render($row); } else { $this->getColumn()->setFormat(null); } switch ($attribute) { case 'caption': $actionCaption = $action['caption']; unset($action['caption']); break; case 'url': if (is_array($action['url']) && isset($action['field'])) { $params = [$action['field'] => $this->_getValue($row)]; if (isset($action['url']['params'])) { $params = array_merge($action['url']['params'], $params); } $action['href'] = $this->getUrl($action['url']['base'], $params); unset($action['field']); } else { $action['href'] = $action['url']; } unset($action['url']); break; case 'popup': $action['onclick'] = 'popWin(this.href,\'_blank\',\'width=800,height=700,resizable=1,' . 'scrollbars=1\');return false;'; break; } } return $this; } }