#--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
package fw::adm;
#--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

@ISA = qw(Exporter);

@EXPORT= qw(
list
%adm_cfg
%adm_txt
);

use fw::env; 
use fw::web;

$adm_cfg{title} = "";
$adm_cfg{customtitle} = "";

$adm_cfg{sql_dbh} = $dbh;
$adm_cfg{sql_table} = '';
$adm_cfg{sql_where} = '1';
$adm_cfg{sql_order_by} = 'adm_f_id';
$adm_cfg{sql_order_way} = 'ASC';

%adm_default_txt = load_tabtxt_hash($cfg{adm_lg}.".txt");
%adm_txt = ();


my @list_headers = (
"01/checkbox",
"02/id",
"03/ordby",
"04/duplicate",
"05/fields",
"06/update",
"07/view",
"08/on_off",
"09/sort",
);

%adm_fields = (
    "01/name" => {
        list_header => 'Name',
        type => 'display',
        searchable => 0,
        sql_field => 'name',
    },
);



sub init_adm_list_params {

    $adm_cfg{list_search} = 0;
    $adm_cfg{list_pagination} = 0;
    $adm_cfg{list_row_switch} = 0;
    $adm_cfg{list_row_sort} = 0;
    $adm_cfg{list_row_view} = 0;
    $adm_cfg{list_where} = "";
    $adm_cfg{list_table} = "";
    $adm_cfg{list_headers} = \@list_headers;

    $adm_cfg{list_has_delete} = 1;
    $adm_cfg{list_has_add} = 1;    
}

sub get_adm_list_search {
    my $itf = "";
    my $keywords = get_quoted('list_search_keywords');

    if ($adm_cfg{list_search}) {
        $itf = <<"EOITF";
<!-- BEGIN search ------------------------------------>
<form action="$adm_cfg{self}" method="post">
<input type="hidden" name="sw" value="list" />
<input type="text" name="list_search_keywords" value="$keywords" /> 
<button type="submit">$adm_txt{admin_search_button}</button>
</form>
<!-- END search -------------------------------------->
EOITF

    }
    return $itf;
}

sub get_adm_list_pagination {
    my $itf = "";
    if ($adm_cfg{list_pagination}) {
        $itf = <<"EOITF";
<!-- BEGIN pagination -------------------------------->
[pagination]
<!-- END pagination ---------------------------------->
EOITF

    }
    return $itf;
}
sub get_adm_list_main_form {
    my $itf = "";

    my $keywords = get_quoted('list_search_keywords');

    my $itf_search = get_adm_list_search();
    my $itf_pagination = get_adm_list_pagination();
    my $itf_headers = get_adm_list_headers();
    my $itf_del_button = get_adm_list_del_button();
    my $itf_add_button = get_adm_list_add_button();

    $itf = <<"EOITF";
 
$itf_search

$itf_pagination

<form action="$adm_cfg{self}" method="post">
<input type="hidden" name="sw" value="list" />
<table>
$itf_headers
$itf_data
</table>
$itf_buttons
</form>

$itf_pagination

EOITF

 return $itf;
}

sub get_adm_list_data {
    my $itf = "";

    my ($sql_list_fields,%fields) = get_adm_list_sql_fields();
   
    $sql_list_fields = $adm_cfg{sql_table}.".id AS adm_f_id, ".$sql_list_fields;

    my @rows = sql_get($adm_cfg{sql_dbh},$adm_cfg{sql_table},$sql_list_fields,$adm_cfg{sql_where},$adm_cfg{sql_order_by},$adm_cfg{sql_order_way});

    foreach my $row (@rows) {

        my @data = ();
        foreach my $f (@fields) {
            my %f = %{$f};
            push @data,$row->{$f{as}}
        }
        my $itf_row = <<"EOITF";
<tr>
</tr>
EOITF
        push @itf_rows,$itf_row;
    }

    $itf = join("\n",@itf_rows);
    return $itf;   
}


sub get_adm_list_sql_fields {

    my @sql_list_fields = ();
    my %fields_cfg = ();
    my $as = '';
    my $idx = 0;
    foreach my $k (sort keys(%adm_fields)) {

        $as = 'adm_f_'.sprintf("%02d",$idx);

        $fields_cfg{$as}{title} = $adm_fields{$k}{list_header};
        $fields_cfg{$as}{sql_field} = $adm_fields{$k}{sql_field};
        $fields_cfg{$as}{idx} = $idx;
        $fields_cfg{$as}{as} = $as;
        $fields_cfg{$as}{key} = $k;

        if (defined($adm_fields{$k}{list_header}) &&  $adm_fields{$k}{list_header} ne '') {

            push @sql_list_fields get_adm_sql_fieldname(\%field_cfg);
        }

        $idx++;
        push @fields,\%field_cfg;
    }

    
    return (join(',',@sql_list_fields),@fields);
}

sub get_adm_sql_fieldname {
    my %f = %{$_[0]};
    
    return $f{sql_field} . " AS " . $f{as};
}


sub get_adm_list_del_button {
    my $itf = "";

    if ($adm_cfg{list_has_delete}) {
        $itf .= <<"EOITF";
<button type="submit"class="btn-warning">$adm_txt{adm_delbutton}</button>
EOITF
    }
    return $itf;
}

sub get_adm_list_add_button {
    my $itf = "";

    if ($adm_cfg{list_has_add}) {
        $itf .= <<"EOITF";
<a class="btn-primary" href="$adm_cfg{self}?sw=add_form">$adm_txt{adm_addbutton}</a>
EOITF
    }
    return $itf;
}

sub get_adm_list_headers {
    my $itf = "";

    my $headers = "";
    foreach my $head (sort $adm_cfg{list_headers}) {
        my ($num,$name) = split(/\//,$head);
        my $func = "get_adm_list_header_".$name;
        if ($adm_cfg{'adm_list_header_'.$head} eq "") {
            $func = $adm_cfg{'adm_list_header_'.$head};
        }
        $headers .= &$func();
    }


$itf <<"EOITF";
<tr>
 $headers
</tr>
EOITF
     return $itf;
}


sub get_adm_list_header_checkbox {
    $adm_cfg{list_has_checkbox} = 1;
    return "<th>&nbsp;</th>";
}
sub get_adm_list_header_id {
    $adm_cfg{list_has_id} = 1;
    return "<th>ID</th>";
}
sub get_adm_list_header_ordby {
    $adm_cfg{list_has_ordby} = 1;
    return "<th>#</th>";
}
sub get_adm_list_header_duplicate {
    $adm_cfg{list_has_duplicate} = 1;
    return "<th>&nbsp;</th>";
}
sub get_adm_list_header_fields {
    return "<th>&nbsp;</th>";
}
sub get_adm_list_header_update {
    $adm_cfg{list_has_update} = 1;
    return "<th>&nbsp;</th>";
}
sub get_adm_list_header_view {
    $adm_cfg{list_has_view} = 1;
    return "<th>&nbsp;</th>";
}
sub get_adm_list_header_on_off {
    $adm_cfg{list_has_on_off} = 1;
    return "<th>&nbsp;</th>";
}
sub get_adm_list_header_sort {
    $adm_cfg{list_has_sort} = 1;
    return "<th>&nbsp;</th>";
}






<form>
FILTERS
search_field
button
</form>

multipage_up

<form>
form_header

<table>
 <table_headers>
  checkbox
  id
  ordby
  fields
  update
  view
  on_off
  sort
  </table_headers>
<table_data>
 row_checkbox
 row_id
 row_ordby
 row_fields
 row_update
 row_view
 row_on_off
 row_sort
</table_data>
</table>

buttons

</form>


multipage_down






















################################################################################
# LIST
################################################################################
sub list
{ 

 my $where_list = $_[0] || $adm_cfg{wherel};
 my $prehtml = $_[1];
 my $posthtml = $_[2];
 my $colg=1;
 
 my $oldwherep = $adm_cfg{wherep};

 if ($where_list ne "") {
     $adm_cfg{wherep} = $where_list;
 }

 if ($adm_cfg{customtitle} ne "") {
     $adm_txt{title} = $adm_cfg{customtitle}." &gt; ".$adm_default_txt{dm_list_items};
 }

 # get all the parameters for multi-page list
 my $howmany = $adm_cfg{howmany} || 50;
 my $bstep = 0;
 my $nstep = 0;

 my $dm_step = get_quoted('dm_step') || 0;

 my $dm_total = get_quoted('dm_total') || -1;

 if ($dm_step >0) {$bstep = $dm_step-1;}

 my $search_stmt = " WHERE 1=1";
 my $dm_search = trim(get_quoted('dm_search')) || "";
 my $dm_search_clean=$cgi->param('dm_search') || '';
 my $cpt_txtid=1;
 
 if($adm_cfg{disable_buttons} ne "y")
{
 $del_butt = <<"EOH";
<button type="submit" OnClick="return dm_confirm_del();" class="mig_button" id="dm_button_del">$adm_default_txt{dm_delbutton}</button>
EOH

 $add_butt = <<"EOH";
<button type="submit" class="mig_button" id="dm_button_add">$adm_default_txt{dm_new_item}</button>
EOH
}



if($adm_cfg{duplicate} eq "y")
{
 $duplicate = <<"EOH";
<button type="submit" OnClick="return dm_confirm_dupl();" class="mig_button" id="dm_button_dupl">$adm_default_txt{adm_duplicate}</button>
EOH
}

if($adm_cfg{disable_del_button} eq "y")
{
    $del_butt="";
}
 
 
($dm_searchable_fields,$search_list,$search_val) = get_search_fields();
 # print ("[$search_list][$search_val]");
 # build the search part of the query
 if ( $dm_search ne "" ) {

     @dm_searchable_fields = @{$dm_searchable_fields};
     
          
     my $search_fields = "";
     my $search_fields2 = "";

     my $operator='like';
     my $separateur='%';
    
     if(get_quoted('strict_search') eq 'y')
     {
      $operator="=";
      $separateur="";
     }     
     
     if ($search_val eq "") 
     {
         foreach $field (@dm_searchable_fields) 
         {
        #  print "<br />[$field]";
          
             if ($field =~ /\@$/) {
                 $field =~ s/\@$//;

                 $search_fields.=" LOWER(txt$cpt_txtid.content) LIKE '".$separateur.lc($dm_search).$separateur."' OR";
#                 $search_fields.=" txt$cpt_txtid.content $operator '".$separateur.$dm_search.$separateur."' OR";
                 $search_fields2.=" AND $field = txt$cpt_txtid.id_textid AND txt$cpt_txtid.id_language=$colg";
                 $adm_cfg{list_table_name}.=" ,textcontents AS txt$cpt_txtid ";
                 $cpt_txtid++;
                 
             } else {
             
                 $search_fields.=" $field $operator '".$separateur.$dm_search.$separateur."' OR";
             }
             
         }
     } 
     else 
     {
     
             if ($search_val =~ /\@$/) {
                 $search_val_sql = $search_val;
                 $search_val_sql =~ s/\@$//;

                 $search_fields.=" LOWER(txt$cpt_txtid.content) LIKE '".$separateur.lc($dm_search).$separateur."' OR";
#                 $search_fields.=" txt$cpt_txtid.content $operator '".$separateur.$dm_search.$separateur."' OR";
                 $search_fields2.=" AND $search_val_sql = txt$cpt_txtid.id_textid AND txt$cpt_txtid.id_language=$colg";
                 $adm_cfg{list_table_name}.=" ,textcontents AS txt$cpt_txtid ";
                 $cpt_txtid++;
                 
             } else {
             
                 $search_fields.=" $search_val $operator '".$separateur.$dm_search.$separateur."' OR";
             }

     }

     $search_fields =~ s/OR$//;
     $search_stmt .= " AND ($search_fields) $search_fields2";
 }

 
 if ($adm_cfg{wherep} ne "") {
     $search_stmt .= " AND $adm_cfg{wherep}";
 }

 #///////////////////// BEGIN FILTERS //////////////////////////////////////////

 $dm_filter = "";
 #CUSTOM FILTERS
 if($adm_cfg{custom_filter_func} ne "")
 {
      my $func=$adm_cfg{custom_filter_func};
     $listlistboxes .= &$func();
 }
 
 foreach $filter (sort keys(%dm_filters)) 
 {

     my ($idfilter,$namefilter) = split(/\//,$filter);
     my $filter_value = get_quoted('filter_'.$idfilter);
#     print "<br />[filter $idfilter : [$filter_value]]";

    if ($dm_filters{$filter}{type} eq "hash") {
        $dm_filters{$filter}{ref}->{""} = "";
        %lbcontent = %{ $dm_filters{$filter}{ref}};
    }
    elsif ($dm_filters{$filter}{type} eq "lbtable") {
        
        %lbcontent = %{get_listbox_from_table($dbh_data,
                                              $dm_filters{$filter}{table},
                                              $dm_filters{$filter}{key}, 
                                              $dm_filters{$filter}{display},
                                              $dm_filters{$filter}{where})
                     };
    }                 
     my $lbcontent = makesortedselecth(\%lbcontent,$filter_value);
     
     $listlistboxes .= <<"EOH";
						<div class="mig_search_filter">
							<p><label><span>$namefilter :</span><select name="filter_$idfilter" class="mig_select" onChange="document.dm_search.submit(); return false;"><option value=""></option>$lbcontent</select></label></p>
						</div>
EOH

      if ($filter_value ne "" && $filter_value) 
      {
        
          $search_stmt .= " AND $dm_filters{$filter}{col} = '$filter_value'";
          $dm_filter .= "&filter_$idfilter=$filter_value";
          $adm_cfg{hiddp2}.= <<"EOH";
<input type="hidden" name="filter_$idfilter" value="$filter_value" />          
EOH
      }
      
 }  
 
my $loc_dm_search = get_quoted('dm_search');
my $loc_search_val = get_quoted('search_val');
 
$dm_filter .= "&dm_search=$loc_dm_search&search_val=$loc_search_val"; 


  
  #///////////////////// BEGIN FILTERS //////////////////////////////////////
 
 
my $dm_ordby = "";
my $dm_sens = $cgi->param('dm_sens') || "1";
my $dm_way = $cgi->param('dm_way') || "";
if ($adm_cfg{sort_opt}) {
    $dm_ordby = "$adm_cfg{table_name}.ordby";
} else {
    $dm_ordby = $cgi->param('dm_ordby') || $adm_cfg{default_ordby};
    if ($dm_ordby eq "") {
        $dm_ordby = "$adm_cfg{table_name}.id";
    } 
}

# if never get the info, get the amount of rows of the table
if ($dm_total == -1) {
#$stmt = "SELECT count(*) FROM $adm_cfg{list_table_name} $search_stmt order by $dm_ordby";




$stmt = "SELECT count(*) FROM $adm_cfg{list_table_name} $search_stmt";
#print "<br/>$stmt";
$cursor = $dbh_data->prepare($stmt);
$cursor->execute || wfw_exception("SQL_ERROR","error execute : $DBI::errstr [$stmt]\n");
$dm_total = $cursor->fetchrow_array;
$cursor->finish;
}

if ($dm_step*$howmany + $howmany < $dm_total) { $nstep = $dm_step + 1; }

$nbstep = int($dm_total/$howmany);
if ($dm_total%$howmany != 0) { $nbstep++; }

# build the multi-page list for page switching
$steps =<<EOH;
										$adm_cfg{hiddp}
										$adm_cfg{hiddp2}
										<input type="hidden" name="sw" id="sw_1" value="list">
										<input type="hidden" name="dm_total" value="$dm_total">
										<input type="hidden" name="dm_ordby" value="$dm_ordby">
										<input type="hidden" name="dm_way" value="$dm_way">
										<input type="hidden" name="dm_search" value="$dm_search">
										<input type="hidden" name="search_val" value="$search_val">
										
										<select name="dm_step" onChange="javascript:document.forms.navbar<ISTEP>.submit();" class="mig_select">
EOH

for ($i = 0; $i < $nbstep ; $i++) {
$currstep = $i+1;
my $selected = "";
if ($i == $dm_step) {$selected = "selected=\"selected\"";}
$steps.=<<"EOH";
											<option value="$i" $selected>$currstep</option>
EOH
}

$steps.=<<"EOH";
										</select> <span>/ $nbstep</span>
EOH

$bstr = "<a href=\"$adm_cfg{self}&sw=list&dm_step=$bstep&dm_total=$dm_total&dm_ordby=$dm_ordby&dm_search=$dm_search&search_val=$search_val&dm_way=$dm_way$dm_filter\"><span>&lsaquo;</span></a>";
$nstr = "<a href=\"$adm_cfg{self}&sw=list&dm_step=$nstep&dm_total=$dm_total&dm_ordby=$dm_ordby&dm_search=$dm_search&search_val=$search_val&dm_way=$dm_way$dm_filter\"><span>&rsaquo;</span></a>";

my $limit = $dm_step*$howmany;

my %select_fields  = ();
my $key = "";
my $select_column_i = 1;

my %all_fields = (%dm_display_fields,%dm_lnk_fields);



foreach $key (sort keys(%all_fields)) {

# print "<br>key = $key";

   $as = "dm_sel_".sprintf("%02d",$select_column_i);
   
    my ($colnum,$coltitle,@other) = split (/\//,$key);
    my $icon = join('/',@other);
    #if ($icon eq "") {$icon = $fwicons{edit};}
    
#    print " ==> [".$all_fields{$key}."]";
    
    my $type = "regular";
    
    if ($all_fields{$key} =~ /\*/) {
        $all_fields{$key} =~ s/\*//;
        $type = "map";
    }elsif ($all_fields{$key} =~ /\@/) 
    {
       
        $all_fields{$key} =~ s/\@//;
        $type = "trad";
    }elsif ($all_fields{$key} =~ /\|/) 
    {
       
        $all_fields{$key} =~ s/\|//;
        $type = "pic";
    }elsif ($all_fields{$key} =~ /\#N/) {
        $all_fields{$key} =~ s/\#N//;
        $type = "colorinv";
    }elsif ($all_fields{$key} =~ /\#/) {
        $all_fields{$key} =~ s/\#//;
        $type = "color";
    }

#    print " /$type ==> [".$all_fields{$key}."]";

    if ($type eq "regular" && defined($dm_lnk_fields{$key})) {$type="lnk";}
    if (($type eq "lnk" || $type eq "map") && defined($dm_lnk_fields{$key})) {$field = "'a'";}
    else { $field = $all_fields{$key}; }
    $select_fields{$as}{title} = $coltitle; 
    $select_fields{$as}{field} = $field; 
    $selecdt_fields{$as}{idx}= $select_column_i;
    $select_fields{$as}{type}= $type;
    $select_fields{$as}{as} = $as; 
    $select_fields{$as}{key} = $key; 
    $select_fields{$as}{icon} = $icon; 
    $select_column_i++;    
}

#print "<br>".gethash(\%select_fields);


my $head_fields = "";


foreach $col (sort(keys(%select_fields))) {
#      if ($select_fields{$col}{type} eq "regular") {
      $sql_cols .= $select_fields{$col}{field}.
                   " AS ".
                   $select_fields{$col}{as}." ,";
#}

if ($dm_ordby eq $select_fields{$col}{as}) {
if ($dm_way eq "asc") {$this_dm_way="desc";$way_icon = $fwicons{sortdown}; } elsif ($dm_way eq "desc") {$this_dm_way="asc";$way_icon=$fwicons{sortup};} 
} else {
$this_dm_way = "asc";
$way_icon = "";
}
if ($select_fields{$col}{type} ne "colorinv") 
{
$head_fields .= <<"EOH";
<th class="mig_th">
	<a href="$adm_cfg{self}&dm_ordby=$select_fields{$col}{as}&dm_way=$this_dm_way$dm_filter">$select_fields{$col}{title} $way_icon</a>
</th>
EOH
}

}

chop($sql_cols);

if ($adm_cfg{vis_opt}) {$sql_cols .=" , $adm_cfg{table_name}.visible AS dm_sel_vis";}
if ($adm_cfg{sort_opt}) {$sql_cols .=", $adm_cfg{table_name}.ordby AS dm_sel_ordby";}

# get the fields to select, and order them as given in the list
my $dis_fields = "";
my $cpts = 0;
my @idx_map;


#my $dis_fields = join(",",sort values(%display_fields));

my $opt_fields = "";


# build the main query
my $stmt = "SELECT DISTINCT $adm_cfg{table_name}.id AS dm_sel_id,

$sql_cols

FROM $adm_cfg{list_table_name}
$search_stmt
ORDER BY $dm_ordby $dm_way

LIMIT $limit,$howmany";

my $cursor = $dbh_data->prepare($stmt);
$cursor->execute || wfw_exception("SQL_ERROR","error execute : $DBI::errstr [$stmt]\n");


#  print "[$stmt]";
my ($id,@dis_fields);

my $cpt = 0;

# build header for each column, with sort options

if ($adm_cfg{vis_opt}) {$vis_header = "<th class=\"mig_th mig_th_vis\"></th>";}
if ($adm_cfg{sort_opt}) {$sort_header = "<th class=\"mig_th mig_th_sort\"></th>";}

if ($adm_cfg{enable_search}) 
{
$searchform = <<"EOH";
						$listlistboxes
						<div class="mig_search_filter">
							<p><label><span>&nbsp;</span><select name="search_val" class="mig_select"><option value=""></option>$search_list</select></label></p>
						</div>
						<div class="mig_search_filter">
							<div class="mig_search_filter_content">
								<p><label><span>$adm_default_txt{dm_search} :</span><input type="text" name="dm_search" id="dm_search" value="$dm_search_clean" class="mig_input_txt" /></label></p>
							</div>
							<a href="#" onclick="javascript:document.dm_search.submit(); return false;" class="mig_button mig_search_filter_button">$adm_default_txt{admin_search_button}</a>
						</div>
						<div class="clear"></div>
EOH
}
if ($adm_cfg{enable_multipage})
{
$navmulti = <<"EOH";
				
						
						<div class="mig_multipage">
							<form action="$adm_cfg{self}" method="post" name="navbar<ISTEP>" id="navbar<ISTEP>">
								<table class="dm_mp_nav" cellpadding="0" cellspacing="0" border="0">
									<tr>
										<td class="mig_multipage_previous_page">$bstr</td>
										<td class="mig_multipage_select_page">$steps</td>
										<td class="mig_multipage_next_page">$nstr</td>
										<td class="mig_multipage_nbr_result">$dm_total $adm_default_txt{dm_items}</td>
									</tr>
								</table>
							</form>
						</div>
EOH
}

$navmulti2 = $navmulti1 = $navmulti;

$navmulti1 =~ s/<ISTEP>/1/g;
$navmulti2 =~ s/<ISTEP>/2/g;

my $new_element_form = <<"EOH";
			<form action="$adm_cfg{self}" method="post" style="float:right;">
				$adm_cfg{hiddp_mp}
				<input type="hidden" NAME="sw" VALUE="add_form" />
				$add_butt
			</form>
EOH


$del_header = "<th class=\"mig_th mig_th_checkall\"><a onclick=\"change_all_check();return false;\">$fwicons{checkall}</a></th>";

# header properties button
if ($adm_cfg{disable_mod} ne "y")
{
$mod_header = "<th class=\"mig_th mig_th_disable\">&nbsp;</th>";
}

# header View
if ($adm_cfg{view_button})
{
$view_header = "<th class=\"mig_th mig_th_button\">&nbsp;</th>";
}

$adm_cfg{ordby_col}=$adm_cfg{sort_opt} || 0;
# header View
if ($adm_cfg{ordby_col})
{
$ordby_col_header = "<th class=\"mig_th mig_th_nr\">N&deg;</th>";
}

# header id
if (!$adm_cfg{hide_id})
{
$id_header = "<th class=\"mig_th mig_th_id\"><a href=\"$adm_cfg{self}&dm_ordby=$adm_cfg{table_name}.id\">ID</a></th>";
}


$dm_output{content}.=  <<"END_OF_HTML";




				<script type="text/javascript">
					function dm_confirm_del()
					{
						if(confirm('$adm_default_txt{dm_confirmdel}'))
            {
              jQuery("#sw_3").val('del_db');
              return true;
            }
            else
            {
              jQuery("#sw_3").val('');
              return false;
            }
					}
          function dm_confirm_dupl()
					{
						if(confirm('Cliquez sur OK pour confirmer la duplication'))
            {
              jQuery("#sw_3").val('dupl_db');
              return true;
            }
            else
            {
              jQuery("#sw_3").val('');
              return false;
            }
					}
					function dm_confirm_valide()
					{
						if(confirm('$adm_default_txt{dm_confirm_valide}'))
						{
                jQuery("#sw_3").val('datadir_confirm_db');
                jQuery("#sw_3").parent().submit(); 
            }
            return false;
					}
				</script>

				<div class="mig_table_list">
					<form action="$adm_cfg{self}" method="post" name="dm_search">
						$adm_cfg{hiddp}
						<input type="hidden" name="sw" id="sw_2" value="list" />
						$searchform
					</form>
$new_element_form
					$navmulti1
					
					
					
					
					<fieldset class="mig_fieldset">
						$prehtml
						
					
						
						<form action="$adm_cfg{self}" method="post" name="dm_form">
							$adm_cfg{hiddp_mp}
							<input type=hidden name="sw" id="sw_3" value="" />
							<input type=hidden name="db" id="db" value="$adm_cfg{table_name}" />
              <input type=hidden name="dbh" id="dbh" value="$adm_cfg{dbh}" />
							<table class="mig_table_items">
								<tr>
									$del_header
									$id_header
									$ordby_col_header
									$head_fields
									$mod_header
									$view_header
									$vis_header
									$sort_header
								</tr>

END_OF_HTML

$cpt = 0;

# foreach row, display it
for ($i = 0; ($i < $howmany) && ($row = $cursor->fetchrow_hashref()); $i++) {

    $dis_fields = "";
    %row = %{$row};
    $id = $row{dm_sel_id};
    
    # if could be hidden, check if so
    if ($adm_cfg{hidden_ref} ne "") {
        my $fct = $adm_cfg{hidden_ref};
        $hideme = &fct($dbh_data,$id);
    } else {
        $hideme = 0;
    }

   if ($hideme) {next;} # if hidden, go next row
   
    if ($cpt%2) {
        $class="mig_row_02";
        $check_class="mig_check_02";
    } else {
        $class="mig_row_01";
        $check_class="mig_check_01";
    }

    
    foreach $as (sort keys(%row)) {
        $val = $row{$as};
        if ($as eq "dm_sel_vis" || $as eq "dm_sel_ordby" || $as eq "dm_sel_id") { next;}        
        #--------- mapped field ----------
        if ($select_fields{$as}{type} eq "map") 
        {

            # if lnk_field
            if ($dm_lnk_fields{$select_fields{$as}{key}} =~ /\*$/) {
                my $func = $dm_lnk_fields{$select_fields{$as}{key}};
                $func =~ s/\*//;
                $func = $dm_mapping_list{$func};
                my $ret = &$func($dbh_data,$id,$adm_cfg{map_param});
                $val = $ret;            
            }
            # if display_field
            elsif ($dm_display_fields{$select_fields{$as}{key}} =~ /\*$/) {
                my $func = $dm_display_fields{$select_fields{$as}{key}};
                $func =~ s/\*//;
                
                $map = $dm_mapping_list{$func};

#                print "[$func] -> [$map](".ref($map).")$val";
#see();                   print "<pre>".Dumper(\%map)."</pre>";
                
                if (ref($map) eq "HASH") {            
                    my %map = %{$map};
                    $val = $map{$val};
                } elsif (ref($map) eq "CODE") {            
                    my $ret = &$map($dbh_data,$val,$adm_cfg{map_param},$colg);
                    $val = $ret;                          
                }
            }
        #--------- tupcolor field ----------
        } elsif ($select_fields{$as}{type} eq "color") {

                my %condclass = %{$dm_tupcolors{$select_fields{$as}{field}}};

                foreach $cond (keys(%condclass)) {
                    if ($cond =~ /SQL/) {
                        my $query = $cond;
                        $query =~ s/SQL\[//g;
                        $query =~ s/\]//g;
                        $query =~ s/<ID>/$id/;

                        my $sqlcursor = $dbh_data->prepare($query);
                        $sqlcursor->execute || wfw_exception("SQL_ERROR","error execute : $DBI::errstr [$query]\n");
                        my $rep = $sqlcursor->fetchrow_array();
                        $sqlcursor->finish;
                        if (!$rep) { $class = $condclass{$cond}; }
                    } else { if (eval("$val$cond")) {
                                $class = $condclass{$cond};
                            }
                      }
                }
        #--------- tupcolor field ----------
        } elsif ($select_fields{$as}{type} eq "colorinv") {

                my %condclass = %{$dm_tupcolors{$select_fields{$as}{field}}};

                foreach $cond (keys(%condclass)) {
                    if ($cond =~ /SQL/) {
                        my $query = $cond;
                        $query =~ s/SQL\[//g;
                        $query =~ s/\]//g;
                        $query =~ s/<ID>/$id/;

                        my $sqlcursor = $dbh_data->prepare($query);
                        $sqlcursor->execute || wfw_exception("SQL_ERROR","error execute : $DBI::errstr [$query]\n");
                        my $rep = $sqlcursor->fetchrow_array();
                        $sqlcursor->finish;
                        if (!$rep) { $class = $condclass{$cond}; }
                    } else { if (eval("$val$cond")) {
                                $class = $condclass{$cond};
                            }
                      }
                }

                #--------- trad field ----------
        } elsif ($select_fields{$as}{type} eq "trad") {
          
          
          
          
          
          #use Data::Dumper;
          #print "<pre>".Dumper(%select_fields)."</pre>";
          #exit;
          
          
          
          
          
          
        
          
             #$val .= " ".get_obj_tradlnk($dbh_data,$id,$adm_cfg{table_name},$config{default_language},$select_fields{$as}{title});
         
         
        #--------- lnk field with tag ----------
        } elsif ($dm_lnk_fields{$select_fields{$as}{key}} =~ /<ID>/) {
                     
            my $speclnk = $dm_lnk_fields{$select_fields{$as}{key}};
            $speclnk =~ s/<ID>/$id/;
            $val ="<div class=\"mig_lnk_content\"><a href=\"$speclnk\" class=\"mig_lnk\">".$dm_lnk_fields{$select_fields{$as}{icon}}."</a></div>";
            

         #--------- simple lnk field ----------
        } elsif ($select_fields{$as}{type} eq "lnk") {
                     
            $val ="<div class=\"mig_lnk_content\"><a href=\"".$dm_lnk_fields{$select_fields{$as}{key}}.$id."\" class=\"mig_lnk\">".$select_fields{$as}{icon}."</a></div>";
        }
        
        if ($adm_cfg{autolink_email} && ($val =~ /^[^@]+@([-\w]+\.)+[A-Za-z]{2,4}$/)) {
            $val = "<a href=\"mailto:$val\" class=\"dm_lnk\">$val</a>";
        }
        
         
        
        if ($select_fields{$as}{type} ne "colorinv") 
        {
            if ($select_fields{$as}{type} eq "trad" && $val ne "") 
            {
               my ($traduit,$dum)=get_textcontent($dbh_data,$val,$colg);
               #$traduit=$val;
               $dis_fields.="<td class=\"$class \">$traduit</td>\n";
            } 
            elsif ($select_fields{$as}{type} eq "pic" && $val > 0) 
            {
               my %pic=read_table($dbh,"pics",$val);
               
               if(-e "../pics/$pic{pic_name_mini}")
               {
                $dis_fields.="<td class=\"$class\"><img src='../pics/$pic{pic_name_mini}' /></td>\n";
               }
               else
               {
                 $dis_fields.="<td class=\"$class\">Fichier absent</td>\n";
               }
            }
            else
            {
              my $class_plus=$select_fields{$as}{key};
              my ($ord,$dum) = split (/\//,$class_plus);
              $class_plus='td_'.$ord;
#               print '<b>'.$as.'</b>';
#               see($select_fields{$as});
#               print '<br />'.$select_fields{$as}{field};
#               
              my $cb = 0;
              my $sav_champ = ''; 
              foreach $dd (keys %dm_dfl)
              {
                   my ($dum,$champ) = split (/\//,$dd);
                   if($select_fields{$as}{field} eq $champ)
                   {
#                       print '<i> =?'.$champ.'</i>';
                      my %dd = %{$dm_dfl{$dd}};
                      if($dd{fieldtype} eq 'checkbox')
                      {
#                           see(\%dd);
                          $cb=1;
                          $sav_champ = $champ;
                      }
                   } 
                  
              }
              
#               print "<br />$select_fields{$as}{field}";
              if($cb)
              {
                  if($val eq 'y')
                  {
                      $dis_fields .= "<td class=\"$class $class_plus \"> <input checked=\"checked\" type=\"checkbox\" value=\"$id\" name=\"$sav_champ\" class=\"dm_autosave_cb\" /> </td>\n";
                  }
                  else
                  {
                      $dis_fields .= "<td class=\"$class $class_plus \"> <input type=\"checkbox\" value=\"$id\" name=\"$sav_champ\" class=\"dm_autosave_cb\" /> </td>\n";                  
                  }
              }
              else
              {
                 $dis_fields.="<td class=\"$class $class_plus \">$val</td>\n";
              }
              
            }
        }
        
                
    }
    my ($vis_html,$sort_html);

    # vis BUTTON
    if ($adm_cfg{vis_opt}) {
        my $vis = $row{dm_sel_vis};

        if ($vis eq 'y') {
            $smiley = $fwicons{visible};
        } else {
            $smiley = $fwicons{invisible};
        }
    $vis_html = "<td class=\"$class\"><a href=\"$adm_cfg{self_mp}&sw=ajax_changevis&id=$id&vis=$vis\" class=\"dm_lnk link_changevis\" id=\"$id\">$smiley</a></td>";
    }

    # sort button
    if ($adm_cfg{sort_opt}) {
        $adm_cfg{wherep}=~ s/ /\%20/g;
        $adm_cfg{wherep}=~ s/\'//g;
        $sort_html = "<td class=\"$class\"><a href=\"#\" class=\"link_sortbox\" onclick=\"return view_sortbox(arguments[0],$row{dm_sel_ordby},$id);\">$fwicons{sort}</a> </td>";
        $ordby_col_html = "<td class=\"$class\">$row{dm_sel_ordby}</td>";
    }

    $del_html = "<td class=\"$check_class\"><input type=\"checkbox\" name=\"chk_$cpt\" value=\"$id\" class=\"mig_checkbox\"/></td>";
    my $colg=get_quoted('colg') || $config{default_colg} || 1;

    # Properties BUTTON
    if ($adm_cfg{disable_mod} ne "y") {
        $mod_html = "<td class=\"$class\"><a href=\"$adm_cfg{self_mp}&sw=mod_form&colg=$colg&id=$id$dm_filter\">$fwicons{properties}</a></td>";
    }

    # Preview BUTTON
    if ($adm_cfg{view_button}) {
        $view_html = "<td class=\"$class\"><a href=\"$adm_cfg{self_mp}&sw=view&id=$id$dm_filter\">$fwicons{preview}</a></td>";
    }

    # ID
    if (!$adm_cfg{hide_id}) {
        $id_html = "<td class=\"$class\">$id</td>";
    }

$dm_output{content}.=  <<"END_OF_HTML";
<tr>
$del_html
$id_html
$ordby_col_html
$dis_fields
$view_html
$mod_html
$vis_html
$sort_html
</tr>
END_OF_HTML
$cpt++;
}


# if($adm_cfg{disable_buttons} ne "y")
# {
 # $del_butt = <<"EOH";
# <button type="submit" OnClick="return dm_confirm_del();" class="mig_button" id="dm_button_del">$adm_default_txt{dm_delbutton}</button>
# EOH

 # $add_butt = <<"EOH";
# <button type="submit" class="mig_button" id="dm_button_add">$adm_default_txt{dm_new_item}</button>
# EOH
# }



# if($adm_cfg{duplicate} eq "y")
# {
 # $duplicate = <<"EOH";
# <button type="submit" OnClick="return dm_confirm_dupl();" class="mig_button" id="dm_button_dupl">Dupliquer</button>
# EOH
# }

# if($adm_cfg{disable_del_button} eq "y")
# {
    # $del_butt="";
# }



# display the foot...
$dm_output{content}.=  <<"END_OF_HTML";
</table>
</fieldset>

<table id="mig_button_content">
	<tr>
		<td>
			<input type="hidden" name="cpt" value="$cpt" />
			$del_butt
			$adm_cfg{supp_button}
		</td>
    <td>
     $duplicate
    </td>
		<td>
			</form>
			
			$new_element_form
			
			
		</td>
	</tr>
</table>$navmulti2
</div>
$posthtml
END_OF_HTML


$dm_output{content}.=  <<"END_OF_HTML";

<div class="sortbox" id="sortbox">
	<div class="sortitem"><a href="#" onclick="return sortbox_top();">$fwicons{top}</a></div>
	<div class="sortitem"><a href="#" onclick="return sortbox_up();">$fwicons{up}</a></div>
	<div class="sortitem"><span id="sortbox_num">0</span></div>
	<div class="sortitem"><a href="#" onclick="return sortbox_down();">$fwicons{down}</a></div>
	<div class="sortitem"><a href="#" onclick="return sortbox_bottom();">$fwicons{bottom}</a></div>
	<hr size="1" style="display:none;" />
	<div class="sortitem mig_sortim_pos">$adm_default_txt{admin_sort_label} : <input type="text" name="sortbox_ordby" value="0" size="2" id="sortbox_ordby" onkeypress="sortbox_goto(event);" class="mig_input_txt"/> <input type="hidden" name="sortbox_url" id="sortbox_url" value="$adm_cfg{self}&sw=change_ordby" />$hidden</div> 
</div>


<script type="text/javascript">
 jQuery(document).ready(function()
 {
    jQuery('.link_changevis').live('click',function()
    {
        var me = jQuery(this);
        var conteneur = me.parent();
        var url = me.attr('href');
        var id = me.attr('id');
        conteneur.html('<img src="mig_skin/gfx/ajax-loader.gif" />');
        jQuery.ajax(
        {
           type: "POST",
           url: url,
           data: "sw=ajax_changevis&id="+id,
           success: function(msg)
           {
               conteneur.html(msg);
           }
        });
        return false;    
    });
    
    jQuery('.dm_autosave_cb').live('click',function()
    {
        var me = jQuery(this);
        var conteneur = me.parent();
        
        var table = jQuery("#db").val();
        var dbh = jQuery("#dbh").val();
        var id = me.val();
        var col = me.attr('name');
                             
        var url = 'cgi-bin/adm_data_sheets.pl?';
        
        conteneur.html('<img src="mig_skin/gfx/ajax-loader.gif" />');
        jQuery.ajax(
        {
           type: "POST",
           url: url,
           data: '&sw=toggle_checkbox&table='+table+'&id='+id+'&col='+col+'&dbh='+dbh,
           success: function(msg)
           {
               conteneur.html(msg);
           }
        });
        return false;    
    });
    
    
 });
</script>


END_OF_HTML

}
