Introduce per-tenant override for helpdesk BC connection config. New table helpdesk_tenant_settings stores tenant-specific credentials with encrypted secrets (AES-256-GCM). EffectiveHelpdeskSettingsService resolves global vs tenant config per request. Settings UI extended with tenant override tab, toggle, and dual editing mode. All runtime consumers (OData, SOAP, OAuth) read through the new resolver. Token cache flushed on any config change. Default behavior unchanged — tenants use global config until override explicitly enabled. Also includes risk radar UI refinements: Stripe-style card redesign with accent borders and score pills, removal of redundant KPI tiles and search, and filtering of zero-score entries. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
89 lines
4.4 KiB
PHP
89 lines
4.4 KiB
PHP
<?php
|
|
|
|
namespace MintyPHP\Module\Helpdesk;
|
|
|
|
use MintyPHP\App\AppContainer;
|
|
use MintyPHP\App\Container\ContainerRegistrar;
|
|
use MintyPHP\Http\SessionStoreInterface;
|
|
use MintyPHP\Module\Helpdesk\Service\BcODataGateway;
|
|
use MintyPHP\Module\Helpdesk\Service\BcSoapGateway;
|
|
use MintyPHP\Module\Helpdesk\Service\DebitorDetailService;
|
|
use MintyPHP\Module\Helpdesk\Service\DebitorSearchService;
|
|
use MintyPHP\Module\Helpdesk\Service\EffectiveHelpdeskSettingsService;
|
|
use MintyPHP\Module\Helpdesk\Service\HelpdeskOAuthTokenService;
|
|
use MintyPHP\Module\Helpdesk\Service\HelpdeskSettingsGateway;
|
|
use MintyPHP\Module\Helpdesk\Service\HelpdeskTenantSettingsGateway;
|
|
use MintyPHP\Module\Helpdesk\Service\HelpdeskTenantSettingsRepository;
|
|
use MintyPHP\Module\Helpdesk\Service\HelpdeskTokenRepository;
|
|
use MintyPHP\Module\Helpdesk\Service\SystemRecommendationEngine;
|
|
use MintyPHP\Module\Helpdesk\Service\TicketCommunicationService;
|
|
use MintyPHP\Service\Access\PermissionService;
|
|
use MintyPHP\Service\Settings\SettingServicesFactory;
|
|
use MintyPHP\Service\Settings\SettingsMetadataGateway;
|
|
|
|
final class HelpdeskContainerRegistrar implements ContainerRegistrar
|
|
{
|
|
public function register(AppContainer $container): void
|
|
{
|
|
$container->set(HelpdeskAuthorizationPolicy::class, static fn (AppContainer $c): HelpdeskAuthorizationPolicy => new HelpdeskAuthorizationPolicy(
|
|
$c->get(PermissionService::class)
|
|
));
|
|
|
|
$container->set(HelpdeskSettingsGateway::class, static fn (AppContainer $c): HelpdeskSettingsGateway => new HelpdeskSettingsGateway(
|
|
$c->get(SettingsMetadataGateway::class),
|
|
$c->get(SettingServicesFactory::class)->createSettingsCryptoGateway()
|
|
));
|
|
|
|
$container->set(HelpdeskTenantSettingsRepository::class, static fn (): HelpdeskTenantSettingsRepository => new HelpdeskTenantSettingsRepository());
|
|
|
|
$container->set(HelpdeskTenantSettingsGateway::class, static fn (AppContainer $c): HelpdeskTenantSettingsGateway => new HelpdeskTenantSettingsGateway(
|
|
$c->get(HelpdeskTenantSettingsRepository::class),
|
|
$c->get(SettingServicesFactory::class)->createSettingsCryptoGateway()
|
|
));
|
|
|
|
$container->set(EffectiveHelpdeskSettingsService::class, static fn (AppContainer $c): EffectiveHelpdeskSettingsService => new EffectiveHelpdeskSettingsService(
|
|
$c->get(HelpdeskSettingsGateway::class),
|
|
$c->get(HelpdeskTenantSettingsGateway::class),
|
|
$c->get(SessionStoreInterface::class)
|
|
));
|
|
|
|
$container->set(BcODataGateway::class, static fn (AppContainer $c): BcODataGateway => new BcODataGateway(
|
|
$c->get(EffectiveHelpdeskSettingsService::class),
|
|
$c->get(HelpdeskOAuthTokenService::class),
|
|
$c->get(SessionStoreInterface::class)
|
|
));
|
|
|
|
$container->set(BcSoapGateway::class, static fn (AppContainer $c): BcSoapGateway => new BcSoapGateway(
|
|
$c->get(EffectiveHelpdeskSettingsService::class),
|
|
$c->get(HelpdeskOAuthTokenService::class),
|
|
$c->get(SessionStoreInterface::class)
|
|
));
|
|
|
|
$container->set(HelpdeskTokenRepository::class, static fn (AppContainer $c): HelpdeskTokenRepository => new HelpdeskTokenRepository(
|
|
$c->get(SettingServicesFactory::class)->createSettingsCryptoGateway()
|
|
));
|
|
|
|
$container->set(HelpdeskOAuthTokenService::class, static fn (AppContainer $c): HelpdeskOAuthTokenService => new HelpdeskOAuthTokenService(
|
|
$c->get(EffectiveHelpdeskSettingsService::class),
|
|
$c->get(HelpdeskTokenRepository::class)
|
|
));
|
|
|
|
$container->set(DebitorSearchService::class, static fn (AppContainer $c): DebitorSearchService => new DebitorSearchService(
|
|
$c->get(BcODataGateway::class),
|
|
$c->get(EffectiveHelpdeskSettingsService::class)
|
|
));
|
|
|
|
$container->set(DebitorDetailService::class, static fn (AppContainer $c): DebitorDetailService => new DebitorDetailService(
|
|
$c->get(BcODataGateway::class),
|
|
$c->get(EffectiveHelpdeskSettingsService::class)
|
|
));
|
|
|
|
$container->set(TicketCommunicationService::class, static fn (AppContainer $c): TicketCommunicationService => new TicketCommunicationService(
|
|
$c->get(BcSoapGateway::class),
|
|
$c->get(BcODataGateway::class)
|
|
));
|
|
|
|
$container->set(SystemRecommendationEngine::class, static fn (): SystemRecommendationEngine => new SystemRecommendationEngine());
|
|
}
|
|
}
|