*!* 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