*    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    
*
* program je rizen textovym souborem s priponou ".lic"
*
* licencovani je rizeno radky, ktere vypadaji takhle:
*
*             i:\d_strah\food_set.licencicka="ASDFG-QWERT-ZXCVB"
*
*      az po tecku jejmeno databaze vcetne cesty (zde i:\d_strah\food_set.dbf), 
*      za teckou je jmeno promenne (radek) ve food_set.dbf (sloupec VAR_NAME), 
*      za rovnitkem hodnota, ktera bude zapsana do sloupce VAR_VALUE .
*      pokud radek s prislusnou VAR_NAME neexistuje, je pridan.
*      temito radky lze najednou licencovat vice instanci u jednoho zakaznika (zradlo + mtz)
*
* napr.    i:\d_strah\food_set.licencicka="ASDFG-QWERT-ZXCVB"
*          i:\d_strah_mtz\food_set.licencicka="VFCDS-POIJK-NJMKI"
*
* z techto radku se pouziji cesty, z nichz se food_dat.dbf + food_set.dbf posle na FTP, aby vubec bylo podle ceho licencovat
*
*    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    
*
* upgrade software je rizen radky, ktere obsahuji string ".zip" nebo ".7z" a vypadaji takhle:
*
*            i:\food666\food600.zip=<nepovinny parametr>
*
* zde se stahne soubor food600.zip a rozbali se do adresare i:\food666\
* pred stahovanim souboru .zip se nejdriv stahne stejnojmenny textovy soubor s priponou ".ver"
* verze v nem se porovna s textovym souborem v cilovem adresari (zde i:\food666\food600.ver)
* podle toho se rozhodne, jestli vubec downloadovat.
* pripadny parametr za mezerou se pouzije napr. pro zadani hesla k rozzipovani prikazem 7za.exe, cili musi obsahovat i switch "-p"
*
*    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    
*
* pokud na FTP serveru soubor *.lic neexistuje, program aspon najde vsechny adresare "d_*" a "f6*" NAD spoustecim adresarem a posle z nich food_dat+food_set+errors
* soubor .lic bude na serveru vytvoren s radkem se seznamem nalezenych adresaru
*
* pokud neni jako parametr zadano jmeno definicniho souboru, pouzije se jmeno definicniho souboru pro ftp.exe 
*       (sekce [FtpTransfer], radek DefFile=<jmenosoboru>)
*
*  2013-07-08: kdyz na serveru existuje soubor .lic, ale neobsahuje korektni ridici radky, provede se hledani datovych adresaru
*
*    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    

PARAMETERS food_lic_filename

IF EMPTY(m.food_lic_filename)
   food_lic_filename = m.pri_path + LOWER(JUSTSTEM(m.def_file))
ELSE
   food_lic_filename = LOWER(JUSTPATH(m.food_lic_filename) + "\" + JUSTSTEM(m.food_lic_filename))
ENDIF 

= write_to_resultfile (crlf)
DO ftp__get WITH JUSTSTEM(m.food_lic_filename) + ".lic", JUSTSTEM(m.food_lic_filename) + ".lic", (m.pri_path)

ftp__txt = ""
hledat_datova_adresare = .T.
CLOSE DATABASES
fh = FOPEN(food_lic_filename + ".lic")
IF m.fh > 0

    SELECT MAX(seq) as max_seq FROM (m.pri_path + "def_file") INTO CURSOR max_seq
    SCATTER memvar
    DO WHILE .not. FEOF(m.fh)
         radek = ALLTRIM(FGETS(m.fh))
         soubor = ALLTRIM(LEFT(m.radek, AT("=", m.radek)-1))

         DO CASE 
         CASE (".zip" $ m.radek) .or. (".7z" $ m.radek)

             DO get__update WITH m.radek
             hledat_datova_adresare = .F.

         CASE "\" $ radek .and. "=" $ radek 
             var_name = JUSTEXT(m.soubor)
             var_value = subst(m.radek, AT("=", m.radek)+1)
             soubor = JUSTPATH(m.soubor) + "\" + JUSTSTEM(m.soubor) + ".dbf"
             ftp__txt = ftp__txt + JUSTPATH(m.soubor) + "  "
             DO priprav_soubory_k_odeslani

             IF FILE(m.soubor)
                 SELECT 0
                 USE (m.soubor)
                 LOCATE FOR var_name = m.var_name
                 IF FOUND()
                      GATHER FIELDS var_value MEMVAR 
                 ELSE 
                      INSERT INTO (m.soubor) (var_name, var_value) VALUES (m.var_name, m.var_value)
                 ENDIF 
                 USE
             ENDIF 
             hledat_datova_adresare = .F.
         ENDCASE 
    ENDDO
    FCLOSE(m.fh) 
    write_to_resultfile ( crlf + "GEN_LIC: zpracovany adresare: " + m.ftp__txt + m.crlf)
ENDIF 

IF  hledat_datova_adresare

    pocetadresaru = ADIR(qqq, gcini_path + "..\d_*","D")
    DO priprav_seznam_adresaru

    pocetadresaru = ADIR(qqq, gcini_path + "..\f6*","D")
    DO priprav_seznam_adresaru

    write_to_resultfile ( crlf + "GEN_LIC: k ini_path=" + gcini_path + " nalezeny datove adresare: " + m.ftp__txt + m.crlf)

    = STRTOFILE(m.ftp__txt + m.crlf, m.pri_path + JUSTSTEM(food_lic_filename) + ".lic")
    DO ftp__send WITH JUSTSTEM(food_lic_filename) + ".lic", JUSTSTEM(food_lic_filename) + ".lic", (m.pri_path)

ENDIF
CLOSE DATABASES

DELETE FILE (m.pri_path + "\" + JUSTSTEM(food_lic_filename) + ".zip")
ftp__cmd = 'run "' + m.gcini_path + '7za.exe a -tzip -r ' + m.pri_path + "\" + JUSTSTEM(food_lic_filename) + ".zip " + m.pri_path + "odeslat\*" + ' "'
&ftp__cmd
    
DO ftp__send WITH JUSTSTEM(food_lic_filename) + ".zip", JUSTSTEM(food_lic_filename) + ".zip", (m.pri_path)


*    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    
PROCEDURE priprav_seznam_adresaru
FOR iii = 1 TO pocetadresaru
   IF "D" $ qqq(iii, 5)
       ftp__txt = ftp__txt + qqq(iii, 1) + "  "
       soubor = gcini_path + "..\" + LOWER(qqq(iii, 1)) + "\qwe.qwe"
       DO priprav_soubory_k_odeslani

   ENDIF 
ENDFOR 

*    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    
PROCEDURE priprav_soubory_k_odeslani
 genl_cesticka = m.pri_path + "odeslat\" + STRTRAN(JUSTPATH(m.soubor), ":\", "-") + "\"
 IF .not. DIRECTORY(genl_cesticka)
       MKDIR (genl_cesticka)
 ENDIF 
 DO copy_dbf WITH JUSTPATH(m.soubor) + "\food_??t.*", m.genl_cesticka
 DO copy_dbf WITH JUSTPATH(m.soubor) + "\errors.*",   m.genl_cesticka

*    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    *    
PROCEDURE get__update
PARAMETERS radek
SELECT MAX(seq) as max_seq FROM (m.pri_path + "def_file") INTO CURSOR max_seq
SCATTER memvar
soubor    = LOWER(ALLTRIM(LEFT(m.radek,  AT("=", m.radek) - 1)))
zip_param = ALLTRIM(subst(m.radek, AT("=", m.radek) + 1))

STORE "1111-11-11" TO verze_k_disposici, existujici_verze

DO ftp__get WITH LOWER(JUSTSTEM(m.soubor)) + ".ver", LOWER(JUSTSTEM(m.soubor)) + ".ver", (m.pri_path)

IF FILE(JUSTPATH(m.soubor) + "\" + JUSTSTEM(m.soubor) + ".ver")
    existujici_verze  = LEFT(ALLTRIM(FILETOSTR(JUSTPATH(m.soubor) + "\" + JUSTSTEM(m.soubor) + ".ver")), 10)
ENDIF 

IF FILE(m.pri_path + JUSTSTEM(m.soubor) + ".ver")
    verze_k_disposici = LEFT(ALLTRIM(FILETOSTR(m.pri_path + JUSTSTEM(m.soubor) + ".ver")), 10)
ENDIF 

IF verze_k_disposici > m.existujici_verze

    = write_to_resultfile ( crlf + "     / / / /  upgrade " + UPPER(JUSTSTEM(m.soubor)) + " z verze " + m.existujici_verze + " na verzi " + m.verze_k_disposici + "  / / / /" + m.crlf)
    DO ftp__get with JUSTFNAME(m.soubor), JUSTFNAME(m.soubor), (m.pri_path)

    ftp__cmd = 'run "' + m.gcini_path + '7za.exe x -y ' + m.zip_param + " " + m.pri_path + JUSTFNAME(m.soubor) + ' -o' + JUSTPATH(m.soubor) + ' "'
    &ftp__cmd

 ELSE 
    = write_to_resultfile ( crlf + SPACE(10) + UPPER(JUSTSTEM(m.soubor)) + " ver." + m.existujici_verze + " se NEUPGRADUJE na verzi " + m.verze_k_disposici + m.crlf)
 ENDIF 

CLOSE DATABASES 
