205 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			205 lines
		
	
	
		
			4.2 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\MVC\Model\BaseDatabaseModel;
 | |
| use Joomla\CMS\Table\Table;
 | |
| use Joomla\CMS\Language\Text;
 | |
| 
 | |
| /**
 | |
|  * JEM Component attendee Model
 | |
|  *
 | |
|  * @package JEM
 | |
|  *
 | |
|  */
 | |
| class JemModelAttendee extends BaseDatabaseModel
 | |
| {
 | |
| 	/**
 | |
| 	 * Attendee id
 | |
| 	 *
 | |
| 	 * @var int
 | |
| 	 */
 | |
| 	protected $_id = null;
 | |
| 
 | |
| 	/**
 | |
| 	 * Attendee data array
 | |
| 	 *
 | |
| 	 * @var array
 | |
| 	 */
 | |
| 	protected $_data = null;
 | |
| 
 | |
| 	/**
 | |
| 	 * Constructor
 | |
| 	 *
 | |
| 	 */
 | |
| 	public function __construct()
 | |
| 	{
 | |
| 		parent::__construct();
 | |
| 
 | |
| 		$settings = JemHelper::globalattribs();
 | |
| 		$this->regname = $settings->get('global_regname','1');
 | |
| 
 | |
| 		$array = Factory::getApplication()->input->get('cid', array(0), 'array');
 | |
| 		$this->setId((int)$array[0]);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Method to set the identifier
 | |
| 	 *
 | |
| 	 * @access public
 | |
| 	 * @param  int attendee/registration identifier
 | |
| 	 */
 | |
| 	public function setId($id)
 | |
| 	{
 | |
| 		// Set category id and wipe data
 | |
| 		$this->_id = $id;
 | |
| 		$this->_data = null;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Method to get attendee data
 | |
| 	 *
 | |
| 	 * @access public
 | |
| 	 * @return array
 | |
| 	 */
 | |
| 	public function getData()
 | |
| 	{
 | |
| 		if (!$this->_loadData()) {
 | |
| 			$this->_initData();
 | |
| 		}
 | |
| 
 | |
| 		return $this->_data;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Method to load attendee data
 | |
| 	 *
 | |
| 	 * @access protected
 | |
| 	 * @return boolean  True on success
 | |
| 	 */
 | |
| 	protected function _loadData()
 | |
| 	{
 | |
| 		// Lets load the content if it doesn't already exist
 | |
| 		if (empty($this->_data))
 | |
| 		{
 | |
| 			$query = 'SELECT r.*, ' . ($this->regname ? 'u.name' : 'u.username') . ' AS username '
 | |
| 			       . ' FROM #__jem_register AS r '
 | |
| 			       . ' LEFT JOIN #__users AS u ON u.id = r.uid '
 | |
| 			       . ' WHERE r.id = '.$this->_db->quote($this->_id)
 | |
| 			       ;
 | |
| 			$this->_db->setQuery($query);
 | |
| 			$this->_data = $this->_db->loadObject();
 | |
| 
 | |
| 			return (boolean) $this->_data;
 | |
| 		}
 | |
| 
 | |
| 		return true;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Method to initialise attendee data
 | |
| 	 *
 | |
| 	 * @access protected
 | |
| 	 * @return boolean  True on success
 | |
| 	 */
 | |
| 	protected function _initData()
 | |
| 	{
 | |
| 		// Lets load the content if it doesn't already exist
 | |
| 		if (empty($this->_data)) {
 | |
| 			$data = Table::getInstance('jem_register', '');
 | |
| 			$data->username = null;
 | |
| 			$this->_data = $data;
 | |
| 		}
 | |
| 
 | |
| 		return true;
 | |
| 	}
 | |
| 
 | |
| 	public function toggle()
 | |
| 	{
 | |
| 		$attendee = $this->getData();
 | |
| 
 | |
| 		if (!$attendee->id) {
 | |
| 			$this->setError(Text::_('COM_JEM_MISSING_ATTENDEE_ID'));
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		$row = Table::getInstance('jem_register', '');
 | |
| 		$row->bind($attendee);
 | |
| 		$row->waiting = $attendee->waiting ? 0 : 1;
 | |
| 
 | |
| 		return $row->store();
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Method to store the attendee
 | |
| 	 *
 | |
| 	 * @access public
 | |
| 	 * @return boolean  True on success
 | |
| 	 */
 | |
| 	public function store($data)
 | |
| 	{
 | |
| 		$eventid = $data['event'];
 | |
| 
 | |
| 		$row = $this->getTable('jem_register', '');
 | |
| 
 | |
| 		// bind it to the table
 | |
| 		if (!$row->bind($data)) {
 | |
| 			\Joomla\CMS\Factory::getApplication()->enqueueMessage($this->_db->getErrorMsg(), 'error');
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		// sanitise id field
 | |
| 		$row->id = (int) $row->id;
 | |
| 
 | |
| 		// Are we saving from an item edit?
 | |
| 		if (!$row->id) {
 | |
| 			$row->uregdate = gmdate('Y-m-d H:i:s');
 | |
| 
 | |
| 			$query = ' SELECT e.maxplaces, e.waitinglist, COUNT(r.id) as booked '
 | |
| 			       . ' FROM #__jem_events AS e '
 | |
| 			       . ' INNER JOIN #__jem_register AS r ON r.event = e.id '
 | |
| 			       . ' WHERE e.id = ' . $this->_db->Quote($eventid)
 | |
| 			       . '   AND r.status = 1 AND r.waiting = 0 '
 | |
| 			       . ' GROUP BY e.id ';
 | |
| 			$this->_db->setQuery($query);
 | |
| 			$details = $this->_db->loadObject();
 | |
| 
 | |
| 			// put on waiting list ?
 | |
| 			if ($details->maxplaces > 0) // there is a max
 | |
| 			{
 | |
| 				// check if the user should go on waiting list
 | |
| 				if ($details->booked >= $details->maxplaces)
 | |
| 				{
 | |
| 					if (!$details->waitinglist) {
 | |
| 						\Joomla\CMS\Factory::getApplication()->enqueueMessage(Text::_('COM_JEM_ERROR_REGISTER_EVENT_IS_FULL'), 'warning');
 | |
| 						return false;
 | |
| 					}
 | |
| 					$row->waiting = 1;
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		// Make sure the data is valid
 | |
| 		if (!$row->check()) {
 | |
| 			$this->setError($row->getError());
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		// Store it in the db
 | |
| 		if (!$row->store()) {
 | |
| 			Factory::getApplication()->enqueueMessage($this->_db->getErrorMsg(), 'error');
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		return $row;
 | |
| 	}
 | |
| }
 | |
| ?>
 |