| 1 | <?php
|
|---|
| 2 |
|
|---|
| 3 | class DbPageListView extends PageListView
|
|---|
| 4 | {
|
|---|
| 5 | var $SQL;
|
|---|
| 6 | var $Table;
|
|---|
| 7 | var $Database;
|
|---|
| 8 | var $ShowTotal;
|
|---|
| 9 | var $Filter;
|
|---|
| 10 | var $OnRowDraw;
|
|---|
| 11 | var $OrderDirSQL;
|
|---|
| 12 |
|
|---|
| 13 | function __construct()
|
|---|
| 14 | {
|
|---|
| 15 | parent::__construct();
|
|---|
| 16 | $this->ShowTotal = true;
|
|---|
| 17 | $this->SQL = '';
|
|---|
| 18 | $this->OrderDirSQL = array('ASC', 'DESC');
|
|---|
| 19 | }
|
|---|
| 20 |
|
|---|
| 21 | function Show(): string
|
|---|
| 22 | {
|
|---|
| 23 | // Get total item count in database
|
|---|
| 24 | $Query = 'SELECT COUNT(*) FROM '.$this->SQL;
|
|---|
| 25 | $DbResult = $this->Database->query($Query);
|
|---|
| 26 | $DbRow = $DbResult->fetch_assoc();
|
|---|
| 27 | $TotalCount = $DbRow['COUNT(*)'];
|
|---|
| 28 |
|
|---|
| 29 | $ColumnSQL = array();
|
|---|
| 30 | foreach ($this->Columns as $Column)
|
|---|
| 31 | {
|
|---|
| 32 | $ColumnSQL[] = $Column->Name;
|
|---|
| 33 | }
|
|---|
| 34 | $ColumnSQL = implode(', ', $ColumnSQL);
|
|---|
| 35 |
|
|---|
| 36 | // Get total filtered item count in database
|
|---|
| 37 | if ($this->Filter != '')
|
|---|
| 38 | {
|
|---|
| 39 | $Query = 'SELECT COUNT(*) FROM (SELECT '.$ColumnSQL.' FROM '.$this->SQL.') AS `TS` '.$this->Filter;
|
|---|
| 40 | $DbResult = $this->Database->query($Query);
|
|---|
| 41 | $DbRow = $DbResult->fetch_row();
|
|---|
| 42 | $TotalFilteredCount = $DbRow[0];
|
|---|
| 43 | } else $TotalFilteredCount = $TotalCount;
|
|---|
| 44 | $this->PageSelect->Count = $TotalFilteredCount;
|
|---|
| 45 |
|
|---|
| 46 | $this->Rows = array();
|
|---|
| 47 | $VisibleItemCount = 0;
|
|---|
| 48 | if (($this->SortOrder != 0) and ($this->SortOrder != 1)) $this->SortOrder = 0;
|
|---|
| 49 | //if ($this->SortColumn)
|
|---|
| 50 | $this->SortColumn = $this->Columns[0]->Name;
|
|---|
| 51 | $this->OrderSQL = ' ORDER BY `'.$this->SortColumn.'` '.$this->OrderDirSQL[$this->SortOrder];
|
|---|
| 52 | $SQLLimit = ' LIMIT '.$this->PageSelect->Position * $this->PageSelect->PageSize.', '.$this->PageSelect->PageSize;
|
|---|
| 53 | $Query = 'SELECT * FROM (SELECT '.$ColumnSQL.' FROM '.$this->SQL.') AS `TS` '.
|
|---|
| 54 | $this->Filter.' '.$this->OrderSQL.$SQLLimit;
|
|---|
| 55 | $DbResult = $this->Database->query($Query);
|
|---|
| 56 | while ($DbRow = $DbResult->fetch_assoc())
|
|---|
| 57 | {
|
|---|
| 58 | if (method_exists($this->OnRowDraw[0], $this->OnRowDraw[1]))
|
|---|
| 59 | $DbRow = call_user_func($this->OnRowDraw, $DbRow);
|
|---|
| 60 | $this->Rows[] = $DbRow;
|
|---|
| 61 | $VisibleItemCount = $VisibleItemCount + 1;
|
|---|
| 62 | }
|
|---|
| 63 | $Row = '<td colspan="'.count($this->Columns).'" style="text-align: right;">Zobrazeno <strong>'.$VisibleItemCount.'</strong>';
|
|---|
| 64 | if ($this->Filter != '') $Row .= ' z filtrovaných <strong>'.$TotalFilteredCount.'</strong>';
|
|---|
| 65 | $Row .= ' z celkem <strong>'.$TotalCount.'</strong>';
|
|---|
| 66 | $ListView->Rows[] = $Row;
|
|---|
| 67 | $Output = parent::Show();
|
|---|
| 68 | return $Output;
|
|---|
| 69 | }
|
|---|
| 70 | }
|
|---|