# Obtenir le nom d'utilisateur de la session en cours via une méthode alternative $userName = $env:USERNAME # Vérifier si le nom d'utilisateur a été correctement récupéré if (-not [string]::IsNullOrWhiteSpace($userName)) { # Construire le chemin complet en utilisant le nom d'utilisateur $logScamPath = "C:\Users\$userName\Desktop\LOG et SCAM\" # Définir une nouvelle variable d'environnement avec ce chemin [Environment]::SetEnvironmentVariable("LOG_SCAM_PATH", $logScamPath, "User") # Afficher la variable d'environnement (optionnel, pour vérification) Write-Host "La variable d'environnement LOG_SCAM_PATH est définie sur : $logScamPath" } else { Write-Host "Erreur : Impossible de récupérer le nom d'utilisateur." } # Définir le chemin d'accès relatif des fichiers CSV $indexcsv = "$logScamPath\index.csv" $auteurcsv = "C:\Users\$username\Desktop\LOG et SCAM\Auteur\auteur.csv" $diffusioncsv = "$logScamPath\diffusion.csv" $diffusionps1 = ".\diffusion et certificat.ps1" $diffusioncsvps1 = "$logScamPath\Diffusion_csv.ps1" # Affiche le chemin d'accès actuel du script Write-Host "Chemin d'accès du script : $PSScriptRoot" # Construit les chemins complets des fichiers CSV $indexcsvFullPath = "$logScamPath\index.csv" $auteurcsvFullPath = "C:\Users\$username\Desktop\LOG et SCAM\Auteur\auteur.csv" $diffusioncsvFullPath = "$logScamPath\diffusion.csv" $diffusionps1FullPath = Join-Path -Path $PSScriptRoot -ChildPath $diffusionps1 $diffusioncsvps1FullPath = "$logScamPath\Diffusion_csv.ps1" Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing # Lecture des données à partir du fichier .csv $data = Import-Csv -Path "$diffusioncsvFullPath" -Delimiter ";" -Encoding UTF8 $dataIndex = @{} foreach ($item in $data) { $clipName = $item.ClipName.ToLower() if ($dataIndex.ContainsKey($clipName)) { [void] $dataIndex[$clipName].Add($item) } else { $dataIndex[$clipName] = [System.Collections.ArrayList]::new(@($item)) } } $hashTable = @{} foreach ($item in $data) { $hashTable[$item.ClipName.ToLower()] = $item } # Fonction pour afficher les détails du clip sélectionné dans l'autre ListBox et mettre à jour le label function Show-Details { $selectedItem = $listBox.SelectedItem if ($selectedItem) { $clipName = $selectedItem.Split("-")[-1].Trim() $clipDetails = $data | Where-Object {$_.ClipName -eq $clipName} $detailsListBox.Items.Clear() foreach ($detail in $clipDetails) { [void] $detailsListBox.Items.Add("$($detail.Date) - $($detail.Time)") } # Chercher toutes les autres occurrences du clip sélectionné en utilisant l'index $otherOccurrences = $dataIndex[$clipName] | Where-Object {$_.Date -ne $clipDetails[0].Date} $uniqueOtherOccurrences = $otherOccurrences | Select-Object -Unique # Parcourir la collection $uniqueOtherOccurrences et ajouter les éléments uniques à la ListBox 2 foreach ($occurrence in $uniqueOtherOccurrences) { $isDuplicate = $false foreach ($item in $detailsListBox.Items) { if ($item -eq "$($occurrence.Date) - $($occurrence.Time)") { $isDuplicate = $true break } } if (!$isDuplicate) { [void] $detailsListBox.Items.Add("$($occurrence.Date) - $($occurrence.Time)") } } # Mettre à jour le label avec le nombre total de rediffusions si le clip a des rediffusions if ($otherOccurrences.Count -gt 0) { $rediffusions = $otherOccurrences.Count $totalDiffusionsLabel.Text = "Nombre total de rediffusions : $($rediffusions)" } else { $totalDiffusionsLabel.Text = "Nombre total de sujet contenant * $selectedItem * : $($clipDetails.Count)" } # Stocker les informations sur le clip sélectionné dans une variable globale $selectedClip $global:selectedClip = @{ "ClipName" = $clipName "ClipDetails" = $clipDetails } } } #---------------------- # Création de la fenêtre principale $form = New-Object System.Windows.Forms.Form $form.Text = "Recherche de film" $form.ClientSize = New-Object System.Drawing.Size(400, 400) $form.StartPosition = "CenterScreen" # Ajout de la TextBox pour la recherche $textBox = New-Object System.Windows.Forms.TextBox $textBox.Location = New-Object System.Drawing.Point(10, 10) $textBox.Size = New-Object System.Drawing.Size(200, 25) $textBox.Text = $global:myVariable $form.Controls.Add($textBox) #Ajout du bouton pour la recherche $searchButton = New-Object System.Windows.Forms.Button $searchButton.Location = New-Object System.Drawing.Point(220, 10) $searchButton.Size = New-Object System.Drawing.Size(75, 25) $searchButton.Text = "Rechercher" $searchButton.Add_Click({SearchButton_Clicked}) $form.Controls.Add($searchButton) # Fonction appelée lorsqu'on clique sur le bouton Rechercher function SearchButton_Clicked { if ([string]::IsNullOrEmpty($textBox.Text)) { [System.Windows.Forms.MessageBox]::Show("Veuillez entrer un terme de recherche.") return } $search = $textBox.Text.ToLower() $results = $hashTable.Values | Where-Object {$_.ClipName.ToLower().Contains($search)} if ($results) { $totalDiffusionsLabel.Text = "Nombre total de sujet contenant le sujet * $search * : $($results.Count)" $listBox.Items.Clear() foreach ($result in $results | Group-Object ClipName) { [void] $listBox.Items.Add("$($result.Group[0].Date) - $($result.Group[0].Time) - $($result.Group[0].ClipName)") } } else { $totalDiffusionsLabel.Text = "Nombre total de diffusions : 0" $listBox.Items.Clear() } } function CertificatButton_Clicked { # Vérifier si un clip est sélectionné dans la ListBox if ($listBox.SelectedItem -eq $null) { [System.Windows.Forms.MessageBox]::Show("Veuillez sélectionner un clip à partir de la liste.") return } # Vérifier si les informations sur le clip sélectionné ont été stockées dans la variable globale $selectedClip if ($global:selectedClip -eq $null) { [System.Windows.Forms.MessageBox]::Show("Veuillez sélectionner un clip à partir de la liste.") return } # Récupérer les informations sur le clip sélectionné à partir de la variable globale $selectedClip $clipName = $global:selectedClip.ClipName $clipDetails = $global:selectedClip.ClipDetails # Récupérer les informations sur l'œuvre et la date de diffusion $oeuvre = $clipName # Remplacez par le titre de l'œuvre # Récupérer les informations sur le réalisateur et la production à partir du fichier CSV $csvfilepath = "C:\Users\$username\Desktop\LOG et SCAM\Auteur\auteur.csv" # Charger les données du fichier CSV $csvData = Import-Csv -Path $csvFilePath -Delimiter ';' -Encoding UTF8 # Rechercher les informations correspondant au titre de l'œuvre foreach ($row in $csvData) { if ($row.TITREFILM -eq $oeuvre) { $realisateur = $row.REALISATEUR $production = $row.PRODUCTION break } } # Vérifier si le clip a été diffusé au cours des trois dernières années $latestDate = Get-Date $oldestDate = $latestDate.AddYears(-3) $hasRecentDiffusion = $false foreach ($detail in $clipDetails) { $diffusionDate = [DateTime]::ParseExact($detail.Date, "dd/MM/yyyy", $null) if ($diffusionDate -ge $oldestDate -and $diffusionDate -le $latestDate) { $hasRecentDiffusion = $true break } } # Si le clip a été diffusé récemment, créer un certificat de diffusion if ($hasRecentDiffusion) { $outputPath = "$PSScriptRoot\Certificats\$clipName-certificat.txt" $outputContent = "Certificat de diffusion pour l'œuvre $oeuvre, réalisé par $realisateur, produit par $production, a été diffusé sur télé bocal le : $dateDiffusion`n`n" $outputContent += "Dates de diffusion :`n" foreach ($detail in $clipDetails) { $outputContent += "$($detail.Date) à $($detail.Time)`n" } $outputContent += "`nCe clip a été diffusé au cours des trois dernières années.`n" $outputContent += "`nFait le $($latestDate.ToShortDateString())`n" # Écrire le contenu dans le fichier de sortie Out-File -FilePath $outputPath -Encoding UTF8 -InputObject $outputContent # Afficher un message de succès à l'utilisateur [System.Windows.Forms.MessageBox]::Show("Le certificat de diffusion pour l'œuvre '$oeuvre', produit par '$production' a été créé avec succès. Le fichier a été enregistré sous le nom $($outputPath).") } else { [System.Windows.Forms.MessageBox]::Show("Le clip n'a pas été diffusé au cours des trois dernières années.") } } #Ajout de la ListBox pour afficher les résultats de recherche $listBox = New-Object System.Windows.Forms.ListBox $listBox.Location = New-Object System.Drawing.Point(10, 50) $listBox.Size = New-Object System.Drawing.Size(370, 200) $listBox.Add_SelectedIndexChanged({Show-Details}) $form.Controls.Add($listBox) #Ajout du Label pour le nombre total de diffusions $totalDiffusionsLabel = New-Object System.Windows.Forms.Label $totalDiffusionsLabel.Location = New-Object System.Drawing.Point(10, 260) $totalDiffusionsLabel.AutoSize = $true $form.Controls.Add($totalDiffusionsLabel) #Ajout de la ListBox pour afficher les détails du clip sélectionné $detailsListBox = New-Object System.Windows.Forms.ListBox $detailsListBox.Location = New-Object System.Drawing.Point(10, 290) $detailsListBox.Size = New-Object System.Drawing.Size(370, 100) $form.Controls.Add($detailsListBox) # Ajout du bouton pour générer le certificat de diffusion $certificatButton = New-Object System.Windows.Forms.Button $certificatButton.Location = New-Object System.Drawing.Point(310, 10) $certificatButton.Size = New-Object System.Drawing.Size(80, 25) $certificatButton.Text = "Certificat" $certificatButton.Add_Click({CertificatButton_Clicked}) $form.Controls.Add($certificatButton) $form.ShowDialog() > $null