76 lines
2.4 KiB
PHP
76 lines
2.4 KiB
PHP
<?php
|
||
|
||
namespace App\Filters;
|
||
|
||
use CodeIgniter\Filters\FilterInterface;
|
||
use CodeIgniter\HTTP\RequestInterface;
|
||
use CodeIgniter\HTTP\ResponseInterface;
|
||
use App\Services\ModuleSubscriptionService;
|
||
|
||
/**
|
||
* Фильтр проверки подписки на модуль
|
||
*
|
||
* Проверяет, есть ли у организации активная подписка на указанный модуль.
|
||
* Если подписки нет - перенаправляет на dashboard с сообщением об ошибке.
|
||
*/
|
||
class ModuleSubscriptionFilter implements FilterInterface
|
||
{
|
||
/**
|
||
* Проверка подписки перед выполнением запроса
|
||
*/
|
||
public function before(RequestInterface $request, $arguments = null)
|
||
{
|
||
if (!$arguments) {
|
||
return;
|
||
}
|
||
|
||
$moduleCode = $arguments[0] ?? null;
|
||
if (!$moduleCode) {
|
||
return;
|
||
}
|
||
|
||
$session = session();
|
||
$orgId = $session->get('active_org_id');
|
||
|
||
// Если организация не выбрана - пропускаем (другие фильтры обработают)
|
||
if (!$orgId) {
|
||
return;
|
||
}
|
||
|
||
// Базовый модуль всегда доступен
|
||
if ($moduleCode === 'base') {
|
||
return;
|
||
}
|
||
|
||
$subscriptionService = new ModuleSubscriptionService();
|
||
|
||
// Проверяем доступность модуля
|
||
if (!$subscriptionService->isModuleAvailable($moduleCode, $orgId)) {
|
||
$session->setFlashdata('error', 'Модуль "' . $this->getModuleName($moduleCode) . '" не активен для вашей организации');
|
||
return redirect()->to('/');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Получение читаемого имени модуля
|
||
*/
|
||
protected function getModuleName(string $moduleCode): string
|
||
{
|
||
$names = [
|
||
'crm' => 'CRM',
|
||
'booking' => 'Бронирования',
|
||
'tasks' => 'Задачи',
|
||
'proof' => 'Proof',
|
||
];
|
||
return $names[$moduleCode] ?? $moduleCode;
|
||
}
|
||
|
||
/**
|
||
* Обработка ответа после выполнения запроса
|
||
*/
|
||
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
|
||
{
|
||
// Ничего не делаем после запроса
|
||
}
|
||
}
|