SVSP
TECHNOLOGIES

Документация

CrmUserInfo

Общее описание

Класс CrmUserInfo представляет собой сущность контактной информации о пользователе в системе Ultralight CRM. Эта сущность используется для хранения дополнительной контактной информации, которая не входит в основную запись пользователя.

Основная информация

Назначение

Сущность CrmUserInfo предназначена для:

Методы

user()

Возвращает связь принадлежности пользователю (обратная связь один-ко-многим).

Возвращает: Объект связи BelongsTo

Пример использования:

// Получение пользователя, которому принадлежит контактная информация
$user = $userInfo->user;

// Получение всех записей контактной информации пользователя
$userInfoRecords = CrmUserInfo::where('user_id', $userId)->get();

Наследуемые методы от Entity

Класс наследует все методы от базового класса Entity:

initialize(int $id, int $typeId, bool $dnCheckRights = false)

Инициализирует экземпляр сущности с указанными параметрами.

Параметры:

getField(string $name)

Получает значение поля сущности по его имени.

Параметры:

Возвращает: Значение поля

setField(string $name, $value)

Устанавливает значение поля сущности.

Параметры:

delete()

Удаляет экземпляр сущности из базы данных.

save()

Сохраняет изменения в экземпляре сущности.

Поля сущности

Сущность CrmUserInfo содержит следующие поля:

Основные поля

Защищенные свойства

Особенности реализации

  1. Связь один-ко-многим — один пользователь может иметь множество записей контактной информации
  2. Гибкая структура — позволяет хранить различные типы данных в одной таблице
  3. Типизация данных — поле type определяет тип контактной информации
  4. Автоматическое создание — таблица и сущность создаются автоматически при установке системы

Механизм работы

Структура хранения

Контактная информация хранится в денормализованной форме, что позволяет:

Типы контактной информации

Система поддерживает следующие типы:

ТипОписаниеИспользуется для
PHONEТелефонный номерДополнительные телефоны
EMAILАдрес электронной почтыДополнительные email

Примечание: При необходимости система может быть расширена для поддержки других типов (например, ADDRESS, SKYPE и т.д.).

Принцип работы

  1. При создании записи указывается:
    • user_id — идентификатор пользователя
    • type — тип контактной информации
    • info — значение контактной информации
  2. При получении данных можно фильтровать по user_id и type
  3. При удалении пользователя автоматически удаляются все связанные записи контактной информации

Практическое использование

Создание записи контактной информации

// Создание записи для дополнительного телефона
$phoneRecord = EntityTable::createEntity(4, [
'user_id' => 1,
'type' => 'PHONE',
'info' => '+79991234567'
]);

// Создание записи для дополнительного email
$emailRecord = EntityTable::createEntity(4, [
'user_id' => 1,
'type' => 'EMAIL',
'info' => 'user@gmail.com'
]);

Получение контактной информации

// Получение всех записей контактной информации пользователя
$allContactInfo = EntityTable::getEntities([
'ENTITY_TYPE_ID' => 4,
'FILTER' => [['user_id', '=', 1]]
]);

// Получение только телефонов пользователя
$phones = EntityTable::getEntities([
'ENTITY_TYPE_ID' => 4,
'FILTER' => [
['user_id', '=', 1],
['type', '=', 'PHONE']
]
]);

// Получение только email пользователя
$emails = EntityTable::getEntities([
'ENTITY_TYPE_ID' => 4,
'FILTER' => [
['user_id', '=', 1],
['type', '=', 'EMAIL']
]
]);

Управление контактной информацией через CrmUser

// Инициализация пользователя
$user = new CrmUser();
$user->initialize(1, 1);

// Перезапись всех телефонов
$user->rewritePhones([
'+79991234567',
'+79887654321'
]);

// Перезапись всех email
$user->rewriteEmails([
'user@company.com',
'user@gmail.com'
]);

Фильтрация и поиск

// Поиск пользователя по дополнительному телефону
$userInfo = EntityTable::getEntities([
'ENTITY_TYPE_ID' => 4,
'FILTER' => [
['type', '=', 'PHONE'],
['info', '=', '+79991234567']
]
]);

if (!empty($userInfo)) {
$userId = $userInfo[0]->getField('user_id');
// Получение пользователя
$user = EntityTable::getEntities([
'ENTITY_TYPE_ID' => 1,
'FILTER' => [['id', '=', $userId]]
])[0];
}

Безопасность

Права доступа

Валидация данных

Защита данных

Рекомендации по использованию

  1. Используйте для дополнительных данных — основная контактная информация хранится в CrmUser
  2. Соблюдайте единообразие — используйте единые форматы для телефонных номеров и email
  3. Регулярно очищайте — удаляйте устаревшую контактную информацию
  4. Документируйте — ведите реестр типов контактной информации
  5. Расширяйте при необходимости — добавляйте новые типы при появлении новых требований

Примеры сценариев

Сценарий 1: Мультиканальная связь

// Пользователь имеет несколько способов связи
$user->rewritePhones([
'+79991234567', // Основной
'+79887654321', // Рабочий
'+79776543210' // Домашний
]);

$user->rewriteEmails([
'user@company.com', // Рабочий
'user@gmail.com', // Личный
'user@yahoo.com' // Резервный
]);

Сценарий 2: Поиск по контактным данным

// Поиск пользователя по дополнительному email
function findUserByAdditionalEmail($email) {
$userInfo = EntityTable::getEntities([
'ENTITY_TYPE_ID' => 4,
'FILTER' => [
['type', '=', 'EMAIL'],
['info', '=', $email]
]
]);

if (!empty($userInfo)) {
$userId = $userInfo[0]->getField('user_id');
return EntityTable::getEntities([
'ENTITY_TYPE_ID' => 1,
'FILTER' => [['id', '=', $userId]]
])[0];
}

return null;
}

Заключение

Сущность CrmUserInfo является важным компонентом системы управления контактной информацией в Ultralight CRM. Она обеспечивает гибкую и масштабируемую модель хранения дополнительных данных о пользователях, позволяя эффективно управлять множественными контактными способами. Благодаря своей простой структуре и интеграции с основной сущностью пользователя, сущность эффективно выполняет свою функцию хранения и предоставления контактной информации.

SVSP
TECHNOLOGIES
Политика конфиденциальности
Политика конфиденциальности