Files
OSJ/lib/pkp/classes/controllers/grid/feature/OrderItemsFeature.php
T
CHIEFSOFT\ameye df3a033196 first commit
2024-06-08 17:09:23 -04:00

218 lines
5.6 KiB
PHP

<?php
/**
* @file classes/controllers/grid/feature/OrderItemsFeature.php
*
* Copyright (c) 2014-2021 Simon Fraser University
* Copyright (c) 2000-2021 John Willinsky
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
*
* @class OrderItemsFeature
*
* @ingroup controllers_grid_feature
*
* @brief Base class for grid widgets ordering functionality.
*
*/
namespace PKP\controllers\grid\feature;
use APP\template\TemplateManager;
use PKP\controllers\grid\GridRow;
use PKP\linkAction\LinkAction;
use PKP\linkAction\request\NullAction;
class OrderItemsFeature extends GridFeature
{
/** @var bool */
public $_overrideRowTemplate;
/** @var string */
public $_nonOrderableItemMessage;
/**
* Constructor.
*
* @param bool $overrideRowTemplate This feature uses row
* actions and it will force the usage of the gridRow.tpl.
* If you want to use a different grid row template file, set this flag to
* false and make sure to use a template file that adds row actions.
* @param string $nonOrderableItemMessage optional A translated message to be used
* when user tries to move a non orderable grid item.
*/
public function __construct($overrideRowTemplate, $nonOrderableItemMessage = null)
{
parent::__construct('orderItems');
$this->setOverrideRowTemplate($overrideRowTemplate);
$this->setNonOrderableItemMessage($nonOrderableItemMessage);
}
//
// Getters and setters.
//
/**
* Set override row template flag.
*/
public function setOverrideRowTemplate($overrideRowTemplate)
{
$this->_overrideRowTemplate = $overrideRowTemplate;
}
/**
* Get override row template flag.
*
* @param GridRow $gridRow
*
* @return bool
*/
public function getOverrideRowTemplate(&$gridRow)
{
// Make sure we don't return the override row template
// flag to objects that are not instances of GridRow class.
if ($gridRow instanceof GridRow) {
return $this->_overrideRowTemplate;
} else {
return false;
}
}
/**
* Set non orderable item message.
*
* @param string $nonOrderableItemMessage Message already translated.
*/
public function setNonOrderableItemMessage($nonOrderableItemMessage)
{
$this->_nonOrderableItemMessage = $nonOrderableItemMessage;
}
/**
* Get non orderable item message.
*
* @return string Message already translated.
*/
public function getNonOrderableItemMessage()
{
return $this->_nonOrderableItemMessage;
}
//
// Extended methods from GridFeature.
//
/**
* @see GridFeature::setOptions()
*/
public function setOptions($request, $grid)
{
parent::setOptions($request, $grid);
$router = $request->getRouter();
$this->addOptions([
'saveItemsSequenceUrl' => $router->url($request, null, null, 'saveSequence', null, $grid->getRequestArgs()),
'csrfToken' => $request->getSession()->getCsrfToken(),
]);
}
/**
* @see GridFeature::fetchUIElements()
*/
public function fetchUIElements($request, $grid)
{
$templateMgr = TemplateManager::getManager($request);
$UIElements = [];
if ($this->isOrderActionNecessary()) {
$templateMgr->assign('gridId', $grid->getId());
$UIElements['orderFinishControls'] = $templateMgr->fetch('controllers/grid/feature/gridOrderFinishControls.tpl');
}
$nonOrderableItemMessage = $this->getNonOrderableItemMessage();
if ($nonOrderableItemMessage) {
$templateMgr->assign('orderMessage', $nonOrderableItemMessage);
$UIElements['orderMessage'] = $templateMgr->fetch('controllers/grid/feature/gridOrderNonOrderableMessage.tpl');
}
return $UIElements;
}
//
// Hooks implementation.
//
/**
* @see GridFeature::getInitializedRowInstance()
*/
public function getInitializedRowInstance($args)
{
$row = & $args['row'];
if ($args['grid']->getDataElementSequence($row->getData()) !== false) {
$this->addRowOrderAction($row);
}
}
/**
* @see GridFeature::gridInitialize()
*/
public function gridInitialize($args)
{
$grid = & $args['grid'];
if ($this->isOrderActionNecessary()) {
$grid->addAction(
new LinkAction(
'orderItems',
new NullAction(),
__('grid.action.order'),
'order_items'
)
);
}
}
//
// Protected methods.
//
/**
* Add grid row order action.
*
* @param GridRow $row
*/
public function addRowOrderAction($row)
{
if ($this->getOverrideRowTemplate($row)) {
$row->setTemplate('controllers/grid/gridRow.tpl');
}
$row->addAction(
new LinkAction(
'moveItem',
new NullAction(),
'',
'order_items'
),
GridRow::GRID_ACTION_POSITION_ROW_LEFT
);
}
//
// Protected template methods.
//
/**
* Return if this feature will use
* a grid level order action. Default is
* true, override it if needed.
*
* @return bool
*/
public function isOrderActionNecessary()
{
return true;
}
}
if (!PKP_STRICT_MODE) {
class_alias('\PKP\controllers\grid\feature\OrderItemsFeature', '\OrderItemsFeature');
}