| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740 |
- <?php
- class Table_View {
- /**
- * Uniq name for all application, data will be saved in cache (session).
- */
- var $_name;
- /**
- * Data_Source class - model to get data for table
- * Data_Source->get_list( $params );// pagenav, filters, etc
- * Data_Source->get_item( $key );// get one item by key
- */
- var $_source;
- /**
- * Column names list
- */
- var $_cols;
- /**
- * Params from pagenav, filters, etc.
- * pagenav params:
- * 'limitstart'
- * 'limit'
- */
- var $_url_params;
- var $_url_params_default;
- var $_filters;
- var $_params;
- var $_tbl_class;
- function __construct( $name, $source ) {
- $this->_name = $name;
- $this->_source = $source;
- $this->_cols = $this->_source->get_cols();
- $this->_filters = array();
- $this->_params = array();
- $this->_url_params = array();
- $this->_tbl_class = 'tbl-view';
- $this->_base_url_params = array();
- $this->_url_params_default['limitstart'] = 0;
- $this->_url_params_default['limit'] = 10;
- $this->_url_params_default['order_by'] = 'ID';
- $this->_url_params_default['order_dir'] = 'ASC';
- $this->_url_params = V::extend($this->_url_params_default, $this->_url_params);
- $this->_load_params();// load from session cache
- $this->_fetch_params();// fetch from request
- $this->_save_params();// save in session cache
- }
- function get_url_param_source() {
- $url_param_source = $this->get_param('url_param_source');
- if (!$url_param_source) $url_param_source = $_GET;
- return $url_param_source;
- }
- function set_search_field_prefix( $prefix ) {
- $this->set_param('search_field_prefix', $prefix);
- }
- function get_search_field_prefix() {
- return V::get('search_field_prefix', "f_", $this->_params);
- }
- function set_edit_field_prefix( $prefix ) {
- $this->set_param('edit_field_prefix', $prefix);
- }
- function get_edit_field_prefix() {
- return V::get('edit_field_prefix', "e_", $this->_params);
- }
- function _fetch_params() {
- $url_param_source = $this->get_url_param_source();
- if (isset($url_param_source['limitstart'])) $this->set_url_param('limitstart', $url_param_source['limitstart']);
- if (isset($url_param_source['order_by'])) $this->set_url_param('order_by', $url_param_source['order_by']);
- if (isset($url_param_source['order_dir'])) $this->set_url_param('order_dir', $url_param_source['order_dir']);
- // search
- foreach ($this->_cols as $field_name) {
- $this->_url_params_default[$this->get_search_field_prefix() . $field_name] = '%';
- }
- // first set values from GET
- $prefix = $this->get_search_field_prefix();
- foreach ($this->_cols as $field_name) {
- if (isset($_GET[$prefix . $field_name])) {
- $this->set_url_param($prefix . $field_name, $_GET[$prefix . $field_name]);
- }
- }
- // POST override value from GET
- if (!empty($_POST)) {
- foreach ($_POST as $k => $v) {
- if (substr($k, 0, 2) == 'f_') {
- $field_name = substr($k, 2);
- if (in_array($field_name, $this->_cols)) {
- $this->set_url_param($prefix . $field_name, $v);
- }
- }
- }
- }
- }
- function _save_params() {
- if (empty($_SESSION[$this->_name])) $_SESSION[$this->_name] = array();
- $_SESSION[$this->_name]['params'] = $this->_params;
- $_SESSION[$this->_name]['url_params'] = $this->_url_params;
- }
- function _load_params() {
- if (!empty($_SESSION[$this->_name])) {
- if (!empty($_SESSION[$this->_name]['params'])) {
- foreach ($_SESSION[$this->_name]['params'] as $key => $val) {
- $this->_params[$key] = $val;
- }
- }
- if (!empty($_SESSION[$this->_name]['url_params'])) {
- foreach ($_SESSION[$this->_name]['url_params'] as $key => $val) {
- $this->_url_params[$key] = $val;
- }
- }
- }
- }
- function set_cols( $cols ) {
- $this->_cols = $cols;
- }
- function set_base_url_params( $url_params ) {
- $this->_base_url_params = $url_params;
- }
- function set_param( $key, $value ) {
- $this->_params[$key] = $value;
- }
- function get_param( $key ) {
- return V::get($key, '', $this->_params);
- }
- function set_url_param( $key, $value ) {
- $this->_url_params[$key] = $value;
- }
- function get_url_param( $key ) {
- $default = V::get($key, '', $this->_url_params_default);
- return V::get($key, $default, $this->_url_params);
- }
- function add_filter( $field_name, $filter ) {
- $this->_filters[$field_name] = $filter;
- }
- /**
- * @return array of url params for App::link function.
- */
- function to_html_link_params( $params = array() ) {
- $ret = array();
- $base_url_params = V::extend($this->_base_url_params, $this->_url_params);
- $url_params = V::extend($base_url_params, $params);
- foreach ($url_params as $k => $v) {
- if (substr($k, 0, 2) == 'f_') {// search field prefix
- if ($v != '%') {
- $ret [$k] = $v;
- }
- } else {
- if (isset($this->_url_params_default[$k]) && $this->_url_params_default[$k] == $url_params[$k]) {
-
- } else {
- $ret [$k] = $v;
- }
- }
- }
- return $ret;
- }
- function search_field_to_html( $field_name, $value ) {
- $out = '';
- $type = $this->_source->get_field_sql_type($field_name);
- if (!$type) {
- return $out;
- }
- $out .= App::field_search($this->get_search_field_prefix() . $field_name, $type, $value, array('class'=>'i'));
- return $out;
- }
- function edit_field_to_html( $field_name, $value ) {
- $out = '';
- $type = $this->_source->get_field_sql_type($field_name);
- if (!$type) {
- return $value;
- }
- $out .= App::field($this->get_edit_field_prefix() . $field_name, $type, $value, array('class'=>'i'));
- return $out;
- }
- function edit_form_to_html( $edit_id ) {
- $out = '';
- $back_link = App::link("wróć", $this->to_html_link_params(), array('title'=>"wróć do tabeli", 'ico_after_text'=>'back'));
- $edit_id = intval($edit_id);
- if ($edit_id <= 0) {
- return '<p class="err">' . "Bledny parametr ID" . '<br />' . $back_link . '</p>';
- }
- $item = $this->_fetch_item($edit_id);
- if (!$item) {
- return '<p class="err">' . "Rekord ID=" . $edit_id . " nie istnieje" . '<br />' . $back_link . '</p>';
- }
- // allow edit callback?
- $out_msg = '';
- $out_error = '';
- if (!empty($_POST['sent']) && $_POST['sent'] == '1') {
- $affected = $this->_source->save_item($item, $_POST, $this->get_edit_field_prefix());
- if ($affected < 0) {
- $out_error .= "Blad podczas edytowania rekordu - nic nie zmieniono";
- } else {
- if ($affected == 2) {
- $out_msg .= "Zmieniono rekord [".$item->ID."]";
- }
- else if ($affected == 1) {
- $out_msg .= "Zmieniono rekord [".$item->ID."] (Error: nie zapisano hostorii)";
- }
- if ($out_msg) {
- $out .= '<p>' . $out_msg . " - " . $back_link . '</p>';
- return $out;
- }
- }
- }
- $params = array('_tbl_task'=>'hist', '_edit_id'=>$item->ID);
- $hist_link = App::link("historia", $this->to_html_link_params($params), array('title'=>"Historia", 'ico_after_text'=>'history'));
- $out .= '<b>' . "Edycja rekordu " . $item->ID . '</b>' . " - " . $hist_link . " - " . $back_link . '<br />';
- if ($out_error) {
- $out .= '<p>' . $out_error . '</p>';
- }
- $out .= '<form action="" method="POST">';
- $out .= '<table class="' . $this->_tbl_class . '" cellspacing="0" cellpadding="0" border="1">';
- $out .= '<tfoot>';
- $out .= '<tr>';
- $out .= '<td colspan="2" style="text-align:left">';
- $out .= '<input type="hidden" name="' . "sent" . '" value="' . "1" . '" />';
- $out .= '<input type="submit" value="' . "Zapisz" . '" />';
- $out .= '</td>';
- $out .= '</tr>';
- $out .= '</tfoot>';
- $out .= '<tbody>';
- foreach ($this->_cols as $field_name) {
- $field_label = $field_name;
- $field_value = $item->$field_name;
- if ($field_name != 'ID') {// donw allow edit ID field
- if ($this->_source->field_allow_write($field_name)) {
- if (isset($_POST[$this->get_edit_field_prefix() . $field_name])) {
- $field_value = $_POST[$this->get_edit_field_prefix() . $field_name];
- }
- $field_value = $this->edit_field_to_html($field_name, $field_value);
- }
- }
- $out .= '<tr>';
- $out .= '<th>' . $field_label . '</th>';
- $out .= '<td>' . $field_value . '</td>';
- $out .= '</tr>';
- }
- $out .= '</tbody>';
- $out .= '</table>';
- $out .= '</form>';
- return $out;
- }
- function create_form_to_html() {
- $out = '';
- $back_link = App::link("wróć", $this->to_html_link_params(), array('title'=>"wróć do tabeli", 'ico_after_text'=>'back'));
- // allow edit callback?
- if (!empty($_POST['sent']) && $_POST['sent'] == '1') {
- $insert_id = $this->_source->add_item($_POST, $this->get_edit_field_prefix());
- if ($insert_id > 0) {
- $out .= '<p>' . "Dodano nowy rekord [" . $insert_id . "]" . " - " . $back_link;
- $params = array('_tbl_task'=>'edit', '_edit_id'=>$insert_id);
- $edit_link = App::link("[" . $insert_id . "]", $this->to_html_link_params($params), array('title'=>"wróć do tabeli", 'ico_after_text'=>'edit'));
- $out .= " lub edytuj rekord " . $edit_link . '</p>';
- return $out;
- }
- }
- $out .= '<b>' . "Dodawanie nowego rekordu " . '</b>' . " - " . $back_link . '<br />';
- $out .= '<form action="" method="POST">';
- $out .= '<table class="' . $this->_tbl_class . '" cellspacing="0" cellpadding="0" border="1">';
- $out .= '<tfoot>';
- $out .= '<tr>';
- $out .= '<td colspan="2" style="text-align:left">';
- $out .= '<input type="hidden" name="' . "sent" . '" value="' . "1" . '" />';
- $out .= '<input type="submit" value="' . "Zapisz" . '" />';
- $out .= '</td>';
- $out .= '</tr>';
- $out .= '</tfoot>';
- $out .= '<tbody>';
- foreach ($this->_cols as $field_name) {
- $field_label = $field_name;
- $field_value = '';
- if ($field_name != 'ID') {// donw allow edit ID field
- if ($this->_source->field_allow_create($field_name)) {
- if (isset($_POST[$this->get_edit_field_prefix() . $field_name])) {
- $field_value = $_POST[$this->get_edit_field_prefix() . $field_name];
- }
- }
- $field_value = $this->edit_field_to_html($field_name, $field_value);
- }
- $out .= '<tr>';
- $out .= '<th>' . $field_label . '</th>';
- $out .= '<td>' . $field_value . '</td>';
- $out .= '</tr>';
- }
- $out .= '</tbody>';
- $out .= '</table>';
- $out .= '</form>';
- return $out;
- }
- function hist_to_html( $id ) {
- $out = '';
- $back_link = App::link("wróć", $this->to_html_link_params(), array('title'=>"wróć do tabeli", 'ico_after_text'=>'back'));
- $edit_id = intval($id);
- if ($id <= 0) {
- return '<p class="err">' . "Bledny parametr ID" . '<br />' . $back_link . '</p>';
- }
- $item = $this->_fetch_item($edit_id);
- if (!$item) {
- return '<p class="err">' . "Rekord ID=" . $edit_id . " nie istnieje" . '<br />' . $back_link . '</p>';
- }
- $out .= '<p><b>' . "Historia edycji rekordu " . $item->ID . '</b>' . " - " . $back_link . '</p>';
- $items = $this->_fetch_hist_items($id);
- $item->ID_USERS2 = 0;
- array_unshift($items, $item);
- $out .= '<style type="text/css">' . "
- .tbl-view .hist-current td {background-color:#FFEDD5; border-bottom:2px solid red;}
- .tbl-view .hist-empty {color:#666;}
- .tbl-view .hist-not-empty {background-color:#eee;}
- " . '</style>';
- $out .= '<table class="' . $this->_tbl_class . '" cellspacing="0" cellpadding="0" border="1">';
- $out .= '<thead>';
- $out .= '<tr id="item-' . $item->ID . '">';
- foreach ($this->_cols as $field_name) {
- $out .= '<td>';
- $out .= $field_name;
- $out .= '</td>';
- }
- $out .= '</tr>';
- $out .= '</thead>';
- $out .= '<tbody>';
- foreach ($items as $item) {
- $cls = '';
- if ($item->ID_USERS2 == 0) {
- $cls = ' class="hist-current"';
- }
- $out .= '<tr' . $cls . '>';
- foreach ($this->_cols as $field_name) {
- $cls = '';
- $val = ' ';
- if (isset($item->$field_name)) {
- $val = $item->$field_name;
- }
- if ($field_name != 'ID') {
- $cls = ($val == 'N/S;')? 'hist-empty' : 'hist-not-empty';
- }
- if ($cls) $cls = ' class="' . $cls . '"';
- $out .= '<td' . $cls . '>';
- $out .= $val;
- $out .= '</td>';
- }
- $out .= '</tr>';
- }
- if (count($items) < 2) {
- $out .= '<tr id="item-' . $item->ID . '">';
- $out .= '<td colspan="' . count($this->_cols) . '">' . "Brak danych w tabeli HIST" . '</td>';
- $out .= '</tr>';
- }
- $out .= '</tbody>';
- $out .= '</table>';
- return $out;
- }
- function _view_col_is_hidden( $col_name ) {
- if (array_key_exists($col_name, $_SESSION[$this->_name]['hidden_cols'])) {
- return $_SESSION[$this->_name]['hidden_cols'][$col_name];
- }
- }
- function _view_col_hide( $col_name ) {
- $_SESSION[$this->_name]['hidden_cols'][$col_name] = true;
- }
- function _view_col_show( $col_name ) {
- unset($_SESSION[$this->_name]['hidden_cols'][$col_name]);
- }
- function config_form_to_html() {
- $url_param_source = $this->get_url_param_source();
- if (!empty($url_param_source['_hide_col'])) {
- if ($url_param_source['_hide_col'] != 'ID') {
- $this->_view_col_hide($url_param_source['_hide_col']);
- }
- }
- if (!empty($url_param_source['_show_col'])) {
- if ($url_param_source['_show_col'] != 'ID') {
- $this->_view_col_show($url_param_source['_show_col']);
- }
- }
- $out = '';
- $back_link = App::link("wróć", $this->to_html_link_params(), array('title'=>"wróć do tabeli", 'ico_after_text'=>'back'));
- $out .= '<p><b>' . "Konfiguracja tabeli " . '</b>' . " - " . $back_link . '</p>';
- $out .= '<table class="tbl-view" cellspacing="0" cellpadding="0" border="1">';
- foreach ($this->_cols as $field_name) {
- $out .= '<tr>';
- $out .= '<td>' . $field_name . '</td>';
- $out .= '<td>';
- if ($field_name != 'ID') {
- if ($this->_view_col_is_hidden($field_name)) {
- $link_params = array('_tbl_task'=>'config', '_show_col'=>$field_name);
- $out .= App::link("show", $this->to_html_link_params($link_params), array('class'=>'btn'));
- } else {
- $link_params = array('_tbl_task'=>'config', '_hide_col'=>$field_name);
- $out .= App::link("hide", $this->to_html_link_params($link_params), array('class'=>'btn'));
- }
- }
- $out .= '</td>';
- $out .= '</tr>';
- }
- $out .= '</table>';
- return $out;
- }
- function table_to_html() {
- $out = '';
- if (empty($this->_cols)) {
- trigger_error("No cols set in " . __CLASS__, E_USER_NOTICE);
- return $out;
- }
- $items = $this->_fetch_items();
- $total = $this->_fetch_total();
- $out .= '<style type="text/css">' . "
- .order-dir {color:blue; text-decoration:none; font-weight:bold;}
- .order-dir:hover {}
- .order-current {color:red;}
- .order-current:hover {}
- .tbl-view .find td.selected {border-bottom: 2px solid red;}
- .tbl-view tbody tr.selected td {background-color:#FFEDD5;}
- .tbl-view-txt-zwin tbody td {white-space:nowrap; max-width:200px; overflow:hidden;}
- .tbl-view .tbl-cell-links,
- .tbl-view .config td,
- .tbl-view .config th{background-color:#D7EED7;}
- " . '</style>';
- $out .= '<form action="" method="POST">';
- $out .= '<table class="' . $this->_tbl_class . '" cellspacing="0" cellpadding="0" border="1">';
- $out .= '<thead>';
- $out .= '<tr>';
- $out .= '<td class="tbl-cell-links">';
- // TODO: tbl config, perm edit?
- $link_params = array('_tbl_task'=>'create');
- $out .= ' '.App::link("Add", $this->to_html_link_params($link_params), array('ico'=>'add', 'title'=>"Dodaj nowy rekord"));
- $link_params = array('_tbl_task'=>'config');
- $js = "jQuery(this).parents('thead').find('.config').toggle(); return false;";
- $out .= ' '.App::link("konfiguracja", $this->to_html_link_params($link_params), array('ico'=>'excel', 'title'=>"Konfiguracja", 'onclick'=>$js));
- $out .= '</td>';
- foreach ($this->_cols as $field_name) {
- if ($this->_view_col_is_hidden($field_name)) {
- continue;
- }
- $cur_order_by = false;
- $cur_order_by_link = '';
- // order by field
- if ($this->get_url_param('order_by') == $field_name) {
- $cur_order_by = true;
- if ($this->get_url_param('order_dir') == 'DESC') {
- $cur_order_by_link .= App::link("^", $this->to_html_link_params(array('order_by'=>$field_name, 'order_dir'=>'ASC')), array('title'=>"asc", 'class'=>"order-dir order-current"));
- } else {
- $cur_order_by_link .= App::link("v", $this->to_html_link_params(array('order_by'=>$field_name, 'order_dir'=>'DESC')), array('title'=>"desc", 'class'=>"order-dir order-current"));
- }
- } else {
- $cur_order_by_link .= App::link("^", $this->to_html_link_params(array('order_by'=>$field_name, 'order_dir'=>'ASC')), array('title'=>"asc", 'class'=>"order-dir"));
- $cur_order_by_link .= " ";
- $cur_order_by_link .= App::link("v", $this->to_html_link_params(array('order_by'=>$field_name, 'order_dir'=>'DESC')), array('title'=>"desc", 'class'=>"order-dir"));
- }
- $out .= '<td>';
- // TODO: if set header for this column
- $out .= str_replace('_', ' ', $field_name);
- if ($cur_order_by_link) {
- $out .= " " . '<nobr>' . $cur_order_by_link . '</nobr>';
- }
- $out .= '</td>';
- }
- $out .= '</tr>';
- $out .= '<tr class="config" style="display:none">';
- $out .= '<td>' . " " . '</td>';
- foreach ($this->_cols as $field_name) {
- if ($this->_view_col_is_hidden($field_name)) {
- continue;
- }
- $out .= '<th>';
- if ($field_name != 'ID') {
- if (!$this->_view_col_is_hidden($field_name)) {
- $link_params = array('_tbl_task'=>'config', '_hide_col'=>$field_name);
- $out .= App::link("x", $this->to_html_link_params($link_params), array('title'=>"Ukryj kolumnę " . $field_name, 'ico'=>'del.png'));
- }
- }
- $out .= '</th>';
- }
- $out .= '</tr>';
- $out .= '<tr class="config" style="display:none">';
- $out .= '<td colspan="' . (count($this->_cols) + 1) . '">';// TODO: visible cols count
- // widok: full, line
- $js = "var tbl=jQuery(this).parents('table:first');tbl.toggleClass('tbl-view-txt-zwin');if(tbl.hasClass('tbl-view-txt-zwin')){jQuery(this).attr('title','Pełny tekst')}else{jQuery(this).attr('title','krótki tekst')};return false;";
- $link_params = array('_tbl_task'=>'config', 'widok'=>"full");
- $out .= App::link("tekst", $this->to_html_link_params($link_params), array('title'=>"Pełny tekst", 'onclick'=>$js));
- $out .= '</td>';
- $out .= '</tr>';
- if ($this->get_param('show_search')) {
- $out .= '<tr class="find">';
- $out .= '<td>';
- $out .= '<input type="image" value="' . "Szukaj" . '" src="' . "icon/search.png" . '" title="' . "Szukaj" . '" />';
- // TODO: add clear btn for this form
- $filter_selected = false;
- foreach ($this->_cols as $field_name) {
- $val = $this->get_url_param($this->get_search_field_prefix() . $field_name);
- if ($val != '%') $filter_selected = true;
- }
- if ($filter_selected) {
- $out .= '<input type="image" value="' . "Czyść" . '" src="' . "icon/del.png" . '" title="' . "Czyść" . '" onclick="return reset_search_form(this);" />';
- }
- $out .= '</td>';
- foreach ($this->_cols as $field_name) {
- if ($this->_view_col_is_hidden($field_name)) {
- continue;
- }
- $val = $this->get_url_param($this->get_search_field_prefix() . $field_name);
- $cls = '';
- if ($val != '%') $cls .= 'selected';
- if ($cls) $cls = ' class="' . $cls . '"';
- $out .= '<td'.$cls.'>';
- // TODO: filters for this field
- $out .= $this->search_field_to_html($field_name, $val);
- $out .= '</td>';
- }
- $out .= '</tr>';
- }
- $out .= '</thead>';
- $out .= '<tfoot>';
- $out .= '<td colspan="' . (count($this->_cols) + 1) . '">';// TODO: visible cols count
- $page_nav = new stdClass();
- $page_nav->total = $total;
- $page_nav->limit = $this->_url_params['limit'];
- $page_nav->current = $this->_url_params['limitstart'];
- $page_nav->offset_prev = $page_nav->current - $page_nav->limit;
- if ($page_nav->offset_prev < 0) $page_nav->offset_prev = 0;
- $page_nav->offset_next = $page_nav->current + $page_nav->limit;
- $page_nav->offset_end = floor($total / $page_nav->limit) * $page_nav->limit;
- $link_params = array('limitstart'=>0);
- $out .= App::link("<<", $this->to_html_link_params($link_params), array('class'=>'btn'));
- $link_params = array('limitstart'=>$page_nav->offset_prev);
- $out .= ' '.App::link("< -" . $page_nav->limit, $this->to_html_link_params($link_params), array('class'=>'btn'));
- $out .= ' <b>' . $page_nav->current . '</b> <i title="' . "wszystkich " . $page_nav->total . '">(' . $page_nav->total . ')</i> ';
- $link_params = array('limitstart'=>$page_nav->offset_next);
- $out .= ' '.App::link("+" . $page_nav->limit . " >", $this->to_html_link_params($link_params), array('class'=>'btn'));
- $link_params = array('limitstart'=>$page_nav->offset_end);
- $out .= ' '.App::link(">>", $this->to_html_link_params($link_params), array('class'=>'btn'));
- $out .= '</td>';
- $out .= '</tfoot>';
- $out .= '<tbody>';
- foreach ($items as $item) {
- $out .= '<tr id="item-' . $item->ID . '">';
- $out .= '<td>';
- // edit - allow edit callback?
- $link_params = array('_tbl_task'=>'edit', '_edit_id'=>$item->ID);
- $out .= ' '.App::link("Edit", $this->to_html_link_params($link_params), array('ico'=>'edit.png', 'title'=>"Edytuj " . $item->ID));
- // hist
- $link_params = array('_tbl_task'=>'hist', '_edit_id'=>$item->ID);
- $out .= ' '.App::link("Historia", $this->to_html_link_params($link_params), array('ico'=>'history', 'title'=>"Historia rekordu " . $item->ID));
- $out .= '</td>';
- foreach ($this->_cols as $field_name) {
- if ($this->_view_col_is_hidden($field_name)) {
- continue;
- }
- $out .= '<td>';
- if (isset($item->$field_name)) {
- $out .= $item->$field_name;
- } else {
- $out .= ' ';
- }
- $out .= '</td>';
- }
- $out .= '</tr>';
- }
- $out .= '</tbody>';
- $out .= '</table>';
- $out .= '</form>';
- $out .= '<script type="text/javascript">' . "
- jQuery(document).ready(function(){
- jQuery('." . $this->_tbl_class . "').addClass('tbl-view-txt-zwin');
- jQuery('." . $this->_tbl_class . " tbody tr').click(function(){
- jQuery(this).toggleClass('selected');
- console.log( jQuery(this).attr('id') )
- });
- });
- function reset_search_form(n){
- console.log(n)
- var p=jQuery(n).parents('.find:first');
- console.log(p)
- if (!p) return false;
- p.find('td').removeClass('selected');
- fields=p.find('input').val('%');
- fields=p.find('select').each(function(ind,field){
- switch (field.type.toLowerCase()){
- case 'text':
- field.value='%';
- break;
- case 'select-one':
- // field.options[0].selected = true;
- // break;
- case 'select-multiple':
- for (z = 0; z < field.options.length; z++) {
- field.options[z].selected = false;
- if (field.options[z].hasAttribute('selected')) {
- field.options[z].removeAttribute('selected');
- }
- }
- // select first element
- field.options[0].selected = true;
- field.options[0].setAttribute('selected', 'selected');
- break;
- default:
- }
- });
- return false;
- }
- " . '</script>';
- return $out;
- }
- /**
- * @param '_tbl_task' ('edit', 'hist', 'create', 'config')
- * @param '_edit_id'
- */
- function to_html() {
- $url_param_source = $this->get_url_param_source();
- $_tbl_task = $url_param_source['_tbl_task'];
- switch ($_tbl_task) {
- case 'edit':
- return $this->edit_form_to_html($url_param_source['_edit_id']);
- break;
- case 'hist':
- return $this->hist_to_html($url_param_source['_edit_id']);
- break;
- case 'create':
- return $this->create_form_to_html();
- break;
- case 'config':
- return $this->config_form_to_html();
- break;
- default:
- return $this->table_to_html();
- }
- }
- function &_fetch_items() {
- return $this->_source->get_items($this->_url_params);
- }
- function &_fetch_item( $id ) {
- return $this->_source->get_item($id);
- }
- function &_fetch_hist_items( $id ) {
- return $this->_source->get_hist_items($id);
- }
- function _fetch_total() {
- return $this->_source->get_total($this->_url_params);
- }
- }
|