| Current Path : /var/www/clients/client3/web2/web/vendor/magento/module-backend/Block/Widget/Button/ |
| Current File : /var/www/clients/client3/web2/web/vendor/magento/module-backend/Block/Widget/Button/ButtonList.php |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Backend\Block\Widget\Button;
/**
* Button list widget
*
* @api
* @since 100.0.2
*/
class ButtonList
{
/**
* @var ItemFactory
*/
protected $itemFactory;
/**
* @param ItemFactory $itemFactory
*/
public function __construct(ItemFactory $itemFactory)
{
$this->itemFactory = $itemFactory;
}
/**
* @var array
*/
protected $_buttons = [-1 => [], 0 => [], 1 => []];
/**
* Add a button
*
* @param string $buttonId
* @param array $data
* @param integer $level
* @param integer $sortOrder
* @param string|null $region That button should be displayed in ('toolbar', 'header', 'footer', null)
* @return void
* @SuppressWarnings(PHPMD.NPathComplexity)
*/
public function add($buttonId, $data, $level = 0, $sortOrder = 0, $region = 'toolbar')
{
if (!isset($this->_buttons[$level])) {
$this->_buttons[$level] = [];
}
$data['id'] = empty($data['id']) ? $buttonId : $data['id'];
$data['button_key'] = $data['id'] . '_button';
$data['region'] = empty($data['region']) ? $region : $data['region'];
$data['level'] = $level;
$sortOrder = $sortOrder ?: (count($this->_buttons[$level]) + 1) * 10;
$data['sort_order'] = empty($data['sort_order']) ? $sortOrder : $data['sort_order'];
$this->_buttons[$level][$buttonId] = $this->itemFactory->create(['data' => $data]);
}
/**
* Remove existing button
*
* @param string $buttonId
* @return void
*/
public function remove($buttonId)
{
foreach ($this->_buttons as $level => $buttons) {
if (isset($buttons[$buttonId])) {
/** @var Item $item */
$item = $buttons[$buttonId];
$item->isDeleted(true);
unset($this->_buttons[$level][$buttonId]);
}
}
}
/**
* Update specified button property
*
* @param string $buttonId
* @param string|null $key
* @param string $data
* @return void
*/
public function update($buttonId, $key, $data)
{
foreach ($this->_buttons as $level => $buttons) {
if (isset($buttons[$buttonId])) {
if (!empty($key)) {
if ('level' == $key) {
$this->_buttons[$data][$buttonId] = $this->_buttons[$level][$buttonId];
unset($this->_buttons[$level][$buttonId]);
} else {
/** @var Item $item */
$item = $this->_buttons[$level][$buttonId];
$item->setData($key, $data);
}
} else {
/** @var Item $item */
$item = $this->_buttons[$level][$buttonId];
$item->setData($data);
}
break;
}
}
}
/**
* Get all buttons
*
* @return array
*/
public function getItems()
{
array_walk($this->_buttons, function (&$item) {
uasort($item, [$this, 'sortButtons']);
});
return $this->_buttons;
}
/**
* Sort buttons by sort order
*
* @param Item $itemA
* @param Item $itemB
* @return int
*/
public function sortButtons(Item $itemA, Item $itemB)
{
return (int)$itemA->getSortOrder() <=> (int)$itemB->getSortOrder();
}
}