Создание пользователя Joomla.
При создании компонента личного кабинета потребовалось создать связанного с абонентом пользователя Joomla.
Вот тут метод из соответствующей модели.
<?php
defined('_JEXEC') or die('Restricted access');
// кормим демонов Joomla 4
use \Joomla\CMS\{
MVC\Model\AdminModel as JModelAdmin,
Factory as JFactory,
Language\Text as JText,
User\User as JUser,
Component\ComponentHelper as JComponentHelper,
User\UserHelper as JUserHelper
};
// ........
class CabinetModelSubscriber extends JModelAdmin {
// ..........
/**
* Метод сохранения данных формы.
*
* @param array $data Данные формы.
*
* @return boolean True при успешном выполнении, False при ошибке.
*
* @since 1.6
*/
public function save($data)
{
// Создаем связанного юзаря
$user = new JUser((int)$data['user_id']);
// Если юзарь новый и пароль не заполнен
if($data['user_id']==0&&empty($data['password']))
{
// То выводим сообщение об ошибке
JFactory::getApplication()->enqueueMessage(
JText::_('COM_CABINET_SUBSCRIBERS_PASSWORD_ERROR'),
'error'
);
}
// Если юзарь просто новый то готовим его с лучком и селёдочкой
elseif($data['user_id']==0)
{ // Проверяем наличие совпадения username
if(JUserHelper::getUserId('user_'.$data['number']))
{
JFactory::getApplication()->enqueueMessage(
JText::_('COM_CABINET_SUBSCRIBERS_USERNAME_ERROR'),
'error'
);
}
else
{
// получим группу пользователей из параметров компонента
$usergroup = [
JComponentHelper::getParams('com_cabinet')->get('usergroup')
];
// Готовим массив параметров юзаря
$userData = [
'username' => 'user_'.((int)$data['number']),
'password' => $data['password'],
'password2' => $data['password'],
'block' => 0
];
}
}
elseif(!empty($data['password']))
{
// Если надо просто поменять пароль - то заполняем его
$userData = [
'password' => $data['password'],
'password2' => $data['password']
];
}
// Добавляем синхронизируемые параметры
$userData['email'] = $data['email'];
$userData['name'] = $data['name'];
// Связать данные.
if (!$user->bind($userData))
{
$this->setError($user->getError());
}
// Сохраняем юзаря
if(!$user->save())
{
// Вывод сообщения об ошибке, если не сохранилось.
JFactory::getApplication()->enqueueMessage(
JText::_('COM_CABINET_SUBSCRIBERS_CREATE_ERROR').
'<br />'.$user->getError(),
'error'
);
}
else
{
// привязываем пользователя к текущей записи
$data['user_id'] = $user->id;
// включить юзаря в группу
if(isset($usergroup))
{
JUserHelper::setUserGroups($user->id, $usergroup);
}
}
// Удаляем поле пароля
unset($data['password']);
// сохраняем текущюю запись
return parent::save($data);
}
}