%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /www/varak.net/shop.varak.net/import/
Upload File :
Create Path :
Current File : /www/varak.net/shop.varak.net/import/Euromedia.php

<?php

/**
 * Created by PhpStorm.
 * User: Ludek
 * Date: 10. 9. 2016
 * Time: 13:40
 */
class Euromedia extends Nakladatel
{
    public $anotace = array();
    public $dostupnost = array();
    public $dostupnostEan = array();
    public $zanryPrevod = array();
    public $pocitadloKolikZpracuji;
    private $casoveRazitko = 0;
    public $published;
    public $nacetl;
    public $nacetlDostupnost;
    public $available_date;
    public $stareCasoveRazitko;
    public $f;

    public function __construct($timestamp)
    {
//        system("/bin/bash " . __DIR__ . "/import/euromedia.sh");
        $this->stareCasoveRazitko = file_get_contents(__DIR__ . "/import/euromedia_timestamp");
        echo "casove razitko - " . $this->stareCasoveRazitko . " \n";
        $this->stareCasoveRazitko = (int)$this->stareCasoveRazitko;
        $tokens = array();
        $this->nacetl = True;
        $this->nacetlDostupnost = True;
//        $tokens['titul.zip'] = file_get_contents("https://vo.knizniweb.cz/b2bGate?login=367443&password=mon*&synctype=T&timestamp=".$stareCasoveRazitko);
        $tokens['titul.zip'] = file_get_contents("https://vo.knizniweb.cz/b2bGate?login=367443&password=mon*&synctype=T");
        $tokens['anotace.zip'] = file_get_contents("https://vo.knizniweb.cz/b2bGate?login=367443&password=mon*&synctype=A");
        $tokens['dostupnost.zip'] = file_get_contents("https://vo.knizniweb.cz/b2bGate?login=367443&password=mon*&synctype=D");

        foreach ($tokens as $soubor => $token)
        {
            $url = "https://vo.knizniweb.cz/b2bGate?login=367443&password=mon*&token=".$token;
            if($this->downloadZipFile($url, $soubor))
                echo "nacetl $soubor \n";
            $path = "/tmp";
            $path2 = "/data";
            $zip = new ZipArchive;
            $res = $zip->open($soubor);
            if ($res === TRUE)
            {
                $zip->extractTo($path);
                $zip->extractTo($path2);
                $zip->close();
                echo "povedlo se $soubor rozbalit do $path \n";
            }
            else
            {
                echo "Nemohu otevrit soubor $soubor \n";
                if ($soubor <> 'dostupnost.zip')
                    $this->nacetl = false;
                else
                    $this->nacetlDostupnost = false;
            }
        }
    }

    function zpracujData()
    {
        if (!$this->nacetl)
            return;
        $this->nactiZanry();
        $this->nactiAnotace();
        $this->nactiDostupnost();
        if (!$this->nacetl)
            return;
        $this->pocitadloKolikZpracuji = 1;

        $nazev = "/www/varak.net/shop.varak.net/import/vstupy/Euromedia_".date("Ymd").".txt";
        $katalog = "/tmp/tituly.xml";
        copy($katalog, $nazev);
        $nazev = "/www/varak.net/shop.varak.net/import/vstupy/Euromedia_d_".date("Ymd").".txt";
        $katalog = "/tmp/dostupnost.xml";
        copy($katalog, $nazev);

        $tituly = simplexml_load_file('/tmp/tituly.xml');
//        $this->f = fopen("euromed.txt", "w");

        foreach ($tituly->titul as $titul)
        {
//            $this->zapisRazitko($titul);
            $this->zpracujTitul($titul);
        }
        echo " Zpracoval celkem " . (string)$this->pocitadloKolikZpracuji . " " . date('Y-m-d h:i:s') . " ---------- \n";
        echo 'Nove casove razitko: ' . $this->casoveRazitko . " \n";
//        fclose($this->f);
        file_put_contents(__DIR__ . "/import/euromedia_timestamp", $this->casoveRazitko);
    }

    function zapisRazitko($titul)
    {
        $id = (string)$titul->id;
        $ean = (string)$titul->ean;
        $casoveRazitko = (int)$titul->timestamp;
        fwrite($this->f, "$ean;$id;$casoveRazitko \n");
    }

    function zpracujTitul($titul)
    {

        $dataKnihyImport = array();
        $id = (string)$titul->id;
        $ean = (string)$titul->ean;
        $casoveRazitko = (int)$titul->timestamp;
        if ($casoveRazitko < $this->stareCasoveRazitko)
            return;
        $this->casoveRazitko = $casoveRazitko > $this->casoveRazitko ? $casoveRazitko : $this->casoveRazitko;
        // je v zakazanych kategoriich, nezpracovat
        $zanr = (string)($titul->zanry->zanr['id']);
        $zakazaneKateg = array("5001","5002","5003","5101","5103","5108","5109","5110","5111",
        "5112","5113","5114","5115","5116","5117","5118","5119","5120","5121","5122","5123","5124");
        if(in_array($zanr, $zakazaneKateg))
            return;
        if($this->dostupnost[$id] == '-1') return;     // nedostupne, nezpracovat

/*/ jednorazovka pro predobjednavky
        if(!isset($titul->parametry->predobjednavka)) return;
        if(isset($titul->parametry->predobjednavka))
        {
            $datumPredpoklad = $titul->parametry->predobjednavka['predpokladane-naskladneni'];
            $dataKnihyImport['available_date'] = $datumPredpoklad;
            $textDostupnosti = 'Připravovaný Dotisk / NOVINKA';
        }
        if (substr((string)$datumPredpoklad,0,4) <> 2016 and substr((string)$datumPredpoklad,0,4) <> 2017) return;
        if (substr((string)$datumPredpoklad,0,4) == 2016 and intval(substr((string)$datumPredpoklad,5,2)) < 8) return;
// konec jednorazovky
*/
        if (intval($titul->id) < 258609) return;    // neimportovat stare tituly - pred 2016
        $procen = ((double)$titul->{'dpc-aktualni'})/(1 + ((double)$titul->dph / 100));
        if ($procen < 50) return;                   // neimportovat levne knihz pod 50 Kc
        $knizka = null;
        $prestaId = $this->eanToId($ean);
        if(!$prestaId)
        {
            // Nova kniha
            $update = False;
            $knizka = new Kniha(false);
        }
        else if(strstr($prestaId->importId, 'euromedia-'))
        {
            // Update
            $update = True;
//            $knizka = new Kniha($prestaId->id);
        }
        else return;

        // Nastav data knihy
        $nazev = trim((string)$titul->nazev);
        $dataKnihyImport['name'] = $nazev;
        $dataKnihyImport['meta_title'] = $nazev;
        $dataKnihyImport['price'] = $procen;
        $dph = $titul->dph;
        $kodDPH = $dph == '10' ? 5 : ($dph == '21' ? 1 : ($dph == '15' ? 2 : 3));
        $dataKnihyImport['id_tax_rules_group'] = $kodDPH;
        $nakcen = sprintf("%0.2f", ((double)$titul->{'dpc-aktualni'}) * (100 - ((double)$titul->rabat)) / 100);
        $dataKnihyImport['wholesale_price'] = $nakcen;
        $dataKnihyImport['width'] = (int)$titul->rozmer2;
        $dataKnihyImport['height'] = (int)$titul->rozmer1;
        $dataKnihyImport['depth'] = (int)$titul->rozmer3;
        $dataKnihyImport['weight'] = (double)$titul->hmotnost / 1000;
        $dataKnihyImport['meta_description'] = trim((string)$titul->isbn);
        $dataKnihyImport['binding'] = trim((string)$titul->{'typ-produktu'});
        $dataKnihyImport['pages'] = (int)$titul->{'pocet-stran'};
        $dataKnihyImport['publisher'] = trim((string)$titul->nakladatel);
        $dataKnihyImport['ean'] = $ean;
        $dataKnihyImport['importId'] = "euromedia-" . (string)$titul->id;
        $dataKnihyImport['active'] = 1;
        $dataKnihyImport['published'] = (string)($titul->{'datum-uvedeni'});
        $dataKnihyImport['image_link'] = (string)($titul->obrazky->velky);
        $dataKnihyImport['Kde_dostupne'] = "E";

//      nacist a nastavit kategorii
        $nacteneZanry = array();
        if (isset($titul->zanry->zanr))
        {
            foreach($titul->zanry->zanr as $nactenyZanr)
            {
                $kodZanru = (string)$nactenyZanr['id'];
                $zanrMonami = $this->zanryPrevod[$kodZanru];
                $zanryVRadku = explode("/", $zanrMonami);
                foreach($zanryVRadku as $z1)
                {
                    if (! in_array($z1, $nacteneZanry))
                        $nacteneZanry[] = $z1;
                }
//            echo (string)$zanrMonami . " ; ";
            }
            $dataKnihyImport['genres'] = $nacteneZanry;
        }

        $txt = '';
        foreach($titul->autori as $autor)
        {
            $txt .= ($txt != '' ? "; " : "") . (string)$autor->autor;
        }
        $dataKnihyImport['author'] = $txt;
        $anotace = "";
        if(isset($this->anotace[$id]))
        {
            if (isset($titul->zanry->zanr))
                $anotace = (string)$titul->zanry->zanr . " - " . $this->anotace[$id];
            if ($txt <> "")
                $anotace = $this->anotace[$id] . " / " . $txt;
        }
        $dataKnihyImport['description'] = $anotace;

// dostupnost, novinka, dotisk
//        $datumNovinka = '0000-00-00';
        if(isset($titul->parametry->novinka))
        {
            $datumVydani = (string)($titul->parametry->novinka['datum']);
            $dataKnihyImport['available_date'] = $datumVydani;
            $textDostupnosti = 'Novinka';
        }
        else
            $textDostupnosti = 'Skladem u dodavatele';
        // Neni dostupna, oznacit jako nedostupne
        if($this->dostupnost[$id] == '-1')
            $textDostupnosti = 'NEDOSTUPNÉ';

        if($this->dostupnost[$id] == '1')
        {
            if (!isset($titul->parametry->predobjednavka))
                $textDostupnosti = 'NEDOSTUPNÉ';
        }
        if(isset($titul->parametry->predobjednavka))
        {
            $datumPredpoklad = $titul->parametry->predobjednavka['predpokladane-naskladneni'];
            $dataKnihyImport['available_date'] = $datumPredpoklad;
            $textDostupnosti = 'Připravovaný Dotisk / NOVINKA';
        }
        $dataKnihyImport['available_later'] = $textDostupnosti;

        $necoNesedi = False;
        if (!$update)
        {
            $knizka->nastavDataImportu($dataKnihyImport);
            $knizka->uloz();
        }
        else        // update zapisem polozek primo na SQL server
        {
            $dataKnihySQL = $this->nactiDataSQL($ean);
            if (!$dataKnihySQL)
            {
                echo "nemohu nacist data o knize ze serveru " . $ean . " \n";
                $this->pocitadloKolikZpracuji++;
                return;
            }
//            print_r ($dataKnihySQL);
            $necoNesedi = $this->PorovnejAZapisPamametryKnihy($dataKnihyImport,$dataKnihySQL);
        }
        if (!$update or $necoNesedi)
        {
            $this->pocitadloKolikZpracuji++;
            echo (string)$this->pocitadloKolikZpracuji . " " . date('Y-m-d h:i:s') . " " . $nazev . " ----- " . $ean . " ----- \n";
        }
    }

    function nactiAnotace()
    {
        $anotace = simplexml_load_file('/tmp/anotace.xml');
        if ($anotace == False)
           $this->nacetl = False;
        foreach($anotace->titul as $titul)
        {
            $id = (string)$titul['id'];
            $text = trim((string)$titul);
            $this->anotace[$id] = $text;
        }
    }

    function nactiDostupnost()
    {
        $dostupnost = simplexml_load_file('/tmp/dostupnost.xml');
        if ($dostupnost == False)
            $this->nacetlDostupnost = False;
        foreach($dostupnost->titul as $titul)
        {
            $id = (string)$titul['id'];
            $text = trim((string)$titul);
            $ean = (string)$titul['ean'];
            $this->dostupnost[$id] = $text;
            if ($ean <> "")
                $this->dostupnostEan[$ean] = $text;
        }

    }

    function nactiZanry()
    {
        $f = file(__DIR__ . '/genres.csv');
        foreach($f as $zanr)
        {
            list($name, $euroid, $newid) = explode(";", $zanr);
            if ($name != "zanr")
                $this->zanryPrevod[$euroid] = $newid;
        }

    }

    function zpracujDostupnost()
    {
        if (!$this->nacetlDostupnost)
            return;
        $this->pocitadloKolikZpracuji = 0;
        $kdeDostupne = "E";
        $this->nactiDostupnost();
        $dnesniDatum = time();
        $nula = 1;
        $updateData = array('active' => $nula);
        foreach ($this->dostupnostEan as $ean => $dostupnost)
        {
            $hodnotyDostupnosti = $this->zjistiDostupnost($ean);
            if (!$hodnotyDostupnosti)
                continue;                // neni v eshopu
            $vydaniTimestamp = strtotime($this->published);
            $mesic = 30*24*60*60;                               // delka mesice v sekundach
            if ($dostupnost > 1)
                $textDostupnosti = 'Skladem u dodavatele';
            else if ($dostupnost == 1 and $vydaniTimestamp + $mesic > $dnesniDatum)
                $textDostupnosti = ('Připravovaný Dotisk / NOVINKA');
                else
                    $textDostupnosti = 'NEDOSTUPNÉ';

            if ($textDostupnosti <> trim($hodnotyDostupnosti->available_later) and ($kdeDostupne == $hodnotyDostupnosti->Kde_dostupne or $hodnotyDostupnosti->Kde_dostupne == "N" or $textDostupnosti <> 'NEDOSTUPNÉ'))
            {
                $this->pocitadloKolikZpracuji++;
                echo 'E ' . $this->pocitadloKolikZpracuji . "zapsat novou dostupnost pro: " . $ean . " - stavajici: $hodnotyDostupnosti->available_later nova: $textDostupnosti \n";
                dibi::update("ps_product_lang", array('available_later' => $textDostupnosti, 'Kde_dostupne' => $kdeDostupne))->where("id_product = %i", $hodnotyDostupnosti->idKnihy)->execute();
            }
            if ($textDostupnosti == 'NEDOSTUPNÉ')
                dibi::update("ps_product_shop", $updateData)->where("id_product = %i", $hodnotyDostupnosti->idKnihy)->execute();
        }
        echo $this->pocitadloKolikZpracuji . " = celkovy pocet zapsanych zmen dostupnosti \n";
    }

/*    function opravDPH()
    {
        $kodDPH = $this->ZjistiKodDPH($ean);
        if ($kodDPH == 3)
        {
            $dph = $titul->dph;
            $novyKodDPH = $dph == '10' ? 5 : ($dph == '21' ? 1 : ($dph == '15' ? 2 : 3));
            $updateData = array('id_tax_rules_group' => $novyKodDPH);
            dibi::update("ps_product", $updateData)->where("id_product = %i", $this->idKnihy)->execute();
            dibi::update("ps_product_shop", $updateData)->where("id_product = %i", $this->idKnihy)->execute();
        }
        return;
    }
*/
}

Zerion Mini Shell 1.0