* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved. * @license GNU General Public License version 3 or later; see LICENSE */ namespace Joomla\Component\MokoSuiteBackup\Administrator\Model; defined('_JEXEC') or die; use Joomla\CMS\MVC\Model\ListModel; class SnapshotsModel extends ListModel { public function __construct($config = []) { if (empty($config['filter_fields'])) { $config['filter_fields'] = [ 'id', 'a.id', 'description', 'a.description', 'created', 'a.created', 'data_size', 'a.data_size', ]; } parent::__construct($config); } protected function getListQuery() { $db = $this->getDatabase(); $query = $db->getQuery(true); $query->select('a.*') ->from($db->quoteName('#__mokosuitebackup_snapshots', 'a')); // Search filter $search = $this->getState('filter.search'); if (!empty($search)) { $search = $db->quote('%' . $db->escape($search, true) . '%'); $query->where($db->quoteName('a.description') . ' LIKE ' . $search); } // Ordering $orderCol = $this->state->get('list.ordering', 'a.created'); $orderDirn = $this->state->get('list.direction', 'DESC'); $query->order($db->escape($orderCol) . ' ' . $db->escape($orderDirn)); return $query; } protected function populateState($ordering = 'a.created', $direction = 'DESC') { $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string'); $this->setState('filter.search', $search); parent::populateState($ordering, $direction); } }