table=$p_table; $order=0; foreach ($this->table->name as $key=> $value) { $this->a_label_displaid[$value]=$value; $this->a_order[$order]=$value; $this->a_prop[$value]=self::UPDATABLE|self::VISIBLE; $order++; } $this->object_name=uniqid("tbl"); $this->row_delete=TRUE; $this->row_update=TRUE; } /** *@brief set the callback function that is passed to javascript *@param $p_file : callback file by default ajax.php */ function set_callback($p_file) { $this->callback=$p_file; } /** *@brief we must create first the javascript if we want to update or delete * row. It is the default script . */ function create_js_script() { echo " "; } /** *@brief set a column of the data row updatable or not *@param $p_key data column *@param $p_vallue Boolean False or True */ function set_property_updatable($p_key,$p_value) { if ( ! $this->a_prop[$p_key] ) throw new Exception (__FILE__.":".__LINE__."$p_key invalid index"); if ( $p_value==False ) $this->a_prop[$p_key]=$this->a_prop[$p_key]-self::UPDATABLE; elseif ( $p_value==True) $this->a_prop[$p_key]=$this->a_prop[$p_key]|self::UPDATABLE; else throw new Exception ("set_property_updatable [ $p_value ] incorrect"; } /** *@brief return false if the update of the row is forbidden */ function can_update_row() { return $this->row_update; } /** *@brief Enable or disable the updating of rows *@param $p_value Boolean : true enable the row to be updated */ function set_update_row($p_value) { if ( $p_value !== True && $p_value !== False ) throw new Exception ("Valeur invalide set_update_row [$p_value]"); $this->row_update=$p_value; } /** *@brief return false if the delete of the row is forbidden */ function can_delete_row() { return $this->row_delete; } /** *@brief Enable or disable the deleting of rows *@param $p_value Boolean : true enable the row to be deleted */ function set_delete_row($p_value) { if ( $p_value !== True && $p_value !== False ) throw new Exception ("Valeur invalide set_delete_row [$p_value]"); $this->row_delete=$p_value; } /** *@brief return True if the column is updatable otherwise false *@param $p_key data column */ function get_property_updatable($p_key) { if ( $this->a_prop[$p_key] & self:UPDATABLE == 1) return true; return false; } /** *@brief set a column of the data row visible or not *@param $p_key data column *@param $p_vallue Boolean False or True */ function set_property_visible($p_key,$p_value) { if ( ! $this->a_prop[$p_key] ) throw new Exception (__FILE__.":".__LINE__."$p_key invalid index"); if ( $p_value==False ) $this->a_prop[$p_key]=$this->a_prop[$p_key]-self::VISIBLE; elseif ( $p_value==True) $this->a_prop[$p_key]=$this->a_prop[$p_key]|self::VISIBLE; else throw new Exception ("set_property_updatable [ $p_value ] incorrect"; } /** *@brief return True if the column is visible otherwise false *@param $p_key data column */ function get_property_visible($p_key) { if ( $this->a_prop[$p_key] & self:VISIBLE == 1) return true; return false; } /** *@brief set the name to display for a column *@param $p_key data column * */ function set_col_label($p_key,$p_display) { $this->a_label_displaid[$p_key]=$p_display; } /** *@brief get the position of a column *@param $p_key data column */ function get_current_pos($p_key) { $nb_order=count($this->a_order); for ($i=0;$i<$nb_order;$i++) if ( $this->a_order[$i]==$p_key) return $i; throw new Exception ("COL INVAL ".$p_key); } /** *@brief if we change a column order , the order * of the other columns is impacted. * * With a_order[0,1,2,3]=[x,y,z,a] * if we move the column x (idx=0) to 2 * we must obtain [y,z,x,a] *@param $p_key data column */ function move($p_key,$p_idx) { // get current position of p_key $cur_pos=$this->get_current_pos($p_key); if ( $cur_pos == $p_idx ) return ; if ( $cur_pos < $p_idx ) { $nb_order=count($this->a_order); for ($i=0;$i<$nb_order;$i++) { // if col_name is not the searched one we continue if ( $this->a_order[$i] != $p_key ) continue; if ( $p_idx == $i ) continue; // otherwise we swap with i+1 $old=$this->a_order[$i+1]; $this->a_order[$i]=$this->a_order[$i+1]; $this->a_order[$i+1]=$p_key; } } else { $nb_order=count($this->a_order)-1; for ($i=$nb_order;$i>0;$i--) { // if col_name is not the searched one we continue if ( $this->a_order[$i] != $p_key ) continue; if ( $p_idx == $i ) continue; // otherwise we swap with i+1 $old=$this->a_order[$i-1]; $this->a_order[$i]=$this->a_order[$i-1]; $this->a_order[$i-1]=$p_key; } } } /** *@brief display the data of the table */ function display_table() { $ret=$this->table->seek(); $nb=Database::num_count($ret); for ($i=0;$i< $nb ; $i++ ) { if ( $i == 0 ) { $this->display_table_header(); } $row=Database::fetch_array($ret,$i); $this->display_row($row); } } /** *@brief display the column header excepted the not visible one * and in the order defined with $this->a_order */ function display_table_header() { $nb=count($this->a_order); echo "
| {$label} | "; printf('', $label, $value, $key, $key ); } echo "