add CRM module start

This commit is contained in:
root
2026-01-15 07:09:36 +03:00
parent b14f293a45
commit b810a17649
40 changed files with 3807 additions and 14 deletions
+7 -1
View File
@@ -87,6 +87,7 @@ class InvitationService
// Генерируем токен приглашения
$inviteToken = $this->generateToken();
$inviteExpiresAt = date('Y-m-d H:i:s', strtotime('+7 days'));
// Создаем запись приглашения
$invitationData = [
@@ -95,6 +96,7 @@ class InvitationService
'role' => $role,
'status' => OrganizationUserModel::STATUS_PENDING,
'invite_token' => $inviteToken,
'invite_expires_at' => $inviteExpiresAt,
'invited_by' => $invitedBy,
];
@@ -238,8 +240,10 @@ class InvitationService
// Генерируем новый токен
$newToken = $this->generateToken();
$newExpiresAt = date('Y-m-d H:i:s', strtotime('+7 days'));
$this->orgUserModel->update($invitationId, [
'invite_token' => $newToken,
'invite_expires_at' => $newExpiresAt,
'invited_at' => date('Y-m-d H:i:s'),
]);
@@ -290,6 +294,7 @@ class InvitationService
protected function createShadowUser(string $email): int
{
$token = bin2hex(random_bytes(32));
$tokenExpiresAt = date('Y-m-d H:i:s', strtotime('+24 hours'));
return $this->userModel->insert([
'email' => $email,
@@ -297,6 +302,7 @@ class InvitationService
'password' => null, // Без пароля до регистрации
'email_verified' => 0,
'verification_token' => $token,
'token_expires_at' => $tokenExpiresAt,
'created_at' => date('Y-m-d H:i:s'),
]);
}
@@ -367,7 +373,7 @@ class InvitationService
</p>
<p>Если кнопка не работает, скопируйте ссылку и откройте в браузере:</p>
<p class="invite-link">{$inviteLink}</p>
<p>Ссылка действительна 48 часов.</p>
<p>Ссылка действительна 7 дней.</p>
</div>
<div class="footer">
<p>© Бизнес.Точка</p>