public function render()
 {
     if (count($this->controls) == 0) {
         return;
     }
     switch ($this->layout) {
         case self::LAYOUT_FORM1COL:
         case self::LAYOUT_FORM2COL:
         case self::LAYOUT_FORM3COL:
         case self::LAYOUT_FORM4COL:
             $columns = array();
             for ($i = 0; $i < $this->column; $i++) {
                 $columns[$i] = array('controls' => array(), 'columnClass' => $this->columnDefinition[$this->column - 1]->columnClass, 'labelClass' => $this->columnDefinition[$this->column - 1]->labelClass, 'controlClass' => $this->columnDefinition[$this->column - 1]->controlClass);
             }
             foreach ($this->controls as $control) {
                 $columns[$control->column - 1]['controls'][] = $control;
             }
             $context = array('columns' => $columns, 'layout' => $this->layout);
             echo ThemeBootstrap::get()->renderBlock('controls.twig.html', 'view_Ncol', $context);
             break;
         case self::LAYOUT_TABLE:
             $context = array('controls' => $this->controls, 'layout' => $this->layout);
             echo ThemeBootstrap::get()->renderBlock('controls.twig.html', 'view_table', $context);
             break;
         case self::LAYOUT_INLINE:
             $context = array('controls' => $this->controls, 'layout' => $this->layout);
             echo ThemeBootstrap::get()->renderBlock('controls.twig.html', 'view_inline', $context);
             break;
         default:
             $context = array('controls' => $this->controls, 'layout' => $this->layout);
             echo ThemeBootstrap::get()->renderBlock('controls.twig.html', 'view', $context);
     }
     $this->reset();
 }
 function pager(&$pager)
 {
     global $use_popup_windows, $use_date_picker, $path_to_root;
     $pager->select_records();
     div_start("_{$pager->name}_span");
     $headers = array();
     foreach ($pager->columns as $num_col => $col) {
         // record status control column is displayed only when control checkbox is on
         if (isset($col['head']) && ($col['type'] != 'inactive' || get_post('show_inactive'))) {
             if (!isset($col['ord'])) {
                 $headers[] = $col['head'];
             } else {
                 $icon = $col['ord'] == 'desc' ? 'sort_desc.gif' : ($col['ord'] == 'asc' ? 'sort_asc.gif' : 'sort_none.gif');
                 $headers[] = navi_button($pager->name . '_sort_' . $num_col, $col['head'], true, $icon);
             }
         }
     }
     /* show a table of records returned by the sql */
     start_table(TABLESTYLE, "width={$pager->width}");
     table_header($headers);
     if ($pager->header_fun) {
         // if set header handler
         start_row("class='{$pager->header_class}'");
         $fun = $pager->header_fun;
         if (method_exists($pager, $fun)) {
             $h = $pager->{$fun}($pager);
         } elseif (function_exists($fun)) {
             $h = $fun($pager);
         }
         foreach ($h as $c) {
             // draw header columns
             $pars = isset($c[1]) ? $c[1] : '';
             label_cell($c[0], $pars);
         }
         end_row();
     }
     $cc = 0;
     // row colour counter
     foreach ($pager->data as $line_no => $row) {
         $marker = $pager->marker;
         if ($marker && $marker($row)) {
             start_row("class='{$pager->marker_class}'");
         } else {
             alt_table_row_color($cc);
         }
         foreach ($pager->columns as $k => $col) {
             $coltype = $col['type'];
             $cell = isset($col['name']) ? $row[$col['name']] : '';
             if (isset($col['fun'])) {
                 // use data input function if defined
                 $fun = $col['fun'];
                 if (method_exists($pager, $fun)) {
                     $cell = $pager->{$fun}($row, $cell);
                 } elseif (function_exists($fun)) {
                     $cell = $fun($row, $cell);
                 } else {
                     $cell = '';
                 }
             }
             switch ($coltype) {
                 // format column
                 case 'time':
                     label_cell($cell, "width=40");
                     break;
                 case 'date':
                     label_cell(sql2date($cell), "align='center' nowrap");
                     break;
                 case 'dstamp':
                     // time stamp displayed as date
                     label_cell(sql2date(substr($cell, 0, 10)), "align='center' nowrap");
                     break;
                 case 'tstamp':
                     // time stamp - FIX user format
                     label_cell(sql2date(substr($cell, 0, 10)) . ' ' . substr($cell, 10), "align='center'");
                     break;
                 case 'percent':
                     percent_cell($cell);
                     break;
                 case 'amount':
                     if ($cell == '') {
                         label_cell('');
                     } else {
                         amount_cell($cell, false);
                     }
                     break;
                 case 'qty':
                     if ($cell == '') {
                         label_cell('');
                     } else {
                         qty_cell($cell, false, isset($col['dec']) ? $col['dec'] : null);
                     }
                     break;
                 case 'email':
                     email_cell($cell, isset($col['align']) ? "align='" . $col['align'] . "'" : null);
                     break;
                 case 'rate':
                     label_cell(number_format2($cell, user_exrate_dec()), "align=center");
                     break;
                 case 'inactive':
                     if (get_post('show_inactive')) {
                         $pager->inactive_control_cell($row);
                     }
                     break;
                 default:
                     // case 'text':
                     if (isset($col['align'])) {
                         label_cell($cell, "align='" . $col['align'] . "'");
                     } else {
                         label_cell($cell);
                     }
                 case 'skip':
                     // column not displayed
             }
         }
         end_row();
     }
     // end of while loop
     if ($pager->footer_fun) {
         // if set footer handler
         start_row("class='{$pager->footer_class}'");
         $fun = $pager->footer_fun;
         if (method_exists($pager, $fun)) {
             $h = $pager->{$fun}($pager);
         } elseif (function_exists($fun)) {
             $h = $fun($pager);
         }
         foreach ($h as $c) {
             // draw footer columns
             $pars = isset($c[1]) ? $c[1] : '';
             label_cell($c[0], $pars);
         }
         end_row();
     }
     start_row("class='navibar'");
     $colspan = count($pager->columns);
     $inact = @$pager->inactive_ctrl == true ? ' ' . checkbox(null, 'show_inactive', null, true) . _("Show also Inactive") : '';
     end_row();
     end_table();
     $but_pref = $pager->name . '_page_';
     // 			if (@$pager->inactive_ctrl)
     // 				submit('Update', _('Update'), true, '', null); // inactive update
     $context = array('first' => $this->pager_button($but_pref . 'first', _('&laquo;'), $pager->first_page), 'previous' => $this->pager_button($but_pref . 'prev', _('&lsaquo;'), $pager->prev_page), 'next' => $this->pager_button($but_pref . 'next', _('&rsaquo;'), $pager->next_page), 'last' => $this->pager_button($but_pref . 'last', _('&raquo;'), $pager->last_page));
     $from = ($pager->curr_page - 1) * $pager->page_len + 1;
     $to = $from + $pager->page_len - 1;
     if ($to > $pager->rec_count) {
         $to = $pager->rec_count;
     }
     $all = $pager->rec_count;
     // 			echo sprintf(_('Records %d-%d of %d'), $from, $to, $all);
     // 			echo $inact;
     // 			echo "</td>";
     echo ThemeBootstrap::get()->renderBlock('controls.twig.html', 'pager', $context);
     /*
     		if ($pager->rec_count) {
     			echo "<td colspan=$colspan class='navibar' style='border:none;padding:3px;'>";
     			echo "<div style='float:right;'>";
     			$but_pref = $pager->name . '_page_';
     			start_table();
     			start_row();
     			if (@$pager->inactive_ctrl)
     				submit('Update', _('Update'), true, '', null); // inactive update
     			echo navi_button_cell($but_pref . 'first', _('First'), $pager->first_page, 'right');
     			echo navi_button_cell($but_pref . 'prev', _('Prev'), $pager->prev_page, 'right');
     			echo navi_button_cell($but_pref . 'next', _('Next'), $pager->next_page, 'right');
     			echo navi_button_cell($but_pref . 'last', _('Last'), $pager->last_page, 'right');
     			end_row();
     			end_table();
     			echo "</div>";
     			$from = ($pager->curr_page - 1) * $pager->page_len + 1;
     			$to = $from + $pager->page_len - 1;
     			if ($to > $pager->rec_count)
     				$to = $pager->rec_count;
     			$all = $pager->rec_count;
     			echo sprintf(_('Records %d-%d of %d'), $from, $to, $all);
     			echo $inact;
     			echo "</td>";
     		} else {
     			label_cell(_('No records') . $inact, "colspan=$colspan class='navibar'");
     		}
     */
     if (isset($pager->marker_txt)) {
         display_note($pager->marker_txt, 0, 1, "class='{$pager->notice_class}'");
     }
     div_end();
     return true;
 }
 function submit($name, $value, $echo = true, $title = false, $atype = false, $icon = false)
 {
     global $path_to_root;
     $aspect = '';
     if ($atype === null) {
         $aspect = fallback_mode() ? " aspect='fallback'" : " style='display:none;'";
     } elseif (!is_bool($atype)) {
         // necessary: switch uses '=='
         $aspect = "aspect='{$atype}' ";
         $types = explode(' ', $atype);
         foreach ($types as $type) {
             switch ($type) {
                 case 'selector':
                     $aspect = " aspect='selector' rel = '{$value}'";
                     $value = _("Select");
                     if ($icon === false) {
                         $icon = ICON_SUBMIT;
                     }
                     break;
                 case 'default':
                     if ($icon === false) {
                         $icon = ICON_SUBMIT;
                     }
                     break;
                 case 'cancel':
                     if ($icon === false) {
                         $icon = ICON_ESCAPE;
                     }
                     break;
                 case 'nonajax':
                     $atype = false;
             }
         }
     }
     $iconClass = ThemeBootstrap::fontAwesomeIcon($icon ? $icon : $name);
     $submit_str = "<button class=\"btn btn-default " . ($atype ? 'ajaxsubmit' : 'inputsubmit') . "\" type=\"submit\"" . $aspect . " name=\"{$name}\"  id=\"{$name}\" value=\"{$value}\"" . ($title ? " title='{$title}'" : '') . ">";
     if ($iconClass) {
         $submit_str .= "<i class=\"fa {$iconClass}\"></i>";
     }
     $submit_str .= $value . "</button>\n";
     if ($echo) {
         View::get()->addControl(View::controlFromRenderedString(View::CONTROL_BUTTON, '', $submit_str));
     } else {
         return $submit_str;
     }
 }