Your IP : 216.73.216.86


Current Path : /var/www/homesaver/www/bitrix/modules/ipol.sdek/classes/lib/Admin/Grid/
Upload File :
Current File : /var/www/homesaver/www/bitrix/modules/ipol.sdek/classes/lib/Admin/Grid/DatabaseGrid.php

<?php
namespace Ipolh\SDEK\Admin\Grid;

use Ipolh\SDEK\Admin\Grid\AbstractGrid;
use Bitrix\Main\ORM\Query\Query;

/**
 * Class DatabaseGrid
 * @package Ipolh\SDEK\Admin\Grid
 */
abstract class DatabaseGrid extends AbstractGrid
{
    /**
     * Data fetch mode variants
     */
    const FETCH_AS_OBJECT = 1;
    const FETCH_AS_ARRAY  = 2;

    /**
     * @var string
     */
    protected $fetchMode;

    /**
     * @var array
     */
    protected $select = ['*'];

    /**
     * Return ORM data mapper for data selection
     *
     * @return \Bitrix\Main\ORM\Data\DataManager
     */
    abstract public function getDataMapper();

    /**
     * Get data fetch mode
     *
     * @return string
     */
    public function getFetchMode()
    {
        return $this->fetchMode;
    }

    /**
     * Set data fetch mode
     *
     * @param string $fetchMode use DatabaseGrid::FETCH_AS_ARRAY or DatabaseGrid::FETCH_AS_OBJECT
     * @return self
     */
    public function setFetchMode($fetchMode)
    {
        if (!in_array($fetchMode, [self::FETCH_AS_ARRAY, self::FETCH_AS_OBJECT]))
            $fetchMode = self::FETCH_AS_OBJECT;

        $this->fetchMode = $fetchMode;

        return $this;
    }

    /**
     * Get selected columns
     *
     * @return array
     */
    public function getSelect()
    {
        return $this->select;
    }

    /**
     * Set selected columns
     *
     * @param array $select
     * @return self
     */
    public function setSelect(array $select)
    {
        return $this->select = $select;
    }

    /**
     * Get raw data used for creating grid rows
     *
     * @return array
     */
    protected function getRawData()
    {
        $query  = $this->getQuery();
        //\Bitrix\Main\Diag\Debug::WriteToFile($query->getQuery(), 'SQL Query', '__'.IPOLH_SDEK_LBL.'_GridQuery.log');
        $result = $query->exec();

        if ($this->getFetchMode() === self::FETCH_AS_OBJECT) {
            $ret = [];
            while($item = $result->fetchObject()) {
                $ret[] = $item;
            }
        } else {
            $ret = $result->fetchAll();
        }

        $pagination = $this->getPagination();
        $pagination->setRecordCount($result->getCount());

        return $ret;
    }

    /**
     * Query constructor
     *
     * @return Query
     */
    protected function getQuery()
    {
        $dataMapper = $this->getDataMapper();

        $query = $dataMapper::query()->setSelect($this->getSelect())->setFilter($this->getFilterValues())->setOrder($this->getSorting())->countTotal(true);
        $pagination = $this->getPagination();

        if (!$pagination->allRecordsShown()) {
            $query->setLimit($pagination->getLimit());
            $query->setOffset($pagination->getOffset());
        }

        return $query;
    }
}