*-- utils.prg - Utilitare pentru GoMag API *-- Functii pentru citirea/scrierea fisierelor INI si alte utilitare *-- Autor: Claude AI *-- Data: 27.08.2025 *-- Functie pentru citirea fisierelor INI private *-- Returneaza valoarea din sectiunea si intrarea specificata sau blank daca nu e gasita FUNCTION ReadPini PARAMETERS cSection, cEntry, cINIFile LOCAL cDefault, cRetVal, nRetLen cDefault = "" cRetVal = SPACE(255) nRetLen = LEN(cRetVal) DECLARE INTEGER GetPrivateProfileString IN WIN32API ; STRING cSection, ; STRING cEntry, ; STRING cDefault, ; STRING @cRetVal, ; INTEGER nRetLen, ; STRING cINIFile nRetLen = GetPrivateProfileString(cSection, ; cEntry, ; cDefault, ; @cRetVal, ; nRetLen, ; cINIFile) RETURN LEFT(cRetVal, nRetLen) ENDFUNC *-- Functie pentru scrierea in fisierele INI private *-- Returneaza .T. daca e successful, .F. daca nu FUNCTION WritePini PARAMETERS cSection, cEntry, cValue, cINIFile LOCAL nRetVal DECLARE INTEGER WritePrivateProfileString IN WIN32API ; STRING cSection, ; STRING cEntry, ; STRING cValue, ; STRING cINIFile nRetVal = WritePrivateProfileString(cSection, ; cEntry, ; cValue, ; cINIFile) RETURN nRetVal = 1 ENDFUNC *-- Functie pentru incarcarea tuturor setarilor din fisierul INI FUNCTION LoadSettings PARAMETERS cINIFile LOCAL loSettings *-- Cream un obiect pentru toate setarile loSettings = CREATEOBJECT("Empty") *-- Sectiunea API ADDPROPERTY(loSettings, "ApiBaseUrl", ReadPini("API", "ApiBaseUrl", cINIFile)) ADDPROPERTY(loSettings, "OrderApiUrl", ReadPini("API", "OrderApiUrl", cINIFile)) ADDPROPERTY(loSettings, "ApiKey", ReadPini("API", "ApiKey", cINIFile)) ADDPROPERTY(loSettings, "ApiShop", ReadPini("API", "ApiShop", cINIFile)) ADDPROPERTY(loSettings, "UserAgent", ReadPini("API", "UserAgent", cINIFile)) ADDPROPERTY(loSettings, "ContentType", ReadPini("API", "ContentType", cINIFile)) *-- Sectiunea PAGINATION ADDPROPERTY(loSettings, "Limit", VAL(ReadPini("PAGINATION", "Limit", cINIFile))) *-- Sectiunea OPTIONS ADDPROPERTY(loSettings, "GetProducts", ReadPini("OPTIONS", "GetProducts", cINIFile) = "1") ADDPROPERTY(loSettings, "GetOrders", ReadPini("OPTIONS", "GetOrders", cINIFile) = "1") *-- Sectiunea FILTERS ADDPROPERTY(loSettings, "OrderDaysBack", VAL(ReadPini("FILTERS", "OrderDaysBack", cINIFile))) RETURN loSettings ENDFUNC *-- Test conectivitate internet FUNCTION TestConnectivity LOCAL loHttp, llResult llResult = .T. TRY loHttp = CREATEOBJECT("WinHttp.WinHttpRequest.5.1") loHttp.Open("GET", "https://www.google.com", .F.) loHttp.SetTimeouts(5000, 5000, 5000, 5000) loHttp.Send() IF loHttp.Status != 200 llResult = .F. ENDIF CATCH llResult = .F. ENDTRY loHttp = NULL RETURN llResult ENDFUNC *-- Functie pentru codificare URL FUNCTION UrlEncode PARAMETERS tcString LOCAL lcResult, lcChar, lnI lcResult = "" FOR lnI = 1 TO LEN(tcString) lcChar = SUBSTR(tcString, lnI, 1) DO CASE CASE ISALPHA(lcChar) OR ISDIGIT(lcChar) OR INLIST(lcChar, "-", "_", ".", "~") lcResult = lcResult + lcChar OTHERWISE lcResult = lcResult + "%" + RIGHT("0" + TRANSFORM(ASC(lcChar), "@0"), 2) ENDCASE ENDFOR RETURN lcResult ENDFUNC *-- Functie pentru verificarea existentei fisierului INI FUNCTION CheckIniFile PARAMETERS cINIFile LOCAL llExists TRY llExists = FILE(cINIFile) CATCH llExists = .F. ENDTRY RETURN llExists ENDFUNC *-- Functie pentru crearea unui fisier INI implicit cu setari de baza FUNCTION CreateDefaultIni PARAMETERS cINIFile LOCAL llSuccess llSuccess = .T. TRY *-- Sectiunea API WritePini("API", "ApiBaseUrl", "https://api.gomag.ro/api/v1/product/read/json?enabled=1", cINIFile) WritePini("API", "OrderApiUrl", "https://api.gomag.ro/api/v1/order/read/json", cINIFile) WritePini("API", "ApiKey", "YOUR_API_KEY_HERE", cINIFile) WritePini("API", "ApiShop", "https://yourstore.gomag.ro", cINIFile) WritePini("API", "UserAgent", "Mozilla/5.0", cINIFile) WritePini("API", "ContentType", "application/json", cINIFile) *-- Sectiunea PAGINATION WritePini("PAGINATION", "Limit", "100", cINIFile) *-- Sectiunea OPTIONS WritePini("OPTIONS", "GetProducts", "1", cINIFile) WritePini("OPTIONS", "GetOrders", "1", cINIFile) *-- Sectiunea FILTERS WritePini("FILTERS", "OrderDaysBack", "7", cINIFile) CATCH llSuccess = .F. ENDTRY RETURN llSuccess ENDFUNC