<?php
namespace App\Controller;
use App\Repository\AlertRepository;
use App\Repository\ApiRepository;
use App\Repository\ArticleRepository;
use App\Repository\CountAccessRepository;
use App\Repository\CQrityRepository;
use App\Repository\ExportRepository;
use App\Repository\FeatureRepository;
use App\Repository\InvoiceRepository;
use App\Repository\IscanRepository;
use App\Repository\ReferentielRepository;
use App\Repository\SessionRepository;
use App\Repository\SubscriberRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class HomeController extends AbstractController
{
private SessionRepository $sessionRepository;
private SubscriberRepository $subscriberRepository;
private ArticleRepository $articleRepository;
private IscanRepository $iscanRepository;
private ReferentielRepository $referentielRepository;
private InvoiceRepository $invoiceRepository;
private ExportRepository $exportRepository;
private AlertRepository $alertRepository;
private CountAccessRepository $countAccessRepository;
private ApiRepository $apiRepository;
private FeatureRepository $featureRepository;
private CQrityRepository $cQrityRepository;
public function __construct (
SessionRepository $sessionRepository,
SubscriberRepository $subscriberRepository,
ArticleRepository $articleRepository,
IscanRepository $iscanRepository,
ReferentielRepository $referentielRepository,
InvoiceRepository $invoiceRepository,
ExportRepository $exportRepository,
AlertRepository $alertRepository,
CountAccessRepository $countAccessRepository,
ApiRepository $apiRepository,
FeatureRepository $featureRepository,
CQrityRepository $cQrityRepository
)
{
$this->sessionRepository = $sessionRepository;
$this->subscriberRepository = $subscriberRepository;
$this->iscanRepository = $iscanRepository;
$this->referentielRepository = $referentielRepository;
$this->invoiceRepository = $invoiceRepository;
$this->exportRepository = $exportRepository;
$this->articleRepository = $articleRepository;
$this->alertRepository = $alertRepository;
$this->countAccessRepository = $countAccessRepository;
$this->apiRepository = $apiRepository;
$this->featureRepository = $featureRepository;
$this->cQrityRepository = $cQrityRepository;
}
public function index(Request $request): Response
{
$user = $this->sessionRepository->getAllInfos($request->cookies->get("eZSESSID_cfnewsSession"));
$countAcces = $this->countAccessRepository->countAccess($user["abm_id"]);
$refPrd = $this->countAccessRepository->checkPrdRef($user["abm_id"]);
//dd($user,$countAcces, $refPrd);
$fact = $this->invoiceRepository->getLastInvoice($user['id_abonne']);
$sub = $this->subscriberRepository->getAllSub($user["id_abonne"]);
$article = $this->articleRepository->getArticles($user['mail']);
$iscan = $this->iscanRepository->getIscanKeyWords($user['mail']);
$refs = $this->referentielRepository->getReferentiel($user['id']);
$iscanArticles = $this->iscanRepository->getIscanArticles($user['mail']);
$refGlobal = [];
$api = $this->apiRepository->getUserApi($user['id_abonne']);
$userAllRequestApi = $this->apiRepository->getAllUserRequest($user['id_abonne']);
$requestTab = [];
foreach ($userAllRequestApi as $requestApi) {
$requestTab[] = $requestApi['request'];
}
$pregGrepOpe = preg_grep('/operation/i', $requestTab);
$pregGrepSociete = preg_grep('/societe/i', $requestTab);
$pregGrepActeur = preg_grep('/acteur/i', $requestTab);
$pregGrepVehicule = preg_grep('/vehicule/i', $requestTab);
$pregGrepMvt = preg_grep('/mouvement/i', $requestTab);
$pregGrepPeople = preg_grep('/people/i', $requestTab);
$pregGrepTab = [];
$pregGrepTab[] = [
'operation' => $pregGrepOpe,
'societe' => $pregGrepSociete,
'acteur' => $pregGrepActeur,
'vehicule' => $pregGrepVehicule,
'mouvement' => $pregGrepMvt,
'people' => $pregGrepPeople
];
foreach ($refs as $ref) {
$searchId = $ref['referentiel_search_id'];
if (!isset($refGlobal[$searchId])) {
$refGlobal[$searchId] = [
"id" => $searchId,
"title" => $ref['name'],
"searches" => []
];
}
$refGlobal[$searchId]["searches"][] = [
"param_key" => $ref['param_key'],
"param_value" => $ref['param_value'],
"param_value_name" => $ref['param_value_name']
];
}
$alertes_texte = [];
$exportLimit = $this->exportRepository->getExportCountLimit($user['id']);
$exportLimitGestion = $this->exportRepository->getExportCountLimitGestionnaire($user['id_abonne']);
$exportLimitAbo = $this->exportRepository->getLimitExportAbonne($user['id_abonne']);
if(!$user["is_gestionnaire_only"])
{
$rubs_user = explode('|',$user["alertes"]);
$i = 0;
if($user["alertes"])
{
foreach ($rubs_user as $alerte) {
$alertes_texte[$i] = $this->alertRepository->getRubs($alerte);
$i++;
}
}
}
$iScanArr = [];
foreach ($iscanArticles['getIscanArticles'] as $iscanArticle) {
$iScanArr[] = [
'iscanId' => $iscanArticle['id_keyword'],
'publication_date' => $iscanArticle['publication_date'],
'iscanStatus' => $iscanArticle['status'],
];
}
$current = "index";
$sub_count = count($sub);
$countLogs = $this->featureRepository->getCountFeature();
return $this->render('home/index.html.twig', [
'user' => $user,
'prd_acces' => $countAcces,
'ref_prd' => $refPrd,
'alertes_texte' => $alertes_texte,
'fact' => $fact,
'current' => $current,
'sub_count' => $sub_count,
'article' => $article,
'iscan' => $iscan,
'refGlobal' => $refGlobal,
'exportLimit' => $exportLimit,
'exportLimitGestion' => $exportLimitGestion,
'exportLimitAbo' => $exportLimitAbo,
'api' => $api,
'requestTab' => $requestTab,
'apiRequestTab' => $pregGrepTab,
'countLogs' => $countLogs
]);
}
public function getSessionUser(Request $request) {
$user = $this->sessionRepository->getAllInfos($request->cookies->get ("eZSESSID_cfnewsSession"));
$sessionTab = [];
if ($user['abm_statut'] == "Révolu") {
$file = "/home/cfikon/tmp/disconnect.txt";
$sessionFile = "sess_" . $request->cookies->get ("eZSESSID_cfnewsSession") . ";" . $user['mail'] ."\n";
file_put_contents($file, $sessionFile, FILE_APPEND | LOCK_EX);
return $sessionFile;
}
$currentPath = $request->server->get ('REQUEST_URI');
$isHomepage = ($currentPath === '/');
if(!$isHomepage) {
$cqrity = $this->cQrityRepository->getCQrityUser($user["mail"]);
$userMail = $user['mail'];
$count = 0;
$ip = $this->getUserIP();
if(empty($cqrity)) {
$count = 1;
$this->cQrityRepository->addPageCounted($userMail, $count, $ip, $_COOKIE["eZSESSID_cfnewsSession"]);
} else {
if($cqrity[0]['login'] == $userMail) {
$count = $cqrity[0]['count'] + 1;
$this->cQrityRepository->updateCounter($userMail, $count);
}
}
}
$sessionTab[] = $user["abm_statut"];
return json_encode($sessionTab);
}
private function getUserIP()
{
$request = new request();
if ($request->server->get ('HTTP_CLIENT_IP'))
$ipaddress = $request->server->get ('HTTP_CLIENT_IP');
else if($request->server->get ('HTTP_X_FORWARDED_FOR'))
$ipaddress = $request->server->get('HTTP_X_FORWARDED_FOR');
else if($request->server->get('HTTP_X_FORWARDED'))
$ipaddress = $request->server->get('HTTP_X_FORWARDED');
else if($request->server->get('HTTP_X_CLUSTER_CLIENT_IP'))
$ipaddress = $request->server->get('HTTP_X_CLUSTER_CLIENT_IP');
else if($request->server->get('HTTP_FORWARDED_FOR'))
$ipaddress = $request->server->get('HTTP_FORWARDED_FOR');
else if($request->server->get('HTTP_FORWARDED'))
$ipaddress = $request->server->get('HTTP_FORWARDED');
else if($request->server->get('REMOTE_ADDR'))
$ipaddress = $request->server->get('REMOTE_ADDR');
else
$ipaddress = 'UNKNOWN';
return $ipaddress;
}
}