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'); }