<?php
namespace App\Security\Voter;
use App\Entity\AccountingFirm;
use App\Services\AccountingFirmResolver;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
class ClientWebsiteModuleVoter extends Voter
{
protected $accountingFirm;
protected $templateBase;
public function __construct(
private AccountingFirmResolver $accountingFirmResolver
) {
// Utilisation du resolver centralisé - évite la duplication des requêtes
$this->accountingFirm = $this->accountingFirmResolver->resolve();
}
protected function supports(string $attribute, $subject): bool
{
return in_array($attribute, [
'WEBSITE_NEWSLETTER',
'WEBSITE_ANNOUNCEMENT',
'WEBSITE_PRIMARY_NEWS',
'WEBSITE_EBOOK',
'WEBSITE_USEFUL_LINK',
'WEBSITE_NEWS',
'WEBSITE_TOOLS',
'WEBSITE_ACCOUNTING_NEWS',
'WEBSITE_PARTNERS',
'WEBSITE_ACTU_RS',
'WEBSITE_SIMULATEUR',
'WEBSITE_CONTACT',
'WEBSITE_CONTACT_CUSTOM',
'WEBSITE_CONTACT_ETRE_RAPPELE',
'WEBSITE_NEW_NEWSLETTER',
'WEBSITE_NEW_COMPANY',
'WEBSITE_INVOICES',
'WEBSITE_ANIMATION',
'WEBSITE_DIAPORAMA',
'WEBSITE_MODULE_VIDEO',
]);
}
protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool
{
if (!$this->accountingFirm instanceof AccountingFirm) {
return false;
}
$modules = $this->accountingFirm->getParameters()->getModules();
/*if ($this->accountingFirm->getActuv2Widgeturl() && $this->accountingFirm->getActuv2Token()) {
return true;
} else {
return false;
}*/
switch ($attribute) {
case 'WEBSITE_NEWSLETTER':
return array_key_exists('Newsletter', $modules) && true === $modules['Newsletter'];
case 'WEBSITE_PRIMARY_NEWS':
return array_key_exists('Actualite_a_la_une', $modules) && true === $modules['Actualite_a_la_une'];
case 'WEBSITE_NEWS':
return array_key_exists('Actualites', $modules) && true === $modules['Actualites'];
case 'WEBSITE_ANNOUNCEMENT':
return array_key_exists('Annonces', $modules) && true === $modules['Annonces'];
case 'WEBSITE_USEFUL_LINK':
return array_key_exists('Liens_utils', $modules) && true === $modules['Liens_utils'];
case 'WEBSITE_EBOOK':
return array_key_exists('Livre_blanc', $modules) && true === $modules['Livre_blanc'];
case 'WEBSITE_TOOLS':
return array_key_exists('Tools', $modules) && true === $modules['Tools'];
case 'WEBSITE_ACCOUNTING_NEWS':
return array_key_exists('Actualite_du_mois', $modules) && true === $modules['Actualite_du_mois'];
case 'WEBSITE_PARTNERS':
return array_key_exists('Partners', $modules) && true === $modules['Partners'];
case 'WEBSITE_ACTU_RS':
return array_key_exists('Actu_rs', $modules) && true === $modules['Actu_rs'];
case 'WEBSITE_SIMULATEUR':
return array_key_exists('Simulateur', $modules) && true === $modules['Simulateur'];
case 'WEBSITE_CONTACT':
return array_key_exists('Contact', $modules) && true === $modules['Contact'];
case 'WEBSITE_CONTACT_PROFESSION':
return array_key_exists('Contact_profession', $modules) && true === $modules['Contact_profession'];
case 'WEBSITE_CONTACT_ETRE_RAPPELE':
return array_key_exists('Contact_etreRappele', $modules) && true === $modules['Contact_etreRappele'];
case 'WEBSITE_CONTACT_CUSTOM':
return array_key_exists('Contact_custom', $modules) && true === $modules['Contact_custom'];
case 'WEBSITE_NEW_NEWSLETTER':
return array_key_exists('Inscription_newsletter', $modules) && true === $modules['Inscription_newsletter'];
case 'WEBSITE_NEW_COMPANY':
return array_key_exists('Creation_entreprise', $modules) && true === $modules['Creation_entreprise'];
case 'WEBSITE_INVOICES':
return $this->accountingFirm->getIdsellsy() !== null ? true : false;
case 'WEBSITE_ANIMATION':
return array_key_exists('Animation', $modules) && true === $modules['Animation'];
case 'WEBSITE_DIAPORAMA':
return array_key_exists('Diaporama', $modules) && true === $modules['Diaporama'];
case 'WEBSITE_MODULE_VIDEO':
return array_key_exists('Module_video', $modules) && true === $modules['Module_video'];
}
return false;
}
}