Code : Tout sélectionner
#cs ----------------------------------------------------------------------------
AutoIt Version : 3.3.6.0
Auteur: ViviVang
Fonction du Script :
Permet l'envoi de message à un groupe, une équipe ou un agent préci.
#ce ----------------------------------------------------------------------------
#Region Include
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <AD.au3>
#include <Array.au3>
#include <GuiListView.au3>
#include <File.au3>
#include <GUIExtender.au3>
#include <GuiComboBox.au3>
#EndRegion
; Opt("GUIOnEventMode", 1)
; ############################################################################################
; ############################# Interface Graphique ##########################################
; ############################################################################################
Global $F_Interface = GUICreate("INTERFACE SUP", 548, 478, 365, 132)
_GUIExtender_Init($F_Interface, 1) ; Initialisation de la fenêtre
_GUIExtender_Section_Start($F_Interface, 0, 274) ; Démarrage de la Première section
Global $Btn_Retract = GUICtrlCreateButton(">>", 240, 30, 20, 20)
Global $Img_Banniere = GUICtrlCreatePic("Images\[color=#FF0000]*******[/color].jpg", 0, 0, 273, 81, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
Global $Lbl_Version = GUICtrlCreateLabel("Version :", 190, 5, 45, 20)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
Global $Lbl_NumVersion = GUICtrlCreateLabel("1.0", 240, 5, 20, 20)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
Global $Comb_Group = GUICtrlCreateCombo("", 8, 85, 200, 25, BitOR($GUI_SS_DEFAULT_COMBO,$CBS_SIMPLE))
Global $Img_Ajout = GUICtrlCreatePic("Images\Ajout.jpg", 213, 85, 25, 20)
Global $Img_Suppr = GUICtrlCreatePic("Images\Suppr.jpg", 240, 85, 25, 20)
Global $Lst_AgentSel = GUICtrlCreateListView("AGENTS SELECTIONNES", 8, 120, 257, 120)
_GUICtrlListView_SetColumnWidth($Lst_AgentSel, 0, 253)
GUICtrlCreateLabel("Objets", 8, 248, 49, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
Global $Inp_Objet = GUICtrlCreateInput("", 64, 248, 200, 20)
GUICtrlSetLimit(-1, 40) ; Limite à 40 caractères
;Global $Radio_Text = GUICtrlCreateRadio("Text", 24, 288, 113, 17)
;Global $Radio_Tableur = GUICtrlCreateRadio("Tableur", 152, 288, 113, 17)
Global $Edit_Message = GUICtrlCreateEdit("", 16, 320, 241, 113)
GUICtrlSetData(-1, "MESSAGE")
Global $Btn_Envoyer = GUICtrlCreateButton("Envoyer", 64, 448, 137, 25)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
_GUIExtender_Section_End($F_Interface) ; Fin de la Première section
_GUIExtender_Section_Start($F_Interface, 274, 274) ; Démarrage de la seconde section
_GUIExtender_Section_Action($F_Interface, 3) ; Action sur la section
GUICtrlCreateLabel("ESPACE ADMIN", 360, 10, 120, 20) ; Nom de la section
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
;######################################Groupe 1###########################################
Global $Lbl_Creer = GUICtrlCreateLabel("Créer", 280, 180, 45, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
Global $Inp_CreerRegr = GUICtrlCreateInput("", 330, 180, 200, 20)
Global $Lbl_OU = GUICtrlCreateLabel("OU", 410, 210, 20, 20)
Global $Lbl_Select = GUICtrlCreateLabel("Select", 280, 230, 45, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
Global $Comb_SelectRegr = GUICtrlCreateCombo("", 330, 230, 200, 20, BitOR($GUI_SS_DEFAULT_COMBO,$CBS_SIMPLE,$CBS_SORT))
Global $Btn_OK = GUICtrlCreateButton("OK", 405, 260, 25, 25)
Global $Btn_GSG = GUICtrlCreateButton("Attribuer un groupe de sécu", 340, 320, 150, 25)
Global $Grp_Creat_Regr = GUICtrlGroup($Lbl_Creer & "/" & $Inp_CreerRegr & "/" & $Lbl_OU & "/" & $Lbl_Select & "/" & $Comb_SelectRegr & "/" & $Btn_OK & "/" & $Btn_GSG )
;####################################EndGroupe 1##########################################
;######################################Groupe 2###########################################
Global $Btn_Retour = GUICtrlCreateButton("Retour", 390, 40, 60, 25)
Global $Comb_TousAgents = GUICtrlCreateCombo("", 280, 85, 200, 25, BitOR($GUI_SS_DEFAULT_COMBO,$CBS_SIMPLE,$CBS_SORT))
Global $Img_ADM_Ajout = GUICtrlCreatePic("Images\Ajout.jpg", 488, 85, 25, 20)
Global $Img_ADM_Suppr = GUICtrlCreatePic("Images\Suppr.jpg", 520, 85, 25, 20)
Global $Lst_AgentRegr = GUICtrlCreateListView("AGENTS DANS LE REGROUPEMENT", 282, 120, 257, 270)
_GUICtrlListView_SetColumnWidth($Lst_AgentRegr, 0, 253)
Global $Lbl_Affecter = GUICtrlCreateLabel("Affecter à", 280, 400, 70, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
Global $Inp_Affectation = GUICtrlCreateInput("", 360, 400, 180, 20)
Global $Btn_Valider = GUICtrlCreateButton("Valider", 350, 448, 137, 25)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
Global $Grp_Gest_Agent = GUICtrlGroup($Btn_Retour & "/" & $Comb_TousAgents & "/" & $Img_ADM_Ajout & "/" & $Img_ADM_Suppr & "/" & $Lst_AgentRegr & "/" & $Lbl_Affecter & "/" & $Inp_Affectation & "/" & $Btn_Valider)
;####################################EndGroupe 2###########################################
;######################################Groupe 3############################################
Global $Btn_Retour_GSG = GUICtrlCreateButton("Retour", 390, 40, 60, 25)
Global $Lbl_Affecter_GSG = GUICtrlCreateLabel("Affecter à", 280, 180, 70, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
Global $Inp_Affectation_GSG = GUICtrlCreateInput("", 360, 180, 180, 20)
Global $Lbl_Select_GSG = GUICtrlCreateLabel("Select", 280, 230, 45, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
Global $Comb_Select_GSG = GUICtrlCreateCombo("", 330, 230, 210, 20, BitOR($GUI_SS_DEFAULT_COMBO,$CBS_SIMPLE,$CBS_SORT))
Global $Btn_OK_GSG = GUICtrlCreateButton("OK", 405, 260, 25, 25)
Global $Grp_Gest_GSG = GUICtrlGroup($Btn_Retour_GSG & "/" & $Lbl_Affecter_GSG & "/" & $Inp_Affectation_GSG & "/" & $Lbl_Select_GSG & "/" & $Comb_Select_GSG & "/" & $Btn_OK_GSG)
;####################################EndGroupe 3###########################################
_GUIExtender_Section_End($F_Interface) ; Fin de la seconde section
_GUIExtender_Section_Extend($F_Interface, 2, False)
; ############################################################################################
; ############################# Fin Interface Graphique ######################################
; ############################################################################################
; ############################################################################################
; ############################# Mise à jour du logiciel ######################################
; ############################################################################################
Global $Path_Miseajour = "\\[color=#FF0000]***.***.***.***[/color]\Partage_Chat\MISE_A_JOUR\"
Local $aMiseajour = _RegroupementArrayEXE($Path_Miseajour)
IF $aMiseajour = "Vide" Then
Else
local $count = $aMiseajour[0]
for $i = 1 to $count
Local $NomEXE = StringTrimRight($aMiseajour[$i], 4)
$NomEXE = StringTrimLeft($NomEXE, 9)
Local $NumVersion = GUICtrlRead($Lbl_NumVersion, 1)
If _CompareVersions($NomEXE, $NumVersion) Then
Msgbox(64,"Info","Une mise à jour a été trouvée."&@CRLF&"Le programme va se fermer pour copier la nouvelle version.")
ShellExecute(@Scriptdir&"\Update.exe")
Exit
EndIf
next
EndIf
; ############################################################################################
; ############################# Fin mise à jour du logiciel ##################################
; ############################################################################################
Global $NomPC = @ComputerName
Global $UserCo = @UserName
Global $Path_Regroupement = "\\[color=#FF0000]***.***.***.***[/color]\partage_Chat\REGROUPEMENTS\"
Global $Path_Affecter = "\\[color=#FF0000]***.***.***.***[/color]\partage_Chat\AFFECTER\"
Global $Path_Message = "\\[color=#FF0000]***.***.***.***[/color]\partage_Chat\MESSAGES\"
Global $NomRegroupement = ""
Global $NomAffecter = ""
Global $FQDN_Groupe, $Groupe, $GroupeMember, $FichRegroupementxt, $i, $StockNomRegr, $aMember, $UtilisateurSelFQDN = ""
Global $objConnection = ObjCreate("ADODB.Connection")
$objConnection.ConnectionString = "Provider=ADsDSOObject"
$objConnection.Open ("Active Directory Provider")
Global $objRootDSE = ObjGet("LDAP://RootDSE")
Global $strDNSDomain = $objRootDSE.Get ("defaultNamingContext")
Global $strHostServer = $objRootDSE.Get ("dnsHostName")
Global $strConfiguration = $objRootDSE.Get ("ConfigurationNamingContext")
_AD_Open()
;Global $FQDN_User = _AD_SamAccountNameToFQDN($UserCo)
Global $aGroupeUser = _AD_GetUserGroups($UserCo)
Global $aUsers = _AD_GetObjectsInOU("OU=USERS,[color=#FF0000]OU=*****,OU=*****,DC=******,DC=****[/color]")
Global $aGroupe = _AD_GetObjectsInOU("OU=GROUPS,[color=#FF0000]OU=*****,OU=****,DC=****,DC=****[/color]")
local $count = $aGroupeUser[0]
for $i = 1 to $count
If StringInStr ($aGroupeUser[$i], "[color=#FF0000]******[/color]") Then ; Si contient un mot du groupe dont j'ai besoin
$FQDN_Groupe = $aGroupeUser[$i]
$Groupe = _AD_FQDNToDisplayname($aGroupeUser[$i])
EndIf
next
If $Groupe <> "[color=#FF0000]************[/color]" Then ; S'il s'agit du groupe Admin
GUICtrlSetState ($Btn_Retract, $GUI_HIDE)
EndIF
$FichAffecterTxt = $Path_Affecter&$UserCo&".txt"
If FileExists($FichAffecterTxt) Then
Local $oFichAffecterTxt = FileOpen($FichAffecterTxt,0) ; Ouvre le fichier
If $oFichAffecterTxt = -1 Then ; Si une erreur d'ouverture alors
MsgBox(0, "Erreur", "Le regroupement ne peut être ouvert.") ; Message d'erreur
Exit ; Quitte le logiciel suite à l'erreur
EndIf
While 1 ; Boucle de lecture
Local $lignetxt = FileReadLine($oFichAffecterTxt) ; Stock dans une variable la ligne en cours
If @error = -1 Then ; Si une erreur alors
ExitLoop ; On quitte la boucle
EndIF
If StringInStr($lignetxt, "[color=#FF0000]*****[/color]") Then
Local $GSG_Temp = StringTrimLeft($lignetxt, 18)
GUICtrlSetData($Comb_Group,$GSG_Temp&"|")
$lignetxtFQDN = StringReplace($lignetxt,$lignetxt,"CN="&$lignetxt&",OU=GROUPS,[color=#FF0000]OU=****,OU=****,DC=****,DC=****[/color]")
_ADGetGroupMembers($aMember, $lignetxtFQDN)
local $count = $aMember[0]
for $i = 1 to $count
$GroupeMember = $aMember[$i]
$GroupeMember = _AD_FQDNToSamAccountName($GroupeMember)
GUICtrlSetData($Comb_Group,$GroupeMember&"|")
next
Else
GUICtrlSetData($Comb_Group,$lignetxt&"|")
$FichRegroupementxt = $Path_Regroupement&$lignetxt&".txt"
Local $oFichRegroupementxt = FileOpen($FichRegroupementxt,0) ; Ouvre le fichier
If $oFichRegroupementxt = -1 Then ; Si une erreur d'ouverture alors
MsgBox(0, "Erreur", "Le regroupement ne peut être ouvert.") ; Message d'erreur
Exit ; Quitte le logiciel suite à l'erreur
EndIf
While 1 ; Boucle de lecture
Local $lignetxt2 = FileReadLine($oFichRegroupementxt) ; Stock dans une variable la ligne en cours
If @error = -1 Then ; Si une erreur alors
ExitLoop ; On quitte la boucle
EndIF
GUICtrlSetData($Comb_Group,$lignetxt2&"|")
Wend ; Fin de la boucle
FileClose($oFichRegroupementxt) ; On ferme le fichier
EndIF
Wend ; Fin de la boucle
FileClose($oFichAffecterTxt) ; On ferme le fichier
Else
Msgbox(64,"Info", "Ce compte ne possède aucun regroupement."& @CRLF & @CRLF &"Merci de contacter le service technique pour qu'un regroupement vous soit attribué")
EndIF
_AD_Close()
GUISetState(@SW_SHOW)
;////////////////////////////////////////////////////////////////////////////////////
;/////////////////////////////Boucle Principale//////////////////////////////////////
;////////////////////////////////////////////////////////////////////////////////////
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE ; Fermeture de la fenêtre
ExitLoop
Case $msg = $Btn_Retract
Switch _GUIExtender_Section_State($F_Interface, 2)
Case 0
;############### Ajout de tous les utilisateurs dans la liste Combo_TousAgents ##############
_AD_Open()
local $count = $aUsers[0]
For $i = 1 to $count
;local $DiplayName = _SamAccountNameToDisplayname($aUsers[$i])
GUICtrlSetData($Comb_TousAgents, $aUsers[$i]&" |")
next
GUICtrlSendMsg($Comb_TousAgents, $CB_SETMINVISIBLE, 50, 0)
;############################################################################################
;########################## Ajout des groupes dans la liste #############################
local $count = $aGroupe[0]
For $i = 1 to $count
If StringInStr ($aGroupe[$i], "[color=#FF0000]*****[/color]") Then ; Si contient un nom de groupe AD que je souhaite alors
Local $GSG_Temp = StringTrimLeft($aGroupe[$i], 18)
GUICtrlSetData($Comb_Select_GSG, $GSG_Temp &" |")
EndIf
next
GUICtrlSendMsg($Comb_Select_GSG, $CB_SETMINVISIBLE, 50, 0)
_AD_Close()
;############################################################################################
;############### Ajout des regroupement dans la Combo_SelectRegr #############################
Local $aRegroupement = _RegroupementArray($Path_Regroupement)
IF $aRegroupement = "Vide" Then
Else
local $count0 = $aRegroupement[0]
for $i = 1 to $count0
Local $Nomregr = StringTrimRight($aRegroupement[$i], 4)
GUICtrlSetData($Comb_SelectRegr,$Nomregr&"|")
next
EndIf
;#############################################################################################
_GUIExtender_Section_Extend($F_Interface, 2, True) ; Ouvre l'interface Admin
GUICtrlSetData($Btn_Retract, "<<") ; Change l'icone du bouton d'ouverture de l'interface
GUICtrlGroupSetState($Grp_Gest_Agent, $GUI_HIDE) ; Cache à l'ouverture le groupe d'ajout d'agent dans le regroupement
GUICtrlGroupSetState($Grp_Gest_GSG, $GUI_HIDE) ; Cache à l'ouverture le groupe d'ajout d'agent dans le regroupement
Case 1
_GUIExtender_Section_Extend($F_Interface, 2, False) ; Ferme l'interface Admin
GUICtrlSetData($Btn_Retract, ">>") ; Change l'icone du bouton d'ouverture de l'interface
_GUICtrlComboBox_ResetContent($Comb_TousAgents) ; Vide la liste qui contient tous les utilisateurs
_GUICtrlComboBox_ResetContent($Comb_Select_GSG) ; Vide la liste qui contient tous les GSG
_GUICtrlComboBox_ResetContent($Comb_SelectRegr) ; Vide la liste qui contient tous les regroupements
GUICtrlSetData($Inp_CreerRegr, "")
EndSwitch
Case $msg = $Img_Ajout
local $Read_Cmb_Group = GUICtrlRead($Comb_Group) ; Lit l'élément sélectionné dans la liste déroulante
GUICtrlCreateListViewItem($Read_Cmb_Group, $Lst_AgentSel) ; Ajout l'élément
Case $msg = $Img_Suppr
_GUICtrlListView_DeleteItemsSelected($Lst_AgentSel) ; Supprime l'élément sélectionné dans la liste
Case $msg = $Btn_Envoyer
Local $Emetteur = @UserName ; Stock l'utilisateur actuel utilisant l'interface
Local $Objet = GUICtrlRead ($Inp_Objet) ; Lit l'input de l'objet
Local $Message = GUICtrlRead ($Edit_Message) ; Lit le message
Local $aRegroupement = _RegroupementArray($Path_Regroupement) ; On lit les fichiers dans le dossier regroupement
Local $count2 = _GUICtrlListView_GetItemCount($Lst_AgentSel) ; On compte le nombre d'élément dans la liste
For $i = 0 to $count2-1
Local $UtilisateurSel = ControlListView("", "", $Lst_AgentSel, "GetText", $i) ; On récupère les éléments dans la liste
IF $aRegroupement <> "Vide" Then ; Si le dossier regroupement n'est pas vide alors
local $count0 = $aRegroupement[0] ; On compte le nombre d'élément dans le dossier
for $j = 1 to $count0
Local $Nomregr = StringTrimRight($aRegroupement[$j], 4) ; On récupère le nom du fichier sans le .txt
If $UtilisateurSel = $Nomregr Then ; Si le nom du fichier correspond à l'élément de la liste alors
Local $Recepteur = $Nomregr
Local $StockNomRegr = $Nomregr ; On stock le nom du fichier pour plus tard
$FichRegroupementxt = $Path_Regroupement&$Nomregr&".txt" ; On récupère le chemin complet du fichier
Local $oFichRegroupementxt = FileOpen($FichRegroupementxt,0) ; Ouvre le fichier
If $oFichRegroupementxt = -1 Then ; Si une erreur d'ouverture alors
MsgBox(0, "Erreur", "Le regroupement ne peut être ouvert.") ; Message d'erreur
Exit ; Quitte le logiciel suite à l'erreur
EndIf
While 1 ; Boucle de lecture
Local $lignetxt = FileReadLine($oFichRegroupementxt) ; On récupère le nom des personnes dans le regroupement
If @error = -1 Then ; Si une erreur alors
ExitLoop ; On quitte la boucle
EndIF
Local $FichMessageTxt = $Path_Message&$lignetxt&".txt" ; On crée le chemin du fichier qui contiendra le message de la personne
If Not _FileCreate($FichMessageTxt) Then ; Si le fichier n'est pas créé alors erreur
MsgBox($MB_SYSTEMMODAL, "Erreur", "Numéro d'erreur : " & @error)
EndIf
Local $oFichMessageTxt = FileOpen($FichMessageTxt, 2) ; On ouvre le fichier créé
If $oFichMessageTxt = -1 Then ; Si impossible de l'ouvrir alors erreur
MsgBox($MB_SYSTEMMODAL, "", "Une erreur est survenue lors de la lecture du fichier.")
exit
EndIf
Local $Text = "De : "&$Emetteur&" -> "&$Recepteur &@CRLF & _
"Objet : "&$Objet& @CRLF & _
"Message : "&$Message & @CRLF ; On stock et met en forme le message
FileWrite($oFichMessageTxt, $Text) ; On écrit le message dans le fichier
FileClose($oFichMessageTxt) ; On ferme le fichier
Wend ; Fin de la boucle
FileClose($oFichRegroupementxt) ; On ferme le fichier
EndIf ; Fin du SI Utilisateur = Fichier regroupement
next ; Suivant
EndIf
If $UtilisateurSel <> $StockNomRegr Then ; Si l'utilisateur est différent du regroupement
If StringInStr ($UtilisateurSel, "PROD-") Or StringInStr ($UtilisateurSel, "ALL-") Or StringInStr ($UtilisateurSel, "SUPPORT-") Then ; Si l'utilisateur contient Prod, ALL ou Support alors
Local $Recepteur = $UtilisateurSel ; Stock le nom de l'utilisateur
$UtilisateurSel = "[color=#FF0000]******[/color]"&$UtilisateurSel ; On rajoute l'élément manquant enlevé précédemment
$UtilisateurSelFQDN = StringReplace($UtilisateurSel,$UtilisateurSel,"CN="&$UtilisateurSel&",OU=GROUPS,[color=#FF0000]OU=****,OU=****,DC=***,DC=****[/color]") ; On recré le FQDN du groupe
_AD_Open()
_ADGetGroupMembers($aMember, $UtilisateurSelFQDN) ; On liste les membres du groupe
local $count = $aMember[0] ; On compte le nombre de personne dans le groupe
for $i = 1 to $count
$GroupeMember = $aMember[$i] ; On récupère le FQDN 1 à 1 des membres
$GroupeMember = _AD_FQDNToSamAccountName($GroupeMember) ; Puis on transforme en login
Local $FichMessageTxt = $Path_Message&$GroupeMember&".txt" ; On stock le chemin où se trouvera son message
If Not _FileCreate($FichMessageTxt) Then ; Si le fichier n'est pas crée alors erreur
MsgBox($MB_SYSTEMMODAL, "Erreur", "Numéro d'erreur : " & @error)
EndIf
Local $oFichMessageTxt = FileOpen($FichMessageTxt, 2) ; On ouvre le fichier de l'utilisateur en écriture
If $oFichMessageTxt = -1 Then ; Si erreur alors message et on quitte le logiciel
MsgBox($MB_SYSTEMMODAL, "", "Une erreur est survenue lors de la lecture du fichier.")
exit
EndIf
Local $Text = "De : "&$Emetteur&" -> "&$Recepteur &@CRLF & _
"Objet : "&$Objet& @CRLF & _
"Message : "&$Message & @CRLF
FileWrite($oFichMessageTxt, $Text)
FileClose($oFichMessageTxt)
next
_AD_Close()
Else
Local $Recepteur = $UtilisateurSel ; Reprend le même principe mais si c'est juste un utilisateur et pas en groupe de l'AD ou un regroupement
Local $FichMessageTxt = $Path_Message&$UtilisateurSel&".txt"
If Not _FileCreate($FichMessageTxt) Then
MsgBox($MB_SYSTEMMODAL, "Erreur", "Numéro d'erreur : " & @error)
EndIf
Local $oFichMessageTxt = FileOpen($FichMessageTxt, 2)
If $oFichMessageTxt = -1 Then
MsgBox($MB_SYSTEMMODAL, "", "Une erreur est survenue lors de la lecture du fichier.")
exit
EndIf
Local $Text = "De : "&$Emetteur&" -> "&$Recepteur &@CRLF & _
"Objet : "&$Objet& @CRLF & _
"Message : "&$Message & @CRLF
FileWrite($oFichMessageTxt, $Text)
FileClose($oFichMessageTxt)
EndIf
EndIf
Next
msgbox(64, "Information", "Le message a bien été envoyé")
Case $msg = $Btn_OK
GUICtrlGroupSetState($Grp_Creat_Regr, $GUI_HIDE) ; Cache le groupe de selection ou de création de regroupement
GUICtrlGroupSetState($Grp_Gest_Agent, $GUI_SHOW) ; Affiche à l'ouverture le groupe d'ajout d'agent dans le regroupement
;########################################### Création du regroupement ########################################################
Local $RInp_CreerRegr = GUICtrlRead($Inp_CreerRegr) ; Lit l'input de création du regroupement
If $RInp_CreerRegr <> "" Then ; Si l'input n'est pas vide alors
$NomRegroupement = $RInp_CreerRegr
$FichRegroupementxt = $Path_Regroupement&$RInp_CreerRegr&".txt" ; Stock dans une variable le chemin et le fichier au nom du regroupement créé
If Not _FileCreate($FichRegroupementxt) Then ; Si le fichier n'est pas créé alors
MsgBox($MB_SYSTEMMODAL, "Erreur", "Numéro d'erreur : " & @error) ; Affiche le numéro d'erreur
EndIf
;#############################################################################################################################
;############################################ Lecteur du regroupement selectionné ############################################
Else ; Sinon
local $Read_Comb_SelectRegr = GUICtrlRead($Comb_SelectRegr) ; Lit l'élément selectionné dans la liste des regroupements
$NomRegroupement = $Read_Comb_SelectRegr
$FichRegroupementxt = $Path_Regroupement&$Read_Comb_SelectRegr&".txt" ; Stock le chemin et le fichier choisis
Local $oFichRegroupementxt = FileOpen($FichRegroupementxt,0) ; Ouvre le fichier
If $oFichRegroupementxt = -1 Then ; Si une erreur d'ouverture alors
MsgBox(0, "Erreur", "Le regroupement ne peut être ouvert.") ; Message d'erreur
Exit ; Quitte le logiciel suite à l'erreur
EndIf
While 1 ; Boucle de lecture
Local $lignetxt = FileReadLine($oFichRegroupementxt) ; Stock dans une variable la ligne en cours
If @error = -1 Then ; Si une erreur alors
ExitLoop ; On quitte la boucle
EndIF
GUICtrlCreateListViewItem($lignetxt, $Lst_AgentRegr) ; Ajout la ligne dans la liste des utilisateurs du regroupement
Wend ; Fin de la boucle
FileClose($oFichRegroupementxt) ; On ferme le fichier
EndIF
;################################################################################################################################
Case $msg = $Btn_GSG
GUICtrlGroupSetState($Grp_Creat_Regr, $GUI_HIDE) ; Cache le groupe de selection ou de création de regroupement
GUICtrlGroupSetState($Grp_Gest_GSG, $GUI_SHOW) ; Affiche à l'ouverture le groupe d'ajout de GSG
Case $msg = $Img_ADM_Ajout
local $Read_Comb_TousAgents = GUICtrlRead($Comb_TousAgents)
$Read_Comb_TousAgents = StringTrimRight($Read_Comb_TousAgents, 1)
If $Read_Comb_TousAgents <> "" Then
Local $oFichRegroupementxt = FileOpen($FichRegroupementxt, 0)
Local $Text = FileRead($oFichRegroupementxt)
FileClose($oFichRegroupementxt)
$oFichRegroupementxt = FileOpen($FichRegroupementxt, 2)
FileWrite($oFichRegroupementxt, $Text & @CRLF & $Read_Comb_TousAgents)
FileClose($oFichRegroupementxt)
GUICtrlCreateListViewItem($Read_Comb_TousAgents, $Lst_AgentRegr)
EndIf
Case $msg = $Img_ADM_Suppr
local $Indice = _GUICtrlListView_GetSelectedIndices($Lst_AgentRegr)
local $Item = _GUICtrlListView_GetItem($Lst_AgentRegr,int($Indice),0); Le 0 permet de recuperer dans la colonne 1
; MsgBox(4160, "Text : ", $Item[3]) ; ici $Item[3] pour recuperer la parti text
FileOpen($FichRegroupementxt, 0)
For $i = 1 to _FileCountLines($FichRegroupementxt)
local $line = FileReadLine($FichRegroupementxt, $i)
If $line = $Item[3] Then
ExitLoop
EndIF
Next
FileClose($FichRegroupementxt)
_FileWriteToLine($FichRegroupementxt, $i, "", 1)
_FichierLigneVide($FichRegroupementxt)
_GUICtrlListView_DeleteItemsSelected($Lst_AgentRegr)
Case $msg = $Btn_Retour
GUICtrlGroupSetState($Grp_Gest_Agent, $GUI_HIDE) ; Cache à l'ouverture le groupe d'ajout d'agent dans le regroupement
GUICtrlGroupSetState($Grp_Creat_Regr, $GUI_SHOW) ; Affiche le groupe de selection ou de création de regroupement
GUICtrlSetData($Inp_CreerRegr, "") ; On vide l'input de création de regroupement
_GUICtrlListView_DeleteAllItems($Lst_AgentRegr) ; On vide la liste des utilisateurs des regroupements
_GUICtrlComboBox_ResetContent($Comb_SelectRegr) ; Vide la liste qui contient tous les regroupements
;############### Ajout des regroupement dans la Combo_SelectRegr #############################
Local $aRegroupement = _RegroupementArray($Path_Regroupement)
IF $aRegroupement = "Vide" Then
Else
local $count0 = $aRegroupement[0]
for $i = 1 to $count0
Local $Nomregr = StringTrimRight($aRegroupement[$i], 4)
GUICtrlSetData($Comb_SelectRegr,$Nomregr&"|")
next
EndIf
;#############################################################################################
;################################## Suppression des lignes vides #############################
_FichierLigneVide($FichRegroupementxt)
;#############################################################################################
$FichRegroupementxt = ""
$NomRegroupement = ""
GUICtrlSetData($Inp_Affectation, "")
Case $msg = $Btn_Retour_GSG
GUICtrlGroupSetState($Grp_Gest_GSG, $GUI_HIDE) ; Cache à l'ouverture le groupe d'ajout de GSG
GUICtrlGroupSetState($Grp_Creat_Regr, $GUI_SHOW) ; Affiche le groupe de selection ou de création de regroupement
GUICtrlSetData($Inp_Affectation_GSG, "") ; On vide l'input de création de regroupement
;################################## Suppression des lignes vides #############################
_FichierLigneVide($FichRegroupementxt)
;#############################################################################################
Case $msg = $Btn_Valider
Local $RInp_Affectation = GUICtrlRead($Inp_Affectation)
If $RInp_Affectation <> "" Then ; Si l'input n'est pas vide alors
$FichAffecterTxt = $Path_Affecter&$RInp_Affectation&".txt" ; Stock dans une variable le chemin et le fichier au nom du regroupement créé
If FileExists($FichAffecterTxt) Then ; Si le fichier existe alors
Local $oFichAffecterTxt = FileOpen($FichAffecterTxt, 0)
Local $Text = FileRead($oFichAffecterTxt)
FileClose($oFichAffecterTxt)
$oFichAffecterTxt = FileOpen($FichAffecterTxt, 2)
FileWrite($oFichAffecterTxt, $Text & @CRLF & $NomRegroupement)
FileClose($oFichAffecterTxt)
Msgbox(64,"Info", "Le regroupement "&$NomRegroupement&" est ajouté à l'utilisateur "&$RInp_Affectation)
Else
If Not _FileCreate($FichAffecterTxt) Then ; Si le fichier n'est pas créé alors
MsgBox($MB_SYSTEMMODAL, "Erreur", "Numéro d'erreur : " & @error) ; Affiche le numéro d'erreur
EndIf
$oFichAffecterTxt = FileOpen($FichAffecterTxt, 2)
FileWrite($oFichAffecterTxt, $NomRegroupement)
FileClose($oFichAffecterTxt)
EndIF
EndIf
_FichierLigneVide($FichAffecterTxt)
Case $msg = $Btn_OK_GSG
Local $RInp_Affectation_GSG = GUICtrlRead($Inp_Affectation_GSG)
local $RComb_Select_GSG = GUICtrlRead($Comb_Select_GSG)
$RComb_Select_GSG = "[color=#FF0000]****[/color]-"&$RComb_Select_GSG
$RComb_Select_GSG = StringTrimRight($RComb_Select_GSG, 1)
If $RInp_Affectation_GSG <> "" Then ; Si l'input n'est pas vide alors
$FichAffecterTxt = $Path_Affecter&$RInp_Affectation_GSG&".txt" ; Stock dans une variable le chemin et le fichier au nom du regroupement créé
If FileExists($FichAffecterTxt) Then ; Si le fichier existe alors
Local $oFichAffecterTxt = FileOpen($FichAffecterTxt, 0)
Local $Text = FileRead($oFichAffecterTxt)
FileClose($oFichAffecterTxt)
$oFichAffecterTxt = FileOpen($FichAffecterTxt, 2)
FileWrite($oFichAffecterTxt, $Text & @CRLF & $RComb_Select_GSG)
FileClose($oFichAffecterTxt)
Msgbox(64,"Info", "Le Groupe "&$RComb_Select_GSG&" est ajouté à l'utilisateur "&$RInp_Affectation_GSG)
Else
If Not _FileCreate($FichAffecterTxt) Then ; Si le fichier n'est pas créé alors
MsgBox($MB_SYSTEMMODAL, "Erreur", "Numéro d'erreur : " & @error) ; Affiche le numéro d'erreur
EndIf
$oFichAffecterTxt = FileOpen($FichAffecterTxt, 2)
FileWrite($oFichAffecterTxt, $RComb_Select_GSG)
FileClose($oFichAffecterTxt)
Msgbox(64,"Info", "Le Groupe "&$RComb_Select_GSG&" est ajouté à l'utilisateur "&$RInp_Affectation_GSG)
EndIF
EndIf
_FichierLigneVide($FichAffecterTxt)
EndSelect
WEnd
; ###################################################################################
; ################################# Fonctions #######################################
; ###################################################################################
Func _ADGetGroupMembers(ByRef $members, $groupdn, $sort = 0)
Local $oUsr, $objCommand, $groups
$objCommand = ObjCreate("ADODB.Command")
$objCommand.ActiveConnection = $objConnection
$objCommand.Properties ("Searchscope") = 2
Dim $members[1]
$i = 0
While 1
$rangemodifier = $i * 1000
$range = "Range=" & $rangemodifier & "-" & $rangemodifier + 999
$strCmdText = "<LDAP://" & $strHostServer & "/" & $groupdn & ">;;member;" & $range & ";base"
$objCommand.CommandText = $strCmdText
$objRecordSet = $objCommand.Execute
$membersadd = $objRecordSet.fields (0).Value
If $membersadd = NULL Then ExitLoop
ReDim $members[UBound($members) + 1000]
For $j = $rangemodifier + 1 To $rangemodifier + 1000
$members[$j] = $membersadd[$j - $rangemodifier - 1]
Next
$i += 1
$objRecordSet.Close
WEnd
$rangemodifier = $i * 1000
$range = "Range=" & $rangemodifier & "-*"
$strCmdText = "<LDAP://" & $strHostServer & "/" & $groupdn & ">;;member;" & $range & ";base"
$objCommand.CommandText = $strCmdText
$objRecordSet = $objCommand.Execute
$membersadd = $objRecordSet.fields (0).Value
ReDim $members[UBound($members) + UBound($membersadd) ]
For $j = $rangemodifier + 1 To $rangemodifier + UBound($membersadd)
$members[$j] = $membersadd[$j - $rangemodifier - 1]
Next
$objRecordSet.Close
$objCommand = 0
$objRecordSet = 0
$members[0] = UBound($members) - 1
If $sort = 1 Then
_ArraySort($members, 0, 1)
EndIf
Return 1
EndFunc ;==>_ADGetGroupMembers
Func GUICtrlGroup($sCtrl) ; Consiste à regrouper les CTRL
$sSplit = StringSplit($sCtrl, "/") ; La fonction découpe le paramètre par rapport au symbole "/"
$sReturn = $sSplit[0] & "." & $sCtrl ; Puis attribue le nombre de CTRL dans le GROUPE
Return $sReturn ; Et retourne le résultat ( soit le GROUPE )
EndFunc ;==>GUICtrlGroup
Func GUICtrlGroupSetState($sGUICtrlGroup, $sState) ; Consiste à changer l'état d'un GROUPE
$sSplit2 = StringSplit($sGUICtrlGroup, ".") ; Elle récupère le nombre de CTRL
$DiffCtrl = StringSplit($sSplit2[2], "/") ; Divise le GROUPE affin de récupéré tous les CTRL
For $i = 1 To $sSplit2[1] ; Une boucle va se répéter le nombre de fois = au nombre de CTRL affin de tous les modifier 1 par 1 ( très rapidement et instantané à nos yeux )
GUICtrlSetState($DiffCtrl[$i], $sState) ; Et HOP !
Next
EndFunc ;==>GUICtrlGroupSetState
Func _SamAccountNameToDisplayname($SamAccName)
$UserFQDN = _AD_SamAccountNameToFQDN($SamAccName)
$sDisplayname = _AD_FQDNToDisplayname($UserFQDN)
Return $sDisplayname
EndFunc ;==>GUICtrlGroup
Func _RegroupementArray($regroupement)
Local $aArrayRegr = _FileListToArray($regroupement, "*.txt", 1)
If @error = 1 Then
MsgBox($MB_SYSTEMMODAL, "", "Dossier invalide")
Exit
EndIf
If @error = 4 Then
MsgBox($MB_SYSTEMMODAL, "", "Il n'existe aucun groupe de créé")
$aArrayRegr = "Vide"
EndIf
Return $aArrayRegr
EndFunc
Func _RegroupementArrayEXE($regroupement)
Local $aArrayRegr = _FileListToArray($regroupement, "*.exe", 1)
If @error = 1 Then
MsgBox($MB_SYSTEMMODAL, "", "Dossier invalide")
Exit
EndIf
If @error = 4 Then
$aArrayRegr = "Vide"
EndIf
Return $aArrayRegr
EndFunc
Func _FichierLigneVide($Filetxt)
$contenu=FileRead($Filetxt)
$contenu=StringRegExpReplace($contenu,'\A('&@CRLF&')+','') ; Première passe : Cherche plusieurs sauts de lignes depuis le début
$contenu=StringRegExpReplace($contenu,'('&@CRLF&'){2,}',@CRLF) ; Deuxième passe : cherche une succession de 2 sauts ou plus successifs pour les remplacer par un seul (sinon les chaînes de textes sont collées)
$contenu=StringRegExpReplace($contenu,'('&@CRLF&')+\Z','') ; Troisième passe : cherche plusieurs suts de ligne depuis la fin du fichier
$hndout=FileOpen($Filetxt,2)
FileWrite($hndout,$contenu)
FileClose($hndout)
EndFunc
Func _CompareVersions($s_Vers1, $s_Vers2, $i_ReturnFlag = 0)
If $s_Vers1 = '' Then Return 0
Local $i, $i_Vers1, $i_Vers2, $i_Top
Local $a_Vers1 = StringSplit($s_Vers1, '.')
Local $a_Vers2 = StringSplit($s_Vers2, '.')
$i_Top = $a_Vers1[0]
If $a_Vers1[0] < $a_Vers2[0] Then
$i_Top = $a_Vers2[0]
EndIf
For $i = 1 To $i_Top
$i_Vers1 = 0
$i_Vers2 = 0
If $i <= $a_Vers1[0] Then
$i_Vers1 = Number($a_Vers1[$i])
EndIf
If $i <= $a_Vers2[0] Then
$i_Vers2 = Number($a_Vers2[$i])
EndIf
If $i_Vers1 > $i_Vers2 Then
$v_Return = 1
ExitLoop
ElseIf $i_Vers1 < $i_Vers2 Then
$v_Return = 0
ExitLoop
Else
$v_Return = -1
EndIf
Next
If $i_ReturnFlag Then
Select
Case $v_Return = -1
SetError(1)
Return 0
Case $v_Return = 1
Return $s_Vers1
Case $v_Return = 0
Return $s_Vers2
EndSelect
ElseIf $v_Return = -1 Then
SetError(1)
Return 0
Else
Return $v_Return
EndIf
EndFunc ;==>_CompareVersions