Overview

Namespaces

  • App
    • Components
    • Interfaces
    • Lib
      • Files
      • Forms
        • Controls
      • Html
      • Repair
      • Statics
    • Model
    • Modules
      • BaseModule
        • Presenters
      • PartnersModule
        • Presenters
      • ProductModule
        • Presenters
      • SaleModule
        • Model
        • Presenters
      • SettingsModule
        • Model
        • Presenters
      • StoreModule
        • Model
        • Presenters
    • Presenters
    • Router
  • PHP

Classes

  • DateTime
  • SplFileInfo

Interfaces

  • ArrayAccess
  • Countable
  • Exception
  • Iterator
  • Traversable
  • Overview
  • Namespace
  • Class
  • Tree
  • Deprecated
  • Download
  1: <?php
  2: 
  3: /**
  4:  * Project sberp
  5:  *
  6:  * @file Table 
  7:  * @author Jaromír Polášek
  8:  * @version 0.7.1.FORM
  9:  * Encoding UTF-8
 10:  */
 11: 
 12: namespace App\Lib\Html;
 13: 
 14: use Nette\Object,
 15:     Nette\Utils\Html,
 16:     App\Interfaces as I,
 17:     App\Lib\Statics\Cons,
 18:     App\Lib\Statics\Vars;
 19: 
 20: /**
 21:  * Generuje HTML kód Tabulky
 22:  */
 23: class Table extends Object implements I\IHtml {
 24: 
 25:     /** @var \Nette\Database\Selection */
 26:     private $fields;
 27: 
 28:     /** @var \Nette\Database\Selection */
 29:     private $data;
 30: 
 31:     /** @var boolean */
 32:     private $footer;
 33: 
 34:     /** @var string Table ID */
 35:     private $id;
 36: 
 37:     /** @var string $link */
 38:     private $link;
 39: 
 40:     /**
 41:      * Konstruktor přijmá parametry pro vygenerování kódu tabulky
 42:      * @param Url $link
 43:      * @param Nette\Database\Table\GroupedSelection $fields
 44:      * @param Nette\Database\Table\Selection $data
 45:      * @param boolean $footer
 46:      * @param string $id
 47:      */
 48:     public function __construct($link, $fields, $data, $footer = false, $id = null) {
 49:     $this->fields = $fields;
 50:     $this->data = $data;
 51:     $this->footer = $footer;
 52:     $this->id = ($id) ? 'list_table_' . $id : 'list_table';
 53:     $this->link = $link;
 54:     }
 55: 
 56:     /**
 57:      * Vrací HTML kód tabulky
 58:      * <table>...</table>
 59:      * @return \Nette\Utils\Co
 60:      */
 61:     public function getCode() {
 62:     $table = Html::el('table')->addAttributes(array('id' => $this->id, 'class' => 'display'));
 63:     $table->insert(NULL, $this->getTableHead($this->fields));
 64:     (!$this->footer)? :
 65:             $table->insert(NULL, $this->getTableFoot($this->data, $this->fields));
 66:     $table->insert(NULL, $this->getTableBody($this->data, $this->fields));
 67:     return $table;
 68:     }
 69: 
 70:     /**
 71:      * Vrací tělo tabulky
 72:      * <tbody>...</tbody>
 73:      * @param Nette\Database\Table\Selection $data
 74:      * @param Nette\Database\Table\GroupedSelection $fields
 75:      * @return Nette\Utils\Html
 76:      */
 77:     private function getTableBody($data, $fields) {
 78:     $body = Html::el('tbody');
 79:     foreach ($data as $row) {
 80:         $body->insert($row[Cons::COLUMN_ID], $this->getBodyTr($row, $fields));
 81:     }
 82:     return $body;
 83:     }
 84: 
 85:     /**
 86:      * Vrací zápatí tabulky
 87:      * <tfoot>...<tfoot>
 88:      * @param Nette\Database\Selection $data
 89:      * @param Nette\Database\Table\GroupedSelection $fields
 90:      * @return Nette\Utils\Html
 91:      */
 92:     private function getTableFoot($data, $fields) {
 93:     return Html::el('tfoot')->add($this->getFootTr($data, $fields));
 94:     }
 95: 
 96:     /**
 97:      * Vrací hlavičku tabulky
 98:      * <thead>...</thead>
 99:      * @param \Nette\Database\Table\GroupedSelection $fields
100:      * @return \Nette\Utils\Html
101:      */
102:     private function getTableHead($fields) {
103:     return Html::el('thead')->add($this->getHeadTr($fields));
104:     }
105: 
106:     /**
107:      * Vrací řádek dat tabulky
108:      * <tr class="tr-click" data-href="{link show, $source, $id}">...</tr>
109:      * @param Nette\Database\Table\ActiveRow $activeRowData
110:      * @param Nette\Database\GroupedSelection $fields
111:      * @return App\Lib\Html\Code
112:      */
113:     private function getBodyTr($activeRowData, $fields) {
114:     $linkArray = explode('?', $this->link);
115:         $link = $linkArray[0] . '/' . $activeRowData[Cons::COLUMN_ID];
116:         $link .= isset($linkArray[1]) ? '?'.$linkArray[1]:'';
117:     $tr = Html::el('tr class="tr-click"')
118:         ->data('href', $link);
119:     foreach ($fields as $field) {
120:         $tr->insert(NULL, $this->getBodyTd($activeRowData, $field));
121:     }
122:     return $tr;
123:     }
124: 
125:     /**
126:      * Vrací řádek zápatí se součty číselných sloupců
127:      * @param Nette\Database\Selection $data
128:      * @param string $fields
129:      * @return Nette\Utils\Html
130:      */
131:     private function getFootTr($data, $fields) {
132:     $tr = Html::el('tr');
133:     foreach ($fields as $row) {
134:         $tr->insert(
135:             (isset($row[Cons::COLUMN_FOOTER]) && $row[Cons::COLUMN_TYPE] === ('float' || 'integer' )) ?
136:                 $this->getFootTd($data, $row[Cons::COLUMN_FIELD]) : $this->getFootTd());
137:     }
138:     return $tr;
139:     }
140: 
141:     /**
142:      * Vrací řádek hlavičky tabulky
143:      * <tr>...</tr>
144:      * @param Nette\Database\Table\GroupedSelection $fields
145:      * @return Nette\Utils\Html
146:      */
147:     private function getHeadTr($fields) {
148:     $tr = Html::el('tr');
149:     foreach ($fields as $row) {
150:         $tr->insert($row[Cons::COLUMN_SEQ], $this->getHeadTh($row[Cons::COLUMN_NAME]));
151:     }
152:     return $tr;
153:     }
154: 
155:     /**
156:      * Vrací sloupec dat tabulky
157:      * <td>$field</td>
158:      * @param Nette\Database\Table\ActiveRow $activeRowData
159:      * @param string $field 
160:      * @return Nette\Utils\Html
161:      */
162:     private function getBodyTd($activeRowData, $field, $td = '') {
163:     if (isset($activeRowData[$field[Cons::COLUMN_FIELD]])) {
164:         $td = $activeRowData[$field[Cons::COLUMN_FIELD]];
165:         if ($field[Cons::COLUMN_LENGHT] === 1) {
166:         $td = $this->getBinar($activeRowData, $field);
167:         }
168:         if (isset($field[Cons::COLUMN_RELATION]) && $field[Cons::COLUMN_RELATION] !== "" && \Nette\Utils\Strings::endsWith($field[Cons::COLUMN_FIELD], '_id')) {
169:         $td = $this->getRelation($activeRowData, $field);
170:         }
171:     }
172:     return Html::el('td')->setText($td);
173:     }
174: 
175:     /**
176:      * Vrací sloupec hlavičky tabulky
177:      * <th>Název sloupce</th>
178:      * @param string $field 
179:      * @return \Nette\Utils\Html
180:      */
181:     private function getHeadTh($field) {
182:     return Html::el('th')
183:             ->setText($field);
184:     }
185: 
186:     /**
187:      * Vrací součet sloupce pro footer
188:      * <td>...</td> 
189:      * @param Nette\Database\Selection $data
190:      * @param string $field
191:      * @return Nette\Utils\Html
192:      */
193:     private function getFootTd($data = null, $field = null) {
194:     return Html::el('td')->setText(
195:             ($data && $field) ?
196:                 $data->sum($field) : NULL
197:     );
198:     }
199: 
200:     /**
201:      * Vytvoří relaci HasOne
202:      * @param Nette\Database\Table\ActiveRow $activeRowData
203:      * @param Nette\Database\Table\ActiveRow $field
204:      * @return string
205:      */
206:     private function getRelation($activeRowData, $field) {
207:     $target = explode(',',rtrim(strtolower($field[Cons::COLUMN_RELATION]),'/null'));    
208:     $ref = ($field[Cons::COLUMN_FIELD] === Cons::COLUMN_PARENT) ?
209:         $activeRowData->ref($field[Cons::COLUMN_TABLE.'_'.Cons::COLUMN_ID], $field[Cons::COLUMN_FIELD]) :
210:         $activeRowData->ref(str_replace('_id', '', $field[Cons::COLUMN_FIELD]));
211:     $relation = '';
212:     foreach ($target as $item){
213:         if ($item === reset($target)) {
214:             $relation .= $ref[$item];
215:         } else {
216:             $relation .= ' ,' . $ref[$item];
217:         }
218:     }
219:     return ($relation === Cons::ROOT) ? '' : $relation;
220:     }
221:     
222:     /**
223:      * Převede boolean hodnoty na Aktivní/Neaktivní nebo Ano/Ne
224:      * @param Nette\Database\Table\ActiveRow $activeRowData
225:      * @param array $field
226:      * @return string
227:      */
228:     private function getBinar($activeRowData, $field){
229:     return ($field[Cons::COLUMN_FIELD] === 'state') ?
230:             Vars::active($activeRowData[$field[Cons::COLUMN_FIELD]]) :
231:             Vars::aN($activeRowData[$field[Cons::COLUMN_FIELD]]);
232:     }
233: }
sberp API API documentation generated by ApiGen