* @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; } } }