264 lines
5.7 KiB
PHP
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;
|
|
}
|
|
}
|