* @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\CMS\HTML\Helpers; use Joomla\CMS\Factory; use Joomla\CMS\HTML\HTMLHelper; use Joomla\CMS\Language\Text; use Joomla\CMS\Table\Table; // phpcs:disable PSR1.Files.SideEffects \defined('JPATH_PLATFORM') or die; // phpcs:enable PSR1.Files.SideEffects /** * Utility class for creating HTML Grids * * @since 1.5 */ abstract class Grid { /** * Method to sort a column in a grid * * @param string $title The link title * @param string $order The order field for the column * @param string $direction The current direction * @param string $selected The selected ordering * @param string $task An optional task override * @param string $newDirection An optional direction for the new column * @param string $tip An optional text shown as tooltip title instead of $title * @param string $form An optional form selector * * @return string * * @since 1.5 */ public static function sort($title, $order, $direction = 'asc', $selected = '', $task = null, $newDirection = 'asc', $tip = '', $form = null) { HTMLHelper::_('behavior.core'); HTMLHelper::_('bootstrap.popover', '.hasPopover', ['trigger' => 'hover focus']); $direction = strtolower($direction); $icon = array('arrow-up-3', 'arrow-down-3'); $index = (int) ($direction === 'desc'); if ($order != $selected) { $direction = $newDirection; } else { $direction = $direction === 'desc' ? 'asc' : 'desc'; } if ($form) { $form = ', document.getElementById(\'' . $form . '\')'; } $html = ''; if (isset($title['0']) && $title['0'] === '<') { $html .= $title; } else { $html .= Text::_($title); } if ($order == $selected) { $html .= ''; } $html .= ''; return $html; } /** * Method to check all checkboxes in a grid * * @param string $name The name of the form element * @param string $action The action to perform on clicking the checkbox * * @return string * * @since 3.1.2 */ public static function checkall($name = 'checkall-toggle', $action = 'Joomla.checkAll(this)') { HTMLHelper::_('behavior.core'); return ''; } /** * Method to create a checkbox for a grid row. * * @param integer $rowNum The row index * @param integer $recId The record id * @param boolean $checkedOut True if item is checked out * @param string $name The name of the form element * @param string $stub The name of stub identifier * @param string $title The name of the item * @param string $formId An optional form selector. * * @return mixed String of html with a checkbox if item is not checked out, null if checked out. * * @since 1.5 */ public static function id($rowNum, $recId, $checkedOut = false, $name = 'cid', $stub = 'cb', $title = '', $formId = null) { if ($formId !== null) { return $checkedOut ? '' : '' . ''; } return $checkedOut ? '' : '' . ''; } /** * Displays a checked out icon. * * @param object $row A data object (must contain checked out as a property). * @param integer $i The index of the row. * @param string $identifier The property name of the primary key or index of the row. * * @return string * * @since 1.5 */ public static function checkedOut(&$row, $i, $identifier = 'id') { $user = Factory::getUser(); $userid = $user->get('id'); if ($row instanceof Table) { $result = $row->isCheckedOut($userid); } else { $result = false; } if ($result) { return static::_checkedOut($row); } else { if ($identifier === 'id') { return HTMLHelper::_('grid.id', $i, $row->$identifier); } else { return HTMLHelper::_('grid.id', $i, $row->$identifier, $result, $identifier); } } } /** * Method to create a clickable icon to change the state of an item * * @param mixed $value Either the scalar value or an object (for backward compatibility, deprecated) * @param integer $i The index * @param string $img1 Image for a positive or on value * @param string $img0 Image for the empty or off value * @param string $prefix An optional prefix for the task * * @return string * * @since 1.5 */ public static function published($value, $i, $img1 = 'tick.png', $img0 = 'publish_x.png', $prefix = '') { if (is_object($value)) { $value = $value->published; } $img = $value ? $img1 : $img0; $task = $value ? 'unpublish' : 'publish'; $alt = $value ? Text::_('JPUBLISHED') : Text::_('JUNPUBLISHED'); $action = $value ? Text::_('JLIB_HTML_UNPUBLISH_ITEM') : Text::_('JLIB_HTML_PUBLISH_ITEM'); return '' . HTMLHelper::_('image', 'admin/' . $img, $alt, null, true) . ''; } /** * Method to create a select list of states for filtering * By default the filter shows only published and unpublished items * * @param string $filterState The initial filter state * @param string $published The Text string for published * @param string $unpublished The Text string for Unpublished * @param string $archived The Text string for Archived * @param string $trashed The Text string for Trashed * * @return string * * @since 1.5 */ public static function state($filterState = '*', $published = 'JPUBLISHED', $unpublished = 'JUNPUBLISHED', $archived = null, $trashed = null) { $state = array('' => '- ' . Text::_('JLIB_HTML_SELECT_STATE') . ' -', 'P' => Text::_($published), 'U' => Text::_($unpublished)); if ($archived) { $state['A'] = Text::_($archived); } if ($trashed) { $state['T'] = Text::_($trashed); } return HTMLHelper::_( 'select.genericlist', $state, 'filter_state', array( 'list.attr' => 'class="form-select" size="1" onchange="Joomla.submitform();"', 'list.select' => $filterState, 'option.key' => null, ) ); } /** * Method to create an icon for saving a new ordering in a grid * * @param array $rows The array of rows of rows * @param string $image The image [UNUSED] * @param string $task The task to use, defaults to save order * * @return string * * @since 1.5 */ public static function order($rows, $image = 'filesave.png', $task = 'saveorder') { return ''; } /** * Method to create a checked out icon with optional overlib in a grid. * * @param object $row The row object * @param boolean $overlib True if an overlib with checkout information should be created. * * @return string HTMl for the icon and overlib * * @since 1.5 */ protected static function _checkedOut(&$row, $overlib = true) { $hover = ''; if ($overlib) { $date = HTMLHelper::_('date', $row->checked_out_time, Text::_('DATE_FORMAT_LC1')); $time = HTMLHelper::_('date', $row->checked_out_time, 'H:i'); $hover = ''; } return $hover . HTMLHelper::_('image', 'admin/checked_out.png', null, null, true) . ''; } }