Files
idpan.poznan.pl/components/com_dvtr_employees/src/Model/EmployeeModel.php
2026-02-08 21:16:11 +01:00

327 lines
6.6 KiB
PHP

<?php
/**
* @version CVS: 1.0.0
* @package Com_Dvtr_employees
* @author Pawel Potoniec <pawel@devatri.pl>
* @copyright 2025 Pawel Potoniec
*/
namespace Dvtremployees\Component\Dvtr_employees\Site\Model;
// No direct access.
defined('_JEXEC') or die;
use \Joomla\CMS\Factory;
use \Joomla\Utilities\ArrayHelper;
use \Joomla\CMS\Language\Text;
use \Joomla\CMS\Table\Table;
use \Joomla\CMS\MVC\Model\ItemModel;
use \Joomla\CMS\Helper\TagsHelper;
use \Joomla\CMS\Object\CMSObject;
use \Joomla\CMS\User\UserFactoryInterface;
use \Dvtremployees\Component\Dvtr_employees\Site\Helper\Dvtr_employeesHelper;
/**
* Dvtr_employees model.
*
* @since 1.0.0
*/
class EmployeeModel extends ItemModel
{
public $_item;
/**
* Method to auto-populate the model state.
*
* Note. Calling getState in this method will result in recursion.
*
* @return void
*
* @since 1.0.0
*
* @throws Exception
*/
protected function populateState()
{
$app = Factory::getApplication('com_dvtr_employees');
$user = $app->getIdentity();
// Check published state
if ((!$user->authorise('core.edit.state', 'com_dvtr_employees')) && (!$user->authorise('core.edit', 'com_dvtr_employees')))
{
$this->setState('filter.published', 1);
$this->setState('filter.archived', 2);
}
// Load state from the request userState on edit or from the passed variable on default
if (Factory::getApplication()->input->get('layout') == 'edit')
{
$id = Factory::getApplication()->getUserState('com_dvtr_employees.edit.employee.id');
}
else
{
$id = Factory::getApplication()->input->get('id');
Factory::getApplication()->setUserState('com_dvtr_employees.edit.employee.id', $id);
}
$this->setState('employee.id', $id);
// Load the parameters.
$params = $app->getParams();
$params_array = $params->toArray();
if (isset($params_array['item_id']))
{
$this->setState('employee.id', $params_array['item_id']);
}
$this->setState('params', $params);
}
/**
* Method to get an object.
*
* @param integer $id The id of the object to get.
*
* @return mixed Object on success, false on failure.
*
* @throws Exception
*/
public function getItem($id = null)
{
if ($this->_item === null)
{
$this->_item = false;
if (empty($id))
{
$id = $this->getState('employee.id');
}
// Get a level row instance.
$table = $this->getTable();
// Attempt to load the row.
if ($table && $table->load($id))
{
// Check published state.
if ($published = $this->getState('filter.published'))
{
if (isset($table->state) && $table->state != $published)
{
throw new \Exception(Text::_('COM_DVTR_EMPLOYEES_ITEM_NOT_LOADED'), 403);
}
}
// Convert the Table to a clean CMSObject.
$properties = $table->getProperties(1);
$this->_item = ArrayHelper::toObject($properties, CMSObject::class);
}
if (empty($this->_item))
{
throw new \Exception(Text::_('COM_DVTR_EMPLOYEES_ITEM_NOT_LOADED'), 404);
}
}
$container = \Joomla\CMS\Factory::getContainer();
$userFactory = $container->get(UserFactoryInterface::class);
if (isset($this->_item->created_by))
{
$user = $userFactory->loadUserById($this->_item->created_by);
$this->_item->created_by_name = $user->name;
}
$container = \Joomla\CMS\Factory::getContainer();
$userFactory = $container->get(UserFactoryInterface::class);
if (isset($this->_item->modified_by))
{
$user = $userFactory->loadUserById($this->_item->modified_by);
$this->_item->modified_by_name = $user->name;
}
return $this->_item;
}
/**
* Get an instance of Table class
*
* @param string $type Name of the Table class to get an instance of.
* @param string $prefix Prefix for the table class name. Optional.
* @param array $config Array of configuration values for the Table object. Optional.
*
* @return Table|bool Table if success, false on failure.
*/
public function getTable($type = 'Employee', $prefix = 'Administrator', $config = array())
{
return parent::getTable($type, $prefix, $config);
}
/**
* Get the id of an item by alias
* @param string $alias Item alias
*
* @return mixed
*
* @deprecated No replacement
*/
public function getItemIdByAlias($alias)
{
$table = $this->getTable();
$properties = $table->getProperties();
$result = null;
$aliasKey = null;
if (method_exists($this, 'getAliasFieldNameByView'))
{
$aliasKey = $this->getAliasFieldNameByView('employee');
}
if (key_exists('alias', $properties))
{
$table->load(array('alias' => $alias));
$result = $table->id;
}
elseif (isset($aliasKey) && key_exists($aliasKey, $properties))
{
$table->load(array($aliasKey => $alias));
$result = $table->id;
}
return $result;
}
/**
* Method to check in an item.
*
* @param integer $id The id of the row to check out.
*
* @return boolean True on success, false on failure.
*
* @since 1.0.0
*/
public function checkin($id = null)
{
// Get the id.
$id = (!empty($id)) ? $id : (int) $this->getState('employee.id');
if ($id)
{
// Initialise the table
$table = $this->getTable();
// Attempt to check the row in.
if (method_exists($table, 'checkin'))
{
if (!$table->checkin($id))
{
return false;
}
}
}
return true;
}
/**
* Method to check out an item for editing.
*
* @param integer $id The id of the row to check out.
*
* @return boolean True on success, false on failure.
*
* @since 1.0.0
*/
public function checkout($id = null)
{
// Get the user id.
$id = (!empty($id)) ? $id : (int) $this->getState('employee.id');
if ($id)
{
// Initialise the table
$table = $this->getTable();
// Get the current user object.
$user = Factory::getApplication()->getIdentity();
// Attempt to check the row out.
if (method_exists($table, 'checkout'))
{
if (!$table->checkout($user->get('id'), $id))
{
return false;
}
}
}
return true;
}
/**
* Publish the element
*
* @param int $id Item id
* @param int $state Publish state
*
* @return boolean
*/
public function publish($id, $state)
{
$table = $this->getTable();
$table->load($id);
$table->state = $state;
return $table->store();
}
/**
* Method to delete an item
*
* @param int $id Element id
*
* @return bool
*/
public function delete($id)
{
$table = $this->getTable();
return $table->delete($id);
}
public function getAliasFieldNameByView($view)
{
switch ($view)
{
case 'employee':
case 'employeeform':
return 'alias';
break;
}
}
}