Files
2024-12-17 17:34:10 +01:00

264 lines
5.7 KiB
PHP

<?php
/**
* @package JEM
* @copyright (C) 2013-2024 joomlaeventmanager.net
* @copyright (C) 2005-2009 Christoph Lukes
* @license https://www.gnu.org/licenses/gpl-3.0 GNU/GPL
*/
defined('_JEXEC') or die;
use Joomla\CMS\Factory;
use Joomla\CMS\Table\Table;
require_once __DIR__ . '/admin.php';
/**
* JEM Component Group Model
*
*/
class JemModelGroup extends JemModelAdmin
{
/**
* Method to test whether a record can be deleted.
*
* @param object A record object.
* @return boolean True if allowed to delete the record. Defaults to the permission set in the component.
*/
protected function canDelete($record)
{
if (!empty($record->id) && ($record->published == -2))
{
$user = JemFactory::getUser();
if (!empty($record->catid)) {
return $user->authorise('core.delete', 'com_jem.category.'.(int) $record->catid);
} else {
return $user->authorise('core.delete', 'com_jem');
}
}
return false;
}
/**
* Method to test whether a record can be deleted.
*
* @param object A record object.
* @return boolean True if allowed to change the state of the record. Defaults to the permission set in the component.
*
*/
protected function canEditState($record)
{
$user = JemFactory::getUser();
if (!empty($record->catid)) {
return $user->authorise('core.edit.state', 'com_jem.category.'.(int) $record->catid);
} else {
return $user->authorise('core.edit.state', 'com_jem');
}
}
/**
* Returns a reference to the a Table object, always creating it.
*
* @param type The table type to instantiate. Optional.
* @param string A prefix for the table class name. Optional.
* @param array Configuration data for model. Optional.
* @return Table A database object
*/
public function getTable($type = 'Group', $prefix = 'JemTable', $config = array())
{
return Table::getInstance($type, $prefix, $config);
}
/**
* Method to get the record form.
*
* @param array $data Data for the form. Optional.
* @param boolean $loadData True if the form is to load its own data (default case), false if not. Optional.
* @return mixed A JForm object on success, false on failure
*/
public function getForm($data = array(), $loadData = true)
{
// Get the form.
$form = $this->loadForm('com_jem.group', 'group', array('control' => 'jform', 'load_data' => $loadData));
if (empty($form)) {
return false;
}
return $form;
}
/**
* Method to get a single record.
*
* @param integer The id of the primary key.
*
* @return mixed Object on success, false on failure.
*/
public function getItem($pk = null)
{
$item = parent::getItem($pk);
return $item;
}
/**
* Method to get the data that should be injected in the form.
*/
protected function loadFormData()
{
// Check the session for previously entered form data.
$data = Factory::getApplication()->getUserState('com_jem.edit.group.data', array());
if (empty($data)) {
$data = $this->getItem();
}
return $data;
}
/**
* Prepare and sanitise the table data prior to saving.
*
* @param Table The table object to prepare.
*
*/
protected function _prepareTable($table)
{
$db = Factory::getContainer()->get('DatabaseDriver');
$app = Factory::getApplication();
// Make sure the data is valid
if (!$table->check()) {
$this->setError($table->getError());
return;
}
// Store data
if (!$table->store(true)) {
throw new Exception($table->getError(), 500);
}
$members = $app->input->get('maintainers', array(), 'array');
// Updating group references
$query = $db->getQuery(true);
$query->delete($db->quoteName('#__jem_groupmembers'));
$query->where('group_id = '.(int)$table->id);
$db->setQuery($query);
$db->execute();
foreach($members as $member)
{
$member = intval($member);
$query = $db->getQuery(true);
$columns = array('group_id', 'member');
$values = array((int)$table->id, $member);
$query->insert($db->quoteName('#__jem_groupmembers'))
->columns($db->quoteName($columns))
->values(implode(',', $values));
$db->setQuery($query);
$db->execute();
}
}
/**
* Method to get the members data
*
* @access public
* @return array List of members
*
*/
public function getMembers()
{
$members = $this->_members();
$users = array();
if (!empty($members)) {
$query = 'SELECT id AS value, username, name'
. ' FROM #__users'
. ' WHERE id IN ('.$members.')'
. ' ORDER BY name ASC'
;
$this->_db->setQuery($query);
$users = $this->_db->loadObjectList();
foreach ($users as &$user) {
$user->text = $user->name . ' (' . $user->username . ')';
}
}
return $users;
}
/**
* Method to get the selected members.
*
* @access protected
* @return string
*
*/
protected function _members()
{
$item = parent::getItem();
$members = null;
//get selected members
if ($item->id) {
$query = 'SELECT member'
. ' FROM #__jem_groupmembers'
. ' WHERE group_id = '.(int)$item->id;
$this->_db->setQuery ($query);
$member_ids = $this->_db->loadColumn();
if (is_array($member_ids)) {
$members = implode(',', $member_ids);
}
}
return $members;
}
/**
* Method to get the available users.
*
* @access public
* @return mixed
*
*/
public function getAvailable()
{
$members = $this->_members();
// get non selected members
$query = 'SELECT id AS value, username, name FROM #__users';
$query .= ' WHERE block = 0' ;
if ($members) {
$query .= ' AND id NOT IN ('.$members.')' ;
}
$query .= ' ORDER BY name ASC';
$this->_db->setQuery($query);
$available = $this->_db->loadObjectList();
foreach ($available as &$item) {
$item->text = $item->name . ' (' . $item->username . ')';
}
return $available;
}
}