Files
vfp_roaauto/COMUN/programe/oupdate.prg

515 lines
20 KiB
Plaintext

*!* 21.07.2009
*!* marius.mutu
*!* set library to inainte de dezarhivarea arhivelor (vezi comunroa care are vfpencryption si da conflict)
*!* 19.03.2024
*!* marius.mutu
*!* updatecheck: s-a inlocuit dezarhivarea cu vfpcompression cu shell.copyhere
*!* comun\programe\
*!* oupdate.prg
*!* iniacces.prg
*!* procese.prg
*!* version.prg
*!* xmlaccess.prg
*!* xmlparser.prg
*!* filebringer.prg
*!* wwcodeupdate.prg
*!* wwhttp.prg
*!* wwapi.prg
*!* comun\include\
*!* security.h
*!* comun\clase\
*!* wwdialogs.vcx
*!* main.prg
*!* PRIVATE gcDirMare
*!* gcDirMare=Left(gcAppPath,liat)
*!* SET CLASSLIB TO wwdialogs ADDITIVE
#Define crlf Chr(13)+Chr(10)
Define Class oUpdate As Custom
oInterfataXml = Null
oContainerAfisare = Null
cFisier = Null
cExtensieFisier = [.zip]
cExtensieFisierExe = [.exe] && pentru romfast_suport
Procedure Init
Lparameters tcFisier,toContainerAfisare,tcProgram
Declare ExitProcess In WIN32API Integer
Return This.initializeazaDate(tcFisier,toContainerAfisare,tcProgram)
Endproc
Function reinitializeazaDate
Lparameters tcFisier,toContainerAfisare,tcProgram
This.oInterfataXml = Null
Return This.initializeazaDate(tcFisier,toContainerAfisare,tcProgram)
Endfunc
Function initializeazaDate
Lparameters tcFisier,toContainerAfisare,tcProgram
Local llReturn
llReturn = .T.
This.oContainerAfisare = toContainerAfisare
If Empty(tcFisier)
This.cFisier= This.getServer()
Else
This.cFisier = tcFisier
Endif
This.oInterfataXml = Createobject("xmlAccess",This.cFisier)
If Type('This.oInterfataXml') <> 'O'
This.actualizeazaContainerAfisare("Nu se pot face actualizãri!")
If !Empty(tcProgram)
lcVersiune = Iif(Left(tcProgram,3)='ROA',Getversion(tcProgram),GetTxtVersion(tcProgram))
lcVersiune = Iif(lcVersiune = [0.0.0],[...],[ ] + lcVersiune)
This.actualizeazaContainerAfisare("Se lanseazã " + tcProgram + lcVersiune)
Endif
llReturn = .F.
Endif
Return llReturn
Endfunc
Procedure actualizeazaContainerAfisare
Lparameters tcMesaj &&,tlSelStart modificare ROASTART v 2.0.23
If Type('this.oContainerAfisare') = 'O'
This.oContainerAfisare.Value = This.oContainerAfisare.Value + tcMesaj + crlf
*!* modificare ROASTART v 2.0.23
*!* If tlSelStart
*!* This.oContainerAfisare.SelStart = Len(This.oContainerAfisare.Value)
*!* Endif
*!* modificare ROASTART v 2.0.23 ^
This.oContainerAfisare.Refresh()
Endif
Endproc
Function getServer
Local lcnumeserver
lcnumeserver=[]
If Type('goFirma') = 'O' And Type('goFirma.nume_server') <> 'U'
lcnumeserver = Alltrim(goFirma.nume_server)
Else
lcSql = [select nume_server from syn_nom_firme where id_firma=?gnIdFirma]
lnSucces = goExecutor.oExecute(lcSql,[crsnf])
If lnSucces < 0
aMessagebox(goExecutor.ceroare,64,'Eroare')
Else
Select crsnf
lcnumeserver = Alltrim(nume_server)
Endif
If Used('crsnf')
Use In crsnf
Endif
Endif
Return lcnumeserver
Endfunc
Procedure createUpdateCursor
Lparameters tcNumeCursor
This.oInterfataXml.getXmlItems(tcNumeCursor)
Endproc
Function Getversion
Lparameters tcProgram
Return This.oInterfataXml.Getversion(tcProgram)
Endfunc
Function updatecheckTxt
Lparameters tcCurrentProg, tlSilent, tlLocalFileExist
* tlLocalFileExist: daca exista fisierul pe calculator. se descarca chiar daca versiunile din fisierul de setari si cel de pe internet sunt la fel, dar nu exista fisierul pe local
Local lcCaleActualizari, lcVersiuneLocal, lcVersiuneInternet, lcFisier, lcFisierVersiuniInternet, lcSectiune, lcExtensieFisier
Local lcLibraryPath, loEx As Exception
lcLibraryPath = gcDirMare + [COMUNROA\vfpconnection.fll]
*!* modificare 06.03.2014 : am adaugat lcExtensieFisier in loc de This.cExtensieFisier
lcExtensieFisier = IIF(INLIST(tcCurrentProg, [romfast_suport], [roascreenshot]),This.cExtensieFisierExe,This.cExtensieFisier)
If File(lcLibraryPath)
Try
Set Library To (lcLibraryPath) Additive
lcCaleActualizari = [http://www.romfast.ro/romfastsuport/files/]
lcFisierVersiuniInternet = [versiune_aplicatii.txt]
lcSectiune = [versiuni]
lcFisier = lcCaleActualizari + lcFisierVersiuniInternet
If !HTTPGet(lcFisier, gcTempPath+lcFisierVersiuniInternet, [MyProgressHandler("] + lcFisier + [")])
IF !m.tlSilent
polog.Log("Nu se poate descarca fisierul cu versiuni! " + m.lcFisier, Program())
Messagebox("Nu se poate descarca fisierul cu versiuni!",16,"Eroare")
ENDIF
Else
lcBuffer=Space(255)
DECLARE INTEGER GetPrivateProfileString ;
IN WIN32API ;
STRING cSection,;
STRING cEntry,;
STRING cDefault,;
STRING @cRetVal,;
INTEGER nSize,;
STRING cFileName
GetPrivateProfileString(lcSectiune,tcCurrentProg,"",@lcBuffer, Len(lcBuffer), gcTempPath+lcFisierVersiuniInternet)
lcVersiuneInternet = Alltrim(Strtran(lcBuffer,Chr(0),""))
Delete File (gcTempPath+lcFisierVersiuniInternet)
loIniHandler = Createobject("iniaccess")
lcVersiuneLocal = loIniHandler.getCValue(lcSectiune,tcCurrentProg)
polog.Log("Program: " + tcCurrentProg + " VersiuneLocal: " + lcVersiuneLocal + " VersiuneInternet: " + lcVersiuneInternet + " LocalFileExist: " + TRANSFORM(m.tlLocalFileExist), Program())
If ((Empty(lcVersiuneLocal) Or lcVersiuneLocal < lcVersiuneInternet) And !Empty(lcVersiuneInternet)) OR !m.tlLocalFileExist
*!* modificare 28.06.2012 : am adaugat This.cExtensieFisier in loc de .exe
*!* modificare 06.03.2014 : am adaugat lcExtensieFisier in loc de This.cExtensieFisier
lcFisier = lcCaleActualizari + tcCurrentProg + lcExtensieFisier
If (Bringfile(lcFisier,tcCurrentProg,gcDirMare+tcCurrentProg+lcExtensieFisier )=.F.)
IF !m.tlSilent
polog.Log("Eroare la copierea "+tcCurrentProg + ", versiunea "+lcVersiuneInternet+"!", Program())
Messagebox("Eroare la copierea "+tcCurrentProg + ", versiunea "+lcVersiuneInternet+"!",16,"Eroare")
ENDIF
Else
loIniHandler.setCValue(lcSectiune,tcCurrentProg,lcVersiuneInternet)
Endif
Endif
Release loIniHandler
Endif
Catch To loEx
IF !m.tlSilent
polog.Log('vfpconnection ' + loEx.Message, Program())
Messagebox('vfpconnection ' + loEx.Message)
ENDIF
Endtry
Endif
Return .T.
Endfunc
Function updatecheck
Lparameters tccurrentprog,tlmsgshow,tnTipActualizare,tcDefaultDir
* tccurrentprog este programul care trebuie actualizat
* lcmsgshow - daca e true,atunci se citeste din ini daca apare mesajul de confirmare sau nu
* tnTipActualizare - 0 = este din numeserver.xml ;
1 = este din roastart.xml ;
2 = programul se actualizeaza singur la pornire
* tcDefaultDir - directorul in care se copiaza actualizarile pentru configurarile USER... ;
( de ex.: DEV_USERREPORTS e tccurrentprog,dar trebuie sa fie copiat in USERREPORTS )
Local iniHandler As Object,lnTipFisier,lnTipActualizare && modificare v 2.0.14 : am adaugat lnTipFisier
LOCAL lcOldLibrary
lnTipActualizare = Iif(!Empty(tnTipActualizare),tnTipActualizare,0)
*!* modificare v 2.0.6
*!* If Used("SERVER_INFO")
*!* Use In SERVER_INFO
*!* Endif
*!* modificare v 2.0.6 ^
If lnTipActualizare<>2
If At("_",tccurrentprog)#0
lccurrentUR=Substr(tccurrentprog,At("_",tccurrentprog)+1)
Else
lccurrentUR=tccurrentprog
Endif
********************************************
* Rularea procedurii de update pentru
* toate programele in afara de ROASTART
********************************************
lbrun=.T.
Local lraspuns
lraspuns=4
Local loex1,loex2,loex As Exception
*!* Verifica daca trebuie rulate
*!* procedurile de update
This.actualizeazaContainerAfisare(tccurrentprog + " se verificã ultima versiune")
iniHandler=Createobject("iniaccess")
If lnTipActualizare = 0
lnTipFisier = 0
If Empty(This.cFisier) Or This.cFisier = "ROASTART"
XmlData="nu s-a putut conecta"
Else
polog.Log("S-a gasit serverul "+This.cFisier,Program())
polog.Log("Se cauta pentru "+This.cFisier+".XML",Program())
XmlData=This.oInterfataXml.ReadXmlFile(tccurrentprog)
Endif
Else
If Left(tccurrentprog,3)="ROA"
lnTipFisier = 0
Else
lnTipFisier = 1
Endif
polog.Log("Se cauta xml-ul pentru "+tccurrentprog,Program())
XmlData=This.oInterfataXml.ReadXmlFile(tccurrentprog)
Endif
Do Case
Case XmlData$"<>(){}"
polog.Log("Nu s-au gasit in fisierul Xml inregistrari pentru "+tccurrentprog,Program())
Case XmlData$"nu s-a putut conecta"
If iniHandler.getURL()!=""
This.actualizeazaContainerAfisare("Nu s-a gãsit actualizare pe internet.")
else
This.actualizeazaContainerAfisare("Nu s-a gãsit actualizare în reþea/local.") &&,.T. modificare ROASTART v 2.0.23
Endif
Otherwise
If tlmsgshow=.F.
lcallowconfirm=.T.
Else
lcallowconfirm=.F.
If(iniHandler.getAllowConfirm())
lcallowconfirm=.T.
Endif
Endif
If Compareversion(stripXmlVersion(XmlData),XmlData,;
IIF(Empty(tcDefaultDir),tccurrentprog,tcDefaultDir),lcallowconfirm,lnTipFisier)
polog.Log("S-a gasit versiunea " + stripXmlVersion(XmlData) + " pentru "+tccurrentprog + " (" + Getversion(tccurrentprog) + ")",Program())
lcconfirm=0
If iniHandler.getAllowConfirm()
lcconfirm = aMessagebox(stripXmlMsg(XmlData)+crlf+"Doriþi sã-l încãrcaþi?",36,"Confirmare actualizare")
Else
lcconfirm = 6
Endif
If lcconfirm = 6
This.actualizeazaContainerAfisare(tccurrentprog + " se actualizeazã versiunea "+stripXmlVersion(XmlData))&&,.T. modificare ROASTART v 2.0.23
polog.Log("Se incepe actualizarea "+tccurrentprog+" la versiunea "+stripXmlVersion(XmlData),Program())
*!* Verifica daca nu cumva programul este in procese
*This.oContainerAfisare.value = This.oContainerAfisare.value+"Se verfica daca se poate face updateul" + crlf
polog.Log("Se verifica daca nu cumva programul este in procese ",Program())
lnWinHandle=1
Do While lnWinHandle=1 And lraspuns=4
lnWinHandle=0
If CheckProcess(tccurrentprog)
lnWinHandle=1
*This.oContainerAfisare.value = This.oContainerAfisare.value+"Nu se poate face updateul(fisier in uz)" + crlf
polog.Log("Programul s-a gasit printre procesele care ruleaza",Program())
Endif
If lnWinHandle =1
lraspuns=aMessagebox("Închideti toate instantele " + tccurrentprog + " ºi apãsaþi pe Repetã pentru a actualiza programul!",21,"Actualizare")
Else
Exit
Endif
Enddo
If lraspuns=2
polog.Log("S-a respins actualizarea",Program())
This.actualizeazaContainerAfisare("S-a respins actualizarea " + tccurrentprog)&&,.T. modificare ROASTART v 2.0.23
Endif
If lnWinHandle =0
************review ..CV
************03.oct.2007
polog.Log("Se aduce fisierul",Program())
myfilestr=StripXmlFile(XmlData)
If iniHandler.getDefault()="URL"
If Occurs("http",myfilestr)>0
lcFileToBeBrought=myfilestr
Else
If Left(myfilestr,1)="\"
lcFileToBeBrought=Right(myfilestr,Len(myfilestr)-1)
Else
lcFileToBeBrought=myfilestr
Endif
lcFileToBeBrought=iniHandler.getURL()+"/"+lcFileToBeBrought
Endif
lcFileToBeBrought = strtran(lcFileToBeBrought,[\],[/]) && modificare ROASTART v 2.1.3
Else
If Left(myfilestr,1)="\"
lcFileToBeBrought=Right(myfilestr,Len(myfilestr)-1)
Else
lcFileToBeBrought=myfilestr
Endif
lcFileToBeBrought=Addbs(ShortPath(iniHandler.getNetworkPath()))+lcFileToBeBrought
Endif
****************review***Cristian Vasile***
****************cale relativa URL**********
******************************03.10.2007***
If(Bringfile(lcFileToBeBrought,tccurrentprog)=.F.)
aMessagebox("A intervenit o eroare la copierea fisierului!",16,"Copiere")
polog.Log("A intervenit o eroare la copierea fisierului",Program())
*This.oContainerAfisare.txt_Mesaj.Caption = This.oContainerAfisare.txt_Mesaj.Caption+"A intervenit o eroare la copierea fisierului" + crlf
Else
tempfile = GetCurrentTempPath(tccurrentprog)
Cd Addbs(Justpath(tempfile))
*!* lcEncryptionFile = gcComunPath+"vfpcompression.fll"
*!* IF !"vfpcompression"$LOWER(SET("Library"))
*!* SET LIBRARY TO (lcEncryptionFile) ADDITIVE
*!* ENDIF
*!* UnzipQuick(tempfile)
lcErrorMessage = ''
lcUnzipDir = JUSTPATH(m.tempfile)
llSucces = UnzipQuickShell(m.tempfile, @lcUnzipDir, @lcErrorMessage)
IF m.llSucces
polog.Log("S-a actualizat "+ tccurrentprog + " la versiunea "+stripXmlVersion(XmlData),Program())
This.actualizeazaContainerAfisare(tccurrentprog + " s-a actualizat la versiunea "+stripXmlVersion(XmlData))&&,.T. modificare ROASTART v 2.0.23
ELSE
polog.Log("Nu s-a actualizat "+ tccurrentprog + " la versiunea "+stripXmlVersion(XmlData),Program())
This.actualizeazaContainerAfisare(tccurrentprog + " NU s-a actualizat la versiunea "+stripXmlVersion(XmlData) + " " + m.lcErrorMessage)&&,.T. modificare ROASTART v 2.0.23
ENDIF
lcDir=Addbs(Justpath(Sys(16,0)))
*!* Stergere temporar
*!*
Try
*!* modificare 28.06.2012
*!* Delete File "&tempfile"
DELETE FILE (tempfile)
*!* modificare 28.06.2012 ^
Catch To loex2
If loex2.ErrorNo=1705
This.actualizeazaContainerAfisare("NU s-a putut sterge fisierul temporar!")&&,.T. modificare ROASTART v 2.0.23
Endif
Endtry
*!*
If Atc("PROCEDURE",lcDir) > 0
lcDir = Substr(lcDir,Rat(":",lcDir)-1)
Endif
Cd (lcDir)
Endif
Else
* MESSAGEBOX("Inchideti toate instantele de ale ROA - Financiar contabilitate pentru a actualiza programul.",16,"Actualizare !")
lbrun=.F.
Endif
Else
*!* Strtofile(Dtoc(Date())+" "+Time()+" > S-a respins de utillizator updateul programului "+tccurrentprog+Chr(13)+Chr(10),gcDirMare + "updates.log",1)
polog.Log("S-a respins de utilizator actualizarea programului "+tccurrentprog,Program())
Endif
Else
polog.Log(tccurrentprog + " " + stripXmlVersion(XmlData)+" este cea mai noua versiune.",Program())
This.actualizeazaContainerAfisare(tccurrentprog + " " + stripXmlVersion(XmlData)+" este cea mai nouã versiune.")&&,.T. modificare ROASTART v 2.0.23
Endif
Endcase
*!* Release InterfataXml
Release iniHandler
Return lbrun
********************************************
* Rularea procedurii de update pentru
* toate programele in afara de ROASTART
********************************************
Else
Try
*!* modificare 28.06.2012
*!* Delete file "temporar.exe"
Delete File "temporar"+This.cExtensieFisier
*!* modificare 28.06.2012 ^
Delete File "test.vbs"
Endtry
*MESSAGEBOX("Verificare")
*!* InterfataXml=Createobject("xmlAccess")
iniHandler=Createobject("iniaccess")
XmlData=This.oInterfataXml.ReadXmlFile(tccurrentprog)
Do Case
Case XmlData$"<>(){}"
polog.Log("Nu s-au gasit in fisierul Xml inregistrari pentru "+tccurrentprog,Program())
Case XmlData$"nu s-a putut conecta"
If iniHandler.getURL()!=""
This.actualizeazaContainerAfisare("Nu s-a gãsit actualizare pe internet.")
ELSE
This.actualizeazaContainerAfisare("Nu s-a gãsit actualizare în reþea/local.")&&,.T. modificare ROASTART v 2.0.23
Endif
Otherwise
polog.Log("Am inceput update "+tccurrentprog+" !",Program())
polog.Log("Versiunea din xml este " + stripXmlVersion(XmlData))
If Compareversion(stripXmlVersion(XmlData),XmlData,tccurrentprog,iniHandler.getAllowConfirm())
polog.Log("Am detectat versiuni diferite",Program())
lcconfirm=0
If iniHandler.getAllowConfirm()
lcconfirm = aMessagebox(stripXmlMsg(XmlData)+crlf+"Doriþi sã-l încãrcaþi?",292,"Confirmare actualizare")
Else
lcconfirm = 6
Endif
If lcconfirm = 6
polog.Log("Trebuie sa aduca programul",Program())
************review ..CV
************03.oct.2007
myfilestr=StripXmlFile(XmlData)
If iniHandler.getDefault()="URL"
If Occurs("http",myfilestr)>0
lcFileToBeBrought=myfilestr
Else
If Left(myfilestr,1)="\"
lcFileToBeBrought=Right(myfilestr,Len(myfilestr)-1)
Else
lcFileToBeBrought=myfilestr
Endif
lcFileToBeBrought=iniHandler.getURL()+"/"+lcFileToBeBrought
Endif
Else
If Left(myfilestr,1)="\"
lcFileToBeBrought=Right(myfilestr,Len(myfilestr)-1)
Else
lcFileToBeBrought=myfilestr
Endif
lcFileToBeBrought=Addbs(ShortPath(iniHandler.getNetworkPath()))+lcFileToBeBrought
Endif
****************review***Cristian Vasile***
****************cale relativa URL**********
******************************03.10.2007***
If(Bringfile(lcFileToBeBrought,tccurrentprog)=.F.)
aMessagebox("A intervenit o eroare la încercarea copierii fiºierului de actualizare!",16,"Actualizare")
Else
polog.Log("Am adus programul",Program())
*!* tempfile = GetCurrentTempPath(tccurrentprog) && modificare 28.06.2012
*!* modificare v 2.0.29
*!* lcrunvbs=[Run /N7 ]+Addbs(Substr(gcAppPath,1,Rat([\],gcAppPath,2)))+[COMUNROA\updater.exe ] + ;
*!* STRTRAN(Addbs(Justpath(Sys(16,0))),[ ],[~])+tccurrentprog+[.EXE]
lcrunvbs=[Run /N7 ]+shortpath(Addbs(Substr(gcAppPath,1,Rat([\],gcAppPath,2))))+[COMUNROA\updater.exe |] + ;
shortpath(Addbs(Justpath(Sys(16,0))))+tccurrentprog+[.EXE]
*!* modificare v 2.0.29 ^
&lcrunvbs
polog.Log("Am executat updater.exe",Program())
ExitProcess(0)
Endif
Endif
Endif
Endcase
Return .T.
Endif
Endfunc
Enddefine
Function updatecheckfiles
*!* (07.09.09) tlSilent = .T. - daca nu apare mesajul de eroare in caz ca nu poate copia fisierul
Lparameters lcFisier,tlSilent
Local loUpdate,cLocalFile,cFilePath
***************************************
*
***************************************
iniHandler = Createobject("iniaccess")
If lcFisier="ROA_SECURITY.XML"
cLocalFile = gcDirMare + "Security\" + lcFisier
Else
cLocalFile = gcDirMare + lcFisier
Endif
If (iniHandler.getNetworkPath()#"" And iniHandler.getDefault()="NetworkPath") && Or iniHandler.getNetworkPath()#"" And iniHandler.getURL()="")
cFilePath = Addbs(ShortPath(iniHandler.getNetworkPath())) + lcFisier
Else
If(iniHandler.getURL()#"" And iniHandler.getDefault()="URL") && Or iniHandler.getURL()#"" And iniHandler.getNetworkPath()="")
cFilePath =iniHandler.getURL() +"/"+ lcFisier
Else
Return .F.
Endif
Endif
If(Bringfile(cFilePath,lcFisier,cLocalFile)=.F.) and !tlSilent
aMessagebox("A intervenit o eroare la copierea fisierului de actualizare! " + CHR(10) + ;
TRANSFORM(cFilePath) + CHR(10) + TRANSFORM(lcFisier) + CHR(10) + TRANSFORM(cLocalFile),16,"Actualizare")
Endif
Endfunc