246 lines
5.3 KiB
PHP
246 lines
5.3 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file classes/controllers/grid/GridRow.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 GridRow
|
|
*
|
|
* @ingroup controllers_grid
|
|
*
|
|
* @brief GridRow implements a row of a Grid. See GridHandler for general
|
|
* information about grids.
|
|
*
|
|
* Each Grid is populated with data that is displayed in a series of rows. Each
|
|
* row is implemented using a GridRow, which knows how to describe the data it
|
|
* represents, and can present and manage row actions such as Edit and Delete
|
|
* operations.
|
|
*
|
|
* For general information on grids, see GridHandler.
|
|
*/
|
|
|
|
namespace PKP\controllers\grid;
|
|
use PKP\core\PKPRequest;
|
|
|
|
class GridRow extends GridBodyElement
|
|
{
|
|
public const GRID_ACTION_POSITION_ROW_CLICK = 'row-click';
|
|
public const GRID_ACTION_POSITION_ROW_LEFT = 'row-left';
|
|
|
|
/** @var array */
|
|
public $_requestArgs;
|
|
|
|
/** @var string the grid this row belongs to */
|
|
public $_gridId;
|
|
|
|
/** @var mixed the row's data source */
|
|
public $_data;
|
|
|
|
/** @var bool true if the row has been modified */
|
|
public $_isModified;
|
|
|
|
/**
|
|
* @var array row actions, the first key represents
|
|
* the position of the action in the row template,
|
|
* the second key represents the action id.
|
|
*/
|
|
public $_actions = [GridHandler::GRID_ACTION_POSITION_DEFAULT => []];
|
|
|
|
/** @var string the row template */
|
|
public $_template;
|
|
|
|
|
|
/**
|
|
* Constructor.
|
|
*/
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
|
|
$this->_isModified = false;
|
|
}
|
|
|
|
|
|
//
|
|
// Getters/Setters
|
|
//
|
|
/**
|
|
* Set the grid id
|
|
*
|
|
* @param string $gridId
|
|
*/
|
|
public function setGridId($gridId)
|
|
{
|
|
$this->_gridId = $gridId;
|
|
}
|
|
|
|
/**
|
|
* Get the grid id
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getGridId()
|
|
{
|
|
return $this->_gridId;
|
|
}
|
|
|
|
/**
|
|
* Set the grid request parameters.
|
|
*
|
|
* @see GridHandler::getRequestArgs()
|
|
*
|
|
* @param array $requestArgs
|
|
*/
|
|
public function setRequestArgs($requestArgs)
|
|
{
|
|
$this->_requestArgs = $requestArgs;
|
|
}
|
|
|
|
/**
|
|
* Get the grid request parameters.
|
|
*
|
|
* @see GridHandler::getRequestArgs()
|
|
*
|
|
* @return array
|
|
*/
|
|
public function getRequestArgs()
|
|
{
|
|
return $this->_requestArgs;
|
|
}
|
|
|
|
/**
|
|
* Set the data element(s) for this controller
|
|
*
|
|
*/
|
|
public function setData(&$data)
|
|
{
|
|
$this->_data = & $data;
|
|
}
|
|
|
|
/**
|
|
* Get the data element(s) for this controller
|
|
*/
|
|
public function &getData()
|
|
{
|
|
return $this->_data;
|
|
}
|
|
|
|
/**
|
|
* Set the modified flag for the row
|
|
*
|
|
* @param bool $isModified
|
|
*/
|
|
public function setIsModified($isModified)
|
|
{
|
|
$this->_isModified = $isModified;
|
|
}
|
|
|
|
/**
|
|
* Get the modified flag for the row
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function getIsModified()
|
|
{
|
|
return $this->_isModified;
|
|
}
|
|
|
|
/**
|
|
* Get whether this row has any actions or not.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function hasActions()
|
|
{
|
|
$allActions = [];
|
|
foreach ($this->_actions as $actions) {
|
|
$allActions = array_merge($allActions, $actions);
|
|
}
|
|
|
|
return !empty($allActions);
|
|
}
|
|
|
|
/**
|
|
* Get all actions for a given position within the controller
|
|
*
|
|
* @param string $position the position of the actions
|
|
*
|
|
* @return array the LinkActions for the given position
|
|
*/
|
|
public function getActions($position = GridHandler::GRID_ACTION_POSITION_DEFAULT)
|
|
{
|
|
if (!isset($this->_actions[$position])) {
|
|
return [];
|
|
}
|
|
return $this->_actions[$position];
|
|
}
|
|
|
|
/**
|
|
* Add an action
|
|
*
|
|
* @param mixed $action a single action
|
|
* @param string $position the position of the action
|
|
*/
|
|
public function addAction($action, $position = GridHandler::GRID_ACTION_POSITION_DEFAULT)
|
|
{
|
|
if (!isset($this->_actions[$position])) {
|
|
$this->_actions[$position] = [];
|
|
}
|
|
$this->_actions[$position][$action->getId()] = $action;
|
|
}
|
|
|
|
/**
|
|
* Get the row template - override base
|
|
* implementation to provide a sensible default.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getTemplate()
|
|
{
|
|
return $this->_template;
|
|
}
|
|
|
|
/**
|
|
* Set the controller template
|
|
*
|
|
* @param string $template
|
|
*/
|
|
public function setTemplate($template)
|
|
{
|
|
$this->_template = $template;
|
|
}
|
|
|
|
//
|
|
// Public methods
|
|
//
|
|
/**
|
|
* Initialize a row instance.
|
|
*
|
|
* Subclasses can override this method.
|
|
*
|
|
* @param PKPRequest $request
|
|
* @param string $template
|
|
*/
|
|
public function initialize($request, $template = null)
|
|
{
|
|
if ($template === null) {
|
|
$template = 'controllers/grid/gridRow.tpl';
|
|
}
|
|
// Set the template.
|
|
$this->setTemplate($template);
|
|
}
|
|
}
|
|
|
|
if (!PKP_STRICT_MODE) {
|
|
class_alias('\PKP\controllers\grid\GridRow', '\GridRow');
|
|
foreach ([
|
|
'GRID_ACTION_POSITION_ROW_CLICK',
|
|
'GRID_ACTION_POSITION_ROW_LEFT',
|
|
] as $constantName) {
|
|
define($constantName, constant('\GridRow::' . $constantName));
|
|
}
|
|
}
|