From ef03f59e508bd7acca2b7528d0211cc22c0520ea Mon Sep 17 00:00:00 2001
From: Laurent Destailleur <eldy@destailleur.fr>
Date: Wed, 2 Nov 2016 12:16:46 +0100
Subject: [PATCH] Uniformize code

---
 dev/skeletons/skeleton_list.php | 578 ++++++++++++------------
 htdocs/commande/list.php        |  70 +--
 htdocs/contact/card.php         |   4 +-
 htdocs/contact/list.php         | 755 ++++++++++++++++----------------
 htdocs/societe/list.php         |  88 ++--
 5 files changed, 763 insertions(+), 732 deletions(-)

diff --git a/dev/skeletons/skeleton_list.php b/dev/skeletons/skeleton_list.php
index 27515db3c68..da8a9995538 100644
--- a/dev/skeletons/skeleton_list.php
+++ b/dev/skeletons/skeleton_list.php
@@ -141,22 +141,23 @@ $parameters=array();
 $reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action);    // Note that $action and $object may have been modified by some hooks
 if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
 
-include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
-
-// Purge search criteria
-if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter.x") ||GETPOST("button_removefilter")) // All test are required to be compatible with all browsers
+if (empty($reshook))
 {
-	$search_field1='';
-	$search_field2='';
-	$search_date_creation='';
-	$search_date_update='';
-    $toselect='';
-    $search_array_options=array();
-}
+    // Selection of new fields
+    include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
 
+    // Purge search criteria
+    if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter.x") ||GETPOST("button_removefilter")) // All tests are required to be compatible with all browsers
+    {
+    	$search_field1='';
+    	$search_field2='';
+    	$search_date_creation='';
+    	$search_date_update='';
+        $toselect='';
+        $search_array_options=array();
+    }
 
-if (empty($reshook))
-{
+    // Mass actions
     $objectclass='Skeleton';
     $objectlabel='Skeleton';
     $permtoread = $user->rights->skeleton->read;
@@ -180,7 +181,6 @@ $form=new Form($db);
 //$help_url="EN:Module_Customers_Orders|FR:Module_Commandes_Clients|ES:Módulo_Pedidos_de_clientes";
 $help_url='';
 $title = $langs->trans('MyModuleListTitle');
-llxHeader('', $title, $help_url);
 
 // Put here content of your page
 
@@ -250,298 +250,306 @@ $sql.= $db->plimit($limit+1, $offset);
 
 dol_syslog($script_file, LOG_DEBUG);
 $resql=$db->query($sql);
-if ($resql)
+if (! $resql)
 {
-    $num = $db->num_rows($resql);
-    
-    $arrayofselected=is_array($toselect)?$toselect:array();
-    
-    $param='';
-    if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage;
-    if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit;
-    if ($search_field1 != '') $param.= '&amp;search_field1='.urlencode($search_field1);
-	if ($search_field2 != '') $param.= '&amp;search_field2='.urlencode($search_field2);
-    if ($optioncss != '') $param.='&optioncss='.$optioncss;
-    // Add $param from extra fields
-    foreach ($search_array_options as $key => $val)
-    {
-        $crit=$val;
-        $tmpkey=preg_replace('/search_options_/','',$key);
-        if ($val != '') $param.='&search_options_'.$tmpkey.'='.urlencode($val);
-    } 
-
-    $arrayofmassactions =  array(
-        'presend'=>$langs->trans("SendByMail"),
-        'builddoc'=>$langs->trans("PDFMerge"),
-    );
-    if ($user->rights->mymodule->supprimer) $arrayofmassactions['delete']=$langs->trans("Delete");
-    if ($massaction == 'presend') $arrayofmassactions=array();
-    $massactionbutton=$form->selectMassAction('', $arrayofmassactions);
-    
-	print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].'">';
-    if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
-	print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
-	print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
-    print '<input type="hidden" name="action" value="list">';
-	print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
-	print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
-	
-    print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords, 'title_companies', 0, '', '', $limit);
-	
-	if ($sall)
+    dol_print_error($db);
+    exit;
+}
+
+$num = $db->num_rows($resql);
+
+// Direct jump if only one record found
+if ($num == 1 && ! empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE))
+{
+    $obj = $db->fetch_object($resql);
+    $id = $obj->rowid;
+    header("Location: ".DOL_URL_ROOT.'/skeleton/card.php?id='.$id);
+    exit;
+}
+
+llxHeader('', $title, $help_url);
+
+$arrayofselected=is_array($toselect)?$toselect:array();
+
+$param='';
+if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage;
+if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit;
+if ($search_field1 != '') $param.= '&amp;search_field1='.urlencode($search_field1);
+if ($search_field2 != '') $param.= '&amp;search_field2='.urlencode($search_field2);
+if ($optioncss != '') $param.='&optioncss='.$optioncss;
+// Add $param from extra fields
+foreach ($search_array_options as $key => $val)
+{
+    $crit=$val;
+    $tmpkey=preg_replace('/search_options_/','',$key);
+    if ($val != '') $param.='&search_options_'.$tmpkey.'='.urlencode($val);
+} 
+
+$arrayofmassactions =  array(
+    'presend'=>$langs->trans("SendByMail"),
+    'builddoc'=>$langs->trans("PDFMerge"),
+);
+if ($user->rights->mymodule->supprimer) $arrayofmassactions['delete']=$langs->trans("Delete");
+if ($massaction == 'presend') $arrayofmassactions=array();
+$massactionbutton=$form->selectMassAction('', $arrayofmassactions);
+
+print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].'">';
+if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
+print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
+print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
+print '<input type="hidden" name="action" value="list">';
+print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
+print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
+
+print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords, 'title_companies', 0, '', '', $limit);
+
+if ($sall)
+{
+    foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val);
+    print $langs->trans("FilterOnInto", $sall) . join(', ',$fieldstosearchall);
+}
+
+$moreforfilter = '';
+$moreforfilter.='<div class="divsearchfield">';
+$moreforfilter.= $langs->trans('MyFilter') . ': <input type="text" name="search_myfield" value="'.dol_escape_htmltag($search_myfield).'">';
+$moreforfilter.= '</div>';
+
+$parameters=array();
+$reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters);    // Note that $action and $object may have been modified by hook
+if (empty($reshook)) $moreforfilter .= $hookmanager->resPrint;
+else $moreforfilter = $hookmanager->resPrint;
+
+if (! empty($moreforfilter))
+{
+	print '<div class="liste_titre liste_titre_bydiv centpercent">';
+	print $moreforfilter;
+    print '</div>';
+}
+
+$varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage;
+$selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage);	// This also change content of $arrayfields
+
+print '<table class="tagtable liste'.($moreforfilter?" listwithfilterbefore":"").'">'."\n";
+
+// Fields title
+print '<tr class="liste_titre">';
+// LIST_OF_TD_TITLE_FIELDS
+//if (! empty($arrayfields['t.field1']['checked'])) print_liste_field_titre($arrayfields['t.field1']['label'],$_SERVER['PHP_SELF'],'t.field1','',$param,'',$sortfield,$sortorder);
+//if (! empty($arrayfields['t.field2']['checked'])) print_liste_field_titre($arrayfields['t.field2']['label'],$_SERVER['PHP_SELF'],'t.field2','',$param,'',$sortfield,$sortorder);
+// Extra fields
+if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
+{
+   foreach($extrafields->attribute_label as $key => $val) 
+   {
+       if (! empty($arrayfields["ef.".$key]['checked'])) 
+       {
+			$align=$extrafields->getAlignFlag($key);
+			print_liste_field_titre($extralabels[$key],$_SERVER["PHP_SELF"],"ef.".$key,"",$param,($align?'align="'.$align.'"':''),$sortfield,$sortorder);
+       }
+   }
+}
+// Hook fields
+$parameters=array('arrayfields'=>$arrayfields);
+$reshook=$hookmanager->executeHooks('printFieldListTitle',$parameters);    // Note that $action and $object may have been modified by hook
+print $hookmanager->resPrint;
+if (! empty($arrayfields['t.datec']['checked']))  print_liste_field_titre($arrayfields['t.datec']['label'],$_SERVER["PHP_SELF"],"t.datec","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
+if (! empty($arrayfields['t.tms']['checked']))    print_liste_field_titre($arrayfields['t.tms']['label'],$_SERVER["PHP_SELF"],"t.tms","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
+//if (! empty($arrayfields['t.status']['checked'])) print_liste_field_titre($langs->trans("Status"),$_SERVER["PHP_SELF"],"t.status","",$param,'align="center"',$sortfield,$sortorder);
+print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"],"",'','','align="right"',$sortfield,$sortorder,'maxwidthsearch ');
+print '</tr>'."\n";
+
+// Fields title search
+print '<tr class="liste_titre">';
+// LIST_OF_TD_TITLE_SEARCH
+//if (! empty($arrayfields['t.field1']['checked'])) print '<td class="liste_titre"><input type="text" class="flat" name="search_field1" value="'.$search_field1.'" size="10"></td>';
+//if (! empty($arrayfields['t.field2']['checked'])) print '<td class="liste_titre"><input type="text" class="flat" name="search_field2" value="'.$search_field2.'" size="10"></td>';
+// Extra fields
+if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
+{
+    foreach($extrafields->attribute_label as $key => $val) 
     {
-        foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val);
-        print $langs->trans("FilterOnInto", $sall) . join(', ',$fieldstosearchall);
+        if (! empty($arrayfields["ef.".$key]['checked']))
+        {
+            $align=$extrafields->getAlignFlag($key);
+            $typeofextrafield=$extrafields->attribute_type[$key];
+            print '<td class="liste_titre'.($align?' '.$align:'').'">';
+        	if (in_array($typeofextrafield, array('varchar', 'int', 'double', 'select')))
+			{
+			    $crit=$val;
+				$tmpkey=preg_replace('/search_options_/','',$key);
+				$searchclass='';
+				if (in_array($typeofextrafield, array('varchar', 'select'))) $searchclass='searchstring';
+				if (in_array($typeofextrafield, array('int', 'double'))) $searchclass='searchnum';
+				print '<input class="flat'.($searchclass?' '.$searchclass:'').'" size="4" type="text" name="search_options_'.$tmpkey.'" value="'.dol_escape_htmltag($search_array_options['search_options_'.$tmpkey]).'">';
+			}
+            print '</td>';
+        }
     }
+}
+// Fields from hook
+$parameters=array('arrayfields'=>$arrayfields);
+$reshook=$hookmanager->executeHooks('printFieldListOption',$parameters);    // Note that $action and $object may have been modified by hook
+print $hookmanager->resPrint;
+if (! empty($arrayfields['t.datec']['checked']))
+{
+    // Date creation
+    print '<td class="liste_titre">';
+    print '</td>';
+}
+if (! empty($arrayfields['t.tms']['checked']))
+{
+    // Date modification
+    print '<td class="liste_titre">';
+    print '</td>';
+}
+/*if (! empty($arrayfields['u.statut']['checked']))
+{
+    // Status
+    print '<td class="liste_titre" align="center">';
+    print $form->selectarray('search_statut', array('-1'=>'','0'=>$langs->trans('Disabled'),'1'=>$langs->trans('Enabled')),$search_statut);
+    print '</td>';
+}*/
+// Action column
+print '<td class="liste_titre" align="right">';
+$searchpitco=$form->showFilterAndCheckAddButtons($massactionbutton?1:0, 'checkforselect', 1);
+print $searchpitco;
+print '</td>';
+print '</tr>'."\n";
     
-    $moreforfilter = '';
-    $moreforfilter.='<div class="divsearchfield">';
-    $moreforfilter.= $langs->trans('MyFilter') . ': <input type="text" name="search_myfield" value="'.dol_escape_htmltag($search_myfield).'">';
-    $moreforfilter.= '</div>';
-    
-    $parameters=array();
-    $reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters);    // Note that $action and $object may have been modified by hook
-    if (empty($reshook)) $moreforfilter .= $hookmanager->resPrint;
-    else $moreforfilter = $hookmanager->resPrint;
-    
-	if (! empty($moreforfilter))
-	{
-		print '<div class="liste_titre liste_titre_bydiv centpercent">';
-		print $moreforfilter;
-	    print '</div>';
-	}
 
-    $varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage;
-    $selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage);	// This also change content of $arrayfields
-	
-	print '<table class="tagtable liste'.($moreforfilter?" listwithfilterbefore":"").'">'."\n";
-
-    // Fields title
-    print '<tr class="liste_titre">';
-    // LIST_OF_TD_TITLE_FIELDS
-    //if (! empty($arrayfields['t.field1']['checked'])) print_liste_field_titre($arrayfields['t.field1']['label'],$_SERVER['PHP_SELF'],'t.field1','',$param,'',$sortfield,$sortorder);
-    //if (! empty($arrayfields['t.field2']['checked'])) print_liste_field_titre($arrayfields['t.field2']['label'],$_SERVER['PHP_SELF'],'t.field2','',$param,'',$sortfield,$sortorder);
-	// Extra fields
-	if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
-	{
-	   foreach($extrafields->attribute_label as $key => $val) 
-	   {
-           if (! empty($arrayfields["ef.".$key]['checked'])) 
-           {
-				$align=$extrafields->getAlignFlag($key);
-				print_liste_field_titre($extralabels[$key],$_SERVER["PHP_SELF"],"ef.".$key,"",$param,($align?'align="'.$align.'"':''),$sortfield,$sortorder);
-           }
-	   }
-	}
-    // Hook fields
-	$parameters=array('arrayfields'=>$arrayfields);
-    $reshook=$hookmanager->executeHooks('printFieldListTitle',$parameters);    // Note that $action and $object may have been modified by hook
-    print $hookmanager->resPrint;
-	if (! empty($arrayfields['t.datec']['checked']))  print_liste_field_titre($arrayfields['t.datec']['label'],$_SERVER["PHP_SELF"],"t.datec","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
-	if (! empty($arrayfields['t.tms']['checked']))    print_liste_field_titre($arrayfields['t.tms']['label'],$_SERVER["PHP_SELF"],"t.tms","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
-	//if (! empty($arrayfields['t.status']['checked'])) print_liste_field_titre($langs->trans("Status"),$_SERVER["PHP_SELF"],"t.status","",$param,'align="center"',$sortfield,$sortorder);
-	print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"],"",'','','align="right"',$sortfield,$sortorder,'maxwidthsearch ');
-    print '</tr>'."\n";
-
-    // Fields title search
-	print '<tr class="liste_titre">';
-	// LIST_OF_TD_TITLE_SEARCH
-	//if (! empty($arrayfields['t.field1']['checked'])) print '<td class="liste_titre"><input type="text" class="flat" name="search_field1" value="'.$search_field1.'" size="10"></td>';
-	//if (! empty($arrayfields['t.field2']['checked'])) print '<td class="liste_titre"><input type="text" class="flat" name="search_field2" value="'.$search_field2.'" size="10"></td>';
-	// Extra fields
-	if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
-	{
-        foreach($extrafields->attribute_label as $key => $val) 
+$i=0;
+$var=true;
+$totalarray=array();
+while ($i < min($num, $limit))
+{
+    $obj = $db->fetch_object($resql);
+    if ($obj)
+    {
+        $var = !$var;
+        
+        // Show here line of result
+        print '<tr '.$bc[$var].'>';
+        // LIST_OF_TD_FIELDS_LIST
+        /*
+        if (! empty($arrayfields['t.field1']['checked'])) 
         {
-            if (! empty($arrayfields["ef.".$key]['checked']))
-            {
-                $align=$extrafields->getAlignFlag($key);
-                $typeofextrafield=$extrafields->attribute_type[$key];
-                print '<td class="liste_titre'.($align?' '.$align:'').'">';
-            	if (in_array($typeofextrafield, array('varchar', 'int', 'double', 'select')))
+            print '<td>'.$obj->field1.'</td>';
+		    if (! $i) $totalarray['nbfield']++;
+        }
+        if (! empty($arrayfields['t.field2']['checked'])) 
+        {
+            print '<td>'.$obj->field2.'</td>';
+		    if (! $i) $totalarray['nbfield']++;
+        }*/
+    	// Extra fields
+		if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
+		{
+		   foreach($extrafields->attribute_label as $key => $val) 
+		   {
+				if (! empty($arrayfields["ef.".$key]['checked'])) 
 				{
-				    $crit=$val;
-    				$tmpkey=preg_replace('/search_options_/','',$key);
-    				$searchclass='';
-    				if (in_array($typeofextrafield, array('varchar', 'select'))) $searchclass='searchstring';
-    				if (in_array($typeofextrafield, array('int', 'double'))) $searchclass='searchnum';
-    				print '<input class="flat'.($searchclass?' '.$searchclass:'').'" size="4" type="text" name="search_options_'.$tmpkey.'" value="'.dol_escape_htmltag($search_array_options['search_options_'.$tmpkey]).'">';
+					print '<td';
+					$align=$extrafields->getAlignFlag($key);
+					if ($align) print ' align="'.$align.'"';
+					print '>';
+					$tmpkey='options_'.$key;
+					print $extrafields->showOutputField($key, $obj->$tmpkey, '', 1);
+					print '</td>';
+		            if (! $i) $totalarray['nbfield']++;
 				}
-                print '</td>';
-            }
+		   }
+		}
+        // Fields from hook
+	    $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj);
+		$reshook=$hookmanager->executeHooks('printFieldListValue',$parameters);    // Note that $action and $object may have been modified by hook
+        print $hookmanager->resPrint;
+    	// Date creation
+        if (! empty($arrayfields['t.datec']['checked']))
+        {
+            print '<td align="center">';
+            print dol_print_date($db->jdate($obj->date_creation), 'dayhour');
+            print '</td>';
+		    if (! $i) $totalarray['nbfield']++;
         }
-	}
-    // Fields from hook
-	$parameters=array('arrayfields'=>$arrayfields);
-    $reshook=$hookmanager->executeHooks('printFieldListOption',$parameters);    // Note that $action and $object may have been modified by hook
-    print $hookmanager->resPrint;
-    if (! empty($arrayfields['t.datec']['checked']))
-    {
-        // Date creation
-        print '<td class="liste_titre">';
-        print '</td>';
-    }
-    if (! empty($arrayfields['t.tms']['checked']))
-    {
         // Date modification
-        print '<td class="liste_titre">';
-        print '</td>';
-    }
-    /*if (! empty($arrayfields['u.statut']['checked']))
-    {
+        if (! empty($arrayfields['t.tms']['checked']))
+        {
+            print '<td align="center">';
+            print dol_print_date($db->jdate($obj->date_update), 'dayhour');
+            print '</td>';
+		    if (! $i) $totalarray['nbfield']++;
+        }
         // Status
-        print '<td class="liste_titre" align="center">';
-        print $form->selectarray('search_statut', array('-1'=>'','0'=>$langs->trans('Disabled'),'1'=>$langs->trans('Enabled')),$search_statut);
-        print '</td>';
-    }*/
-    // Action column
-	print '<td class="liste_titre" align="right">';
-	$searchpitco=$form->showFilterAndCheckAddButtons($massactionbutton?1:0, 'checkforselect', 1);
-    print $searchpitco;
-    print '</td>';
-	print '</tr>'."\n";
-        
-    
-	$i=0;
-	$var=true;
-	$totalarray=array();
-    while ($i < min($num, $limit))
-    {
-        $obj = $db->fetch_object($resql);
-        if ($obj)
+        /*
+        if (! empty($arrayfields['u.statut']['checked']))
+        {
+		  $userstatic->statut=$obj->statut;
+          print '<td align="center">'.$userstatic->getLibStatut(3).'</td>';
+        }*/
+
+        // Action column
+        print '<td class="nowrap" align="center">';
+	    if ($massactionbutton || $massaction)   // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
         {
-            $var = !$var;
-            
-            // Show here line of result
-            print '<tr '.$bc[$var].'>';
-            // LIST_OF_TD_FIELDS_LIST
-            /*
-            if (! empty($arrayfields['t.field1']['checked'])) 
-            {
-                print '<td>'.$obj->field1.'</td>';
-    		    if (! $i) $totalarray['nbfield']++;
-            }
-            if (! empty($arrayfields['t.field2']['checked'])) 
-            {
-                print '<td>'.$obj->field2.'</td>';
-    		    if (! $i) $totalarray['nbfield']++;
-            }*/
-        	// Extra fields
-    		if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
-    		{
-    		   foreach($extrafields->attribute_label as $key => $val) 
-    		   {
-    				if (! empty($arrayfields["ef.".$key]['checked'])) 
-    				{
-    					print '<td';
-    					$align=$extrafields->getAlignFlag($key);
-    					if ($align) print ' align="'.$align.'"';
-    					print '>';
-    					$tmpkey='options_'.$key;
-    					print $extrafields->showOutputField($key, $obj->$tmpkey, '', 1);
-    					print '</td>';
-    		            if (! $i) $totalarray['nbfield']++;
-    				}
-    		   }
-    		}
-            // Fields from hook
-    	    $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj);
-    		$reshook=$hookmanager->executeHooks('printFieldListValue',$parameters);    // Note that $action and $object may have been modified by hook
-            print $hookmanager->resPrint;
-        	// Date creation
-            if (! empty($arrayfields['t.datec']['checked']))
-            {
-                print '<td align="center">';
-                print dol_print_date($db->jdate($obj->date_creation), 'dayhour');
-                print '</td>';
-    		    if (! $i) $totalarray['nbfield']++;
-            }
-            // Date modification
-            if (! empty($arrayfields['t.tms']['checked']))
-            {
-                print '<td align="center">';
-                print dol_print_date($db->jdate($obj->date_update), 'dayhour');
-                print '</td>';
-    		    if (! $i) $totalarray['nbfield']++;
-            }
-            // Status
-            /*
-            if (! empty($arrayfields['u.statut']['checked']))
-            {
-    		  $userstatic->statut=$obj->statut;
-              print '<td align="center">'.$userstatic->getLibStatut(3).'</td>';
-            }*/
-
-            // Action column
-	        print '<td class="nowrap" align="center">';
-    	    if ($massactionbutton || $massaction)   // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
-	        {
-    	        $selected=0;
-    			if (in_array($obj->rowid, $arrayofselected)) $selected=1;
-    			print '<input id="cb'.$obj->rowid.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->rowid.'"'.($selected?' checked="checked"':'').'>';
-	        }
-    	    print '</td>';
-            if (! $i) $totalarray['nbfield']++;
-
-            print '</tr>';
+	        $selected=0;
+			if (in_array($obj->rowid, $arrayofselected)) $selected=1;
+			print '<input id="cb'.$obj->rowid.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->rowid.'"'.($selected?' checked="checked"':'').'>';
         }
+	    print '</td>';
+        if (! $i) $totalarray['nbfield']++;
+
+        print '</tr>';
+    }
+    $i++;
+}
+
+// Show total line
+if (isset($totalarray['totalhtfield']))
+{
+    print '<tr class="liste_total">';
+    $i=0;
+    while ($i < $totalarray['nbfield'])
+    {
         $i++;
+        if ($i == 1)
+        {
+            if ($num < $limit) print '<td align="left">'.$langs->trans("Total").'</td>';
+            else print '<td align="left">'.$langs->trans("Totalforthispage").'</td>';
+        }
+        elseif ($totalarray['totalhtfield'] == $i) print '<td align="right">'.price($totalarray['totalht']).'</td>';
+        elseif ($totalarray['totalvatfield'] == $i) print '<td align="right">'.price($totalarray['totalvat']).'</td>';
+        elseif ($totalarray['totalttcfield'] == $i) print '<td align="right">'.price($totalarray['totalttc']).'</td>';
+        else print '<td></td>';
     }
-    
-	// Show total line
-	if (isset($totalarray['totalhtfield']))
-	{
-	    print '<tr class="liste_total">';
-	    $i=0;
-	    while ($i < $totalarray['nbfield'])
-	    {
-	        $i++;
-	        if ($i == 1)
-	        {
-	            if ($num < $limit) print '<td align="left">'.$langs->trans("Total").'</td>';
-	            else print '<td align="left">'.$langs->trans("Totalforthispage").'</td>';
-	        }
-	        elseif ($totalarray['totalhtfield'] == $i) print '<td align="right">'.price($totalarray['totalht']).'</td>';
-	        elseif ($totalarray['totalvatfield'] == $i) print '<td align="right">'.price($totalarray['totalvat']).'</td>';
-	        elseif ($totalarray['totalttcfield'] == $i) print '<td align="right">'.price($totalarray['totalttc']).'</td>';
-	        else print '<td></td>';
-	    }
-	    print '</tr>';
-	}
-    
-	$db->free($resql);
+    print '</tr>';
+}
 
-	$parameters=array('arrayfields'=>$arrayfields, 'sql'=>$sql);
-	$reshook=$hookmanager->executeHooks('printFieldListFooter',$parameters);    // Note that $action and $object may have been modified by hook
-	print $hookmanager->resPrint;
+$db->free($resql);
 
-	print '</table>'."\n";
+$parameters=array('arrayfields'=>$arrayfields, 'sql'=>$sql);
+$reshook=$hookmanager->executeHooks('printFieldListFooter',$parameters);    // Note that $action and $object may have been modified by hook
+print $hookmanager->resPrint;
 
-	print '</form>'."\n";
-	
-	
-	if ($massaction == 'builddoc' || $action == 'remove_file' || $show_files)
-	{
-	    // Show list of available documents
-	    $urlsource=$_SERVER['PHP_SELF'].'?sortfield='.$sortfield.'&sortorder='.$sortorder;
-	    $urlsource.=str_replace('&amp;','&',$param);
-	
-	    $filedir=$diroutputmassaction;
-	    $genallowed=$user->rights->facture->lire;
-	    $delallowed=$user->rights->facture->lire;
-	
-	    print $formfile->showdocuments('massfilesarea_mymodule','',$filedir,$urlsource,0,$delallowed,'',1,1,0,48,1,$param,$title,'');
-	}
-	else
-	{
-	    print '<br><a name="show_files"></a><a href="'.$_SERVER["PHP_SELF"].'?show_files=1'.$param.'#show_files">'.$langs->trans("ShowTempMassFilesArea").'</a>';
-	}
-	
+print '</table>'."\n";
+
+print '</form>'."\n";
+
+
+if ($massaction == 'builddoc' || $action == 'remove_file' || $show_files)
+{
+    // Show list of available documents
+    $urlsource=$_SERVER['PHP_SELF'].'?sortfield='.$sortfield.'&sortorder='.$sortorder;
+    $urlsource.=str_replace('&amp;','&',$param);
+
+    $filedir=$diroutputmassaction;
+    $genallowed=$user->rights->facture->lire;
+    $delallowed=$user->rights->facture->lire;
+
+    print $formfile->showdocuments('massfilesarea_mymodule','',$filedir,$urlsource,0,$delallowed,'',1,1,0,48,1,$param,$title,'');
 }
 else
 {
-    $error++;
-    dol_print_error($db);
+    print '<br><a name="show_files"></a><a href="'.$_SERVER["PHP_SELF"].'?show_files=1'.$param.'#show_files">'.$langs->trans("ShowTempMassFilesArea").'</a>';
 }
 
 
diff --git a/htdocs/commande/list.php b/htdocs/commande/list.php
index 455db14e3ed..14c2b88214e 100644
--- a/htdocs/commande/list.php
+++ b/htdocs/commande/list.php
@@ -161,41 +161,43 @@ $parameters=array('socid'=>$socid);
 $reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action);    // Note that $action and $object may have been modified by some hooks
 if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
 
-include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
-
-// Purge search criteria
-if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter.x") || GETPOST("button_removefilter")) // All test are required to be compatible with all browsers
-{
-    $search_categ='';
-    $search_user='';
-    $search_sale='';
-    $search_product_category='';
-    $search_ref='';
-    $search_ref_customer='';
-    $search_company='';
-    $search_town='';
-	$search_zip="";
-    $search_state="";
-	$search_type='';
-	$search_country='';
-	$search_type_thirdparty='';
-    $search_total_ht='';
-    $search_total_vat='';
-    $search_total_ttc='';
-    $orderyear='';
-    $ordermonth='';
-	$orderday='';
-	$deliveryday='';
-	$deliverymonth='';
-    $deliveryyear='';
-    $viewstatut='';
-    $billed='';
-    $toselect='';
-    $search_array_options=array();
-}
-
 if (empty($reshook))
 {
+    // Selection of new fields
+    include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
+    
+    // Purge search criteria
+    if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter.x") || GETPOST("button_removefilter")) // All tests are required to be compatible with all browsers
+    {
+        $search_categ='';
+        $search_user='';
+        $search_sale='';
+        $search_product_category='';
+        $search_ref='';
+        $search_ref_customer='';
+        $search_company='';
+        $search_town='';
+    	$search_zip="";
+        $search_state="";
+    	$search_type='';
+    	$search_country='';
+    	$search_type_thirdparty='';
+        $search_total_ht='';
+        $search_total_vat='';
+        $search_total_ttc='';
+        $orderyear='';
+        $ordermonth='';
+    	$orderday='';
+    	$deliveryday='';
+    	$deliverymonth='';
+        $deliveryyear='';
+        $viewstatut='';
+        $billed='';
+        $toselect='';
+        $search_array_options=array();
+    }
+
+    // Mass actions
     $objectclass='Commande';
     $objectlabel='Orders';
     $permtoread = $user->rights->commande->lire;
@@ -205,7 +207,7 @@ if (empty($reshook))
 }
 
 
-if($massaction == 'confirm_createbills') {
+if ($massaction == 'confirm_createbills') {
 	
 	$orders = GETPOST('toselect');
 	$createbills_onebythird = GETPOST('createbills_onebythird', 'int');
diff --git a/htdocs/contact/card.php b/htdocs/contact/card.php
index 23242559f1f..a2f97d9ad93 100644
--- a/htdocs/contact/card.php
+++ b/htdocs/contact/card.php
@@ -1254,9 +1254,9 @@ else
 
         	print load_fiche_titre($langs->trans("TasksHistoryForThisContact"),$out,'');
 
-        	print show_actions_todo($conf,$langs,$db,$objsoc,$object);
+        	//print show_actions_todo($conf,$langs,$db,$objsoc,$object);
 
-        	print show_actions_done($conf,$langs,$db,$objsoc,$object);
+        	print show_actions_done($conf,$langs,$db,$objsoc,$object,0,'','');
 		}
     }
 }
diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php
index b8c96884e96..bc8c3235242 100644
--- a/htdocs/contact/list.php
+++ b/htdocs/contact/list.php
@@ -165,39 +165,51 @@ if (($id > 0 || ! empty($ref)) && $action != 'add')
  * Actions
  */
 
+if (GETPOST('cancel')) { $action='list'; $massaction=''; }
+if (! GETPOST('confirmmassaction') && $massaction != 'presend' && $massaction != 'confirm_presend') { $massaction=''; }
+
 $parameters=array();
 $reshook=$hookmanager->executeHooks('doActions',$parameters, $object, $action);    // Note that $action and $object may have been modified by some hooks
 if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
 
-include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
-
 if (empty($reshook))
 {
-
+    // Selection of new fields
+    include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
+    
+    // Purge search criteria
+    if (GETPOST('button_removefilter_x') || GETPOST('button_removefilter.x') || GETPOST('button_removefilter'))	// All tests are required to be compatible with all browsers
+    {
+        $sall="";
+        $search_firstlast_only="";
+        $search_lastname="";
+        $search_firstname="";
+        $search_societe="";
+        $search_poste="";
+        $search_phone="";
+        $search_phone_perso="";
+        $search_phone_pro="";
+        $search_phone_mobile="";
+        $search_fax="";
+        $search_email="";
+        $search_skype="";
+        $search_priv="";
+        $search_status=-1;
+        $search_categ='';
+        $search_categ_thirdparty='';
+        $search_categ_supplier='';
+        $search_array_options=array();
+    }
+    
+    // Mass actions
+    $objectclass='Contact';
+    $objectlabel='Contact';
+    $permtoread = $user->rights->societe->lire;
+    $permtodelete = $user->rights->societe->delete;
+    $uploaddir = $conf->societe->dir_output;
+    include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';
 }
 
-if (GETPOST('button_removefilter_x') || GETPOST('button_removefilter.x') || GETPOST('button_removefilter'))	// All tests are required to be compatible with all browsers
-{
-    $sall="";
-    $search_firstlast_only="";
-    $search_lastname="";
-    $search_firstname="";
-    $search_societe="";
-    $search_poste="";
-    $search_phone="";
-    $search_phone_perso="";
-    $search_phone_pro="";
-    $search_phone_mobile="";
-    $search_fax="";
-    $search_email="";
-    $search_skype="";
-    $search_priv="";
-    $search_status=-1;
-    $search_categ='';
-    $search_categ_thirdparty='';
-    $search_categ_supplier='';
-    $search_array_options=array();
-}
 if ($search_priv < 0) $search_priv='';
 
 
@@ -210,7 +222,6 @@ $formother=new FormOther($db);
 $contactstatic=new Contact($db);
 
 $title = (! empty($conf->global->SOCIETE_ADDRESSES_MANAGEMENT) ? $langs->trans("Contacts") : $langs->trans("ContactsAddresses"));
-llxHeader('',$title,'EN:Module_Third_Parties|FR:Module_Tiers|ES:M&oacute;dulo_Empresas');
 
 $sql = "SELECT s.rowid as socid, s.nom as name,";
 $sql.= " p.rowid as cidp, p.lastname as lastname, p.statut, p.firstname, p.zip, p.town, p.poste, p.email, p.skype,";
@@ -343,7 +354,6 @@ foreach ($search_array_options as $key => $val)
 $parameters=array();
 $reshook=$hookmanager->executeHooks('printFieldListWhere',$parameters);    // Note that $action and $object may have been modified by hook
 $sql.=$hookmanager->resPrint;
-
 // Add order
 if ($view == "recent")
 {
@@ -367,219 +377,371 @@ $sql.= $db->plimit($limit+1, $offset);
 //print $sql;
 dol_syslog("contact/list.php", LOG_DEBUG);
 $result = $db->query($sql);
-if ($result)
-{
-	$num = $db->num_rows($result);
-    $i = 0;
-
-    $param='';
-    if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage;
-    if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit;
-    $param.='&begin='.urlencode($begin).'&view='.urlencode($view).'&userid='.urlencode($userid).'&contactname='.urlencode($sall);
-    $param.='&type='.urlencode($type).'&view='.urlencode($view);
-    if (!empty($search_categ)) $param.='&search_categ='.urlencode($search_categ);
-    if (!empty($search_categ_thirdparty)) $param.='&search_categ_thirdparty='.urlencode($search_categ_thirdparty);
-    if (!empty($search_categ_supplier)) $param.='&search_categ_supplier='.urlencode($search_categ_supplier);
-    if ($sall != '') $param.='&amp;sall='.urlencode($sall);
-    if ($search_lastname != '') $param.='&amp;search_lastname='.urlencode($search_lastname);
-    if ($search_firstname != '') $param.='&amp;search_firstname='.urlencode($search_firstname);
-    if ($search_societe != '') $param.='&amp;search_societe='.urlencode($search_societe);
-    if ($search_zip != '') $param.='&amp;search_zip='.urlencode($search_zip);
-    if ($search_town != '') $param.='&amp;search_town='.urlencode($search_town);
-    if ($search_job != '') $param.='&amp;search_job='.urlencode($search_job);
-    if ($search_phone_pro != '') $param.='&amp;search_phone_pro='.urlencode($search_phone_pro);
-    if ($search_phone_perso != '') $param.='&amp;search_phone_perso='.urlencode($search_phone_perso);
-    if ($search_phone_mobile != '') $param.='&amp;search_phone_mobile='.urlencode($search_phone_mobile);
-    if ($search_fax != '') $param.='&amp;search_fax='.urlencode($search_fax);
-    if ($search_email != '') $param.='&amp;search_email='.urlencode($search_email);
-    if ($search_status != '') $param.='&amp;search_status='.urlencode($search_status);
-    if ($search_priv == '0' || $search_priv == '1') $param.="&search_priv=".urlencode($search_priv);
-    if ($optioncss != '') $param.='&optioncss='.$optioncss;
-    // Add $param from extra fields
-    foreach ($search_array_options as $key => $val)
-    {
-        $crit=$val;
-        $tmpkey=preg_replace('/search_options_/','',$key);
-        if ($val != '') $param.='&search_options_'.$tmpkey.'='.urlencode($val);
-    } 	
-    
-    print '<form method="post" action="'.$_SERVER["PHP_SELF"].'">';
-    if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
-    print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
-	print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
-    print '<input type="hidden" name="view" value="'.dol_escape_htmltag($view).'">';
-    print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
-    print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
+if (! $result)
+{
+    dol_print_error($db);
+    exit;
+}
 
-    print_barre_liste($titre, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords, 'title_companies.png', 0, '', '', $limit);
+$num = $db->num_rows($result);
 
-    if ($sall)
-    {
-        foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val);
-        print $langs->trans("FilterOnInto", $sall) . join(', ',$fieldstosearchall);
-    }
-	if ($search_firstlast_only)
+if ($num == 1 && ! empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE))
+{
+    $obj = $db->fetch_object($resql);
+    $id = $obj->cidp;
+    header("Location: ".DOL_URL_ROOT.'/contact/card.php?id='.$id);
+    exit;
+}
+
+llxHeader('',$title,'EN:Module_Third_Parties|FR:Module_Tiers|ES:M&oacute;dulo_Empresas');
+
+$param='';
+if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage;
+if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit;
+$param.='&begin='.urlencode($begin).'&view='.urlencode($view).'&userid='.urlencode($userid).'&contactname='.urlencode($sall);
+$param.='&type='.urlencode($type).'&view='.urlencode($view);
+if (!empty($search_categ)) $param.='&search_categ='.urlencode($search_categ);
+if (!empty($search_categ_thirdparty)) $param.='&search_categ_thirdparty='.urlencode($search_categ_thirdparty);
+if (!empty($search_categ_supplier)) $param.='&search_categ_supplier='.urlencode($search_categ_supplier);
+if ($sall != '') $param.='&amp;sall='.urlencode($sall);
+if ($search_lastname != '') $param.='&amp;search_lastname='.urlencode($search_lastname);
+if ($search_firstname != '') $param.='&amp;search_firstname='.urlencode($search_firstname);
+if ($search_societe != '') $param.='&amp;search_societe='.urlencode($search_societe);
+if ($search_zip != '') $param.='&amp;search_zip='.urlencode($search_zip);
+if ($search_town != '') $param.='&amp;search_town='.urlencode($search_town);
+if ($search_job != '') $param.='&amp;search_job='.urlencode($search_job);
+if ($search_phone_pro != '') $param.='&amp;search_phone_pro='.urlencode($search_phone_pro);
+if ($search_phone_perso != '') $param.='&amp;search_phone_perso='.urlencode($search_phone_perso);
+if ($search_phone_mobile != '') $param.='&amp;search_phone_mobile='.urlencode($search_phone_mobile);
+if ($search_fax != '') $param.='&amp;search_fax='.urlencode($search_fax);
+if ($search_email != '') $param.='&amp;search_email='.urlencode($search_email);
+if ($search_status != '') $param.='&amp;search_status='.urlencode($search_status);
+if ($search_priv == '0' || $search_priv == '1') $param.="&search_priv=".urlencode($search_priv);
+if ($optioncss != '') $param.='&optioncss='.$optioncss;
+// Add $param from extra fields
+foreach ($search_array_options as $key => $val)
+{
+    $crit=$val;
+    $tmpkey=preg_replace('/search_options_/','',$key);
+    if ($val != '') $param.='&search_options_'.$tmpkey.'='.urlencode($val);
+} 	
+
+print '<form method="post" action="'.$_SERVER["PHP_SELF"].'">';
+if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
+print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
+print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
+print '<input type="hidden" name="view" value="'.dol_escape_htmltag($view).'">';
+print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
+print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
+
+print_barre_liste($titre, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords, 'title_companies.png', 0, '', '', $limit);
+
+if ($sall)
+{
+    foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val);
+    print $langs->trans("FilterOnInto", $sall) . join(', ',$fieldstosearchall);
+}
+if ($search_firstlast_only)
+{
+    print $langs->trans("FilterOnInto", $search_firstlast_only) . $langs->trans("Lastname").", ".$langs->trans("Firstname");
+}
+
+if (! empty($conf->categorie->enabled))
+{
+	require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php';
+    $moreforfilter.='<div class="divsearchfield">';
+	$moreforfilter.=$langs->trans('Categories'). ': ';
+	$moreforfilter.=$formother->select_categories(Categorie::TYPE_CONTACT,$search_categ,'search_categ',1);
+	$moreforfilter.='</div>';
+	if (empty($type) || $type == 'c' || $type == 'p')
 	{
-        print $langs->trans("FilterOnInto", $search_firstlast_only) . $langs->trans("Lastname").", ".$langs->trans("Firstname");
-	}
-    
-    if (! empty($conf->categorie->enabled))
-    {
-		require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php';
         $moreforfilter.='<div class="divsearchfield">';
-		$moreforfilter.=$langs->trans('Categories'). ': ';
-    	$moreforfilter.=$formother->select_categories(Categorie::TYPE_CONTACT,$search_categ,'search_categ',1);
+        if ($type == 'c') $moreforfilter.=$langs->trans('CustomersCategoriesShort'). ': ';
+    	else if ($type == 'p') $moreforfilter.=$langs->trans('ProspectsCategoriesShort'). ': ';
+    	else $moreforfilter.=$langs->trans('CustomersProspectsCategoriesShort'). ': ';
+    	$moreforfilter.=$formother->select_categories(Categorie::TYPE_CUSTOMER,$search_categ_thirdparty,'search_categ_thirdparty',1);
     	$moreforfilter.='</div>';
-    	if (empty($type) || $type == 'c' || $type == 'p')
-    	{
-	        $moreforfilter.='<div class="divsearchfield">';
-	        if ($type == 'c') $moreforfilter.=$langs->trans('CustomersCategoriesShort'). ': ';
-	    	else if ($type == 'p') $moreforfilter.=$langs->trans('ProspectsCategoriesShort'). ': ';
-	    	else $moreforfilter.=$langs->trans('CustomersProspectsCategoriesShort'). ': ';
-	    	$moreforfilter.=$formother->select_categories(Categorie::TYPE_CUSTOMER,$search_categ_thirdparty,'search_categ_thirdparty',1);
-	    	$moreforfilter.='</div>';
-    	}
-    	if (empty($type) || $type == 'f')
-    	{
-	    	$moreforfilter.='<div class="divsearchfield">';
-			$moreforfilter.=$langs->trans('SuppliersCategoriesShort'). ': ';
-	    	$moreforfilter.=$formother->select_categories(Categorie::TYPE_SUPPLIER,$search_categ_supplier,'search_categ_supplier',1);
-	    	$moreforfilter.='</div>';
-    	}
-    }
-    if ($moreforfilter)
-    {
-    	print '<div class="liste_titre liste_titre_bydiv centpercent">';
-    	print $moreforfilter;
-    	$parameters=array('type'=>$type);
-    	$reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters);    // Note that $action and $object may have been modified by hook
-	    print $hookmanager->resPrint;
-    	print '</div>';
-    }
-
-    $varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage;
-    $selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage);	// This also change content of $arrayfields
-    
-    print '<table class="liste '.($moreforfilter?"listwithfilterbefore":"").'">';
-
-    // Ligne des titres
-    print '<tr class="liste_titre">';
-    if (! empty($arrayfields['p.lastname']['checked']))            print_liste_field_titre($langs->trans("Lastname"),$_SERVER["PHP_SELF"],"p.lastname", $begin, $param, '', $sortfield,$sortorder);
-    if (! empty($arrayfields['p.firstname']['checked']))            print_liste_field_titre($langs->trans("Firstname"),$_SERVER["PHP_SELF"],"p.firstname", $begin, $param, '', $sortfield,$sortorder);
-    if (! empty($arrayfields['p.zip']['checked']))            print_liste_field_titre($langs->trans("Zip"),$_SERVER["PHP_SELF"],"p.zip", $begin, $param, '', $sortfield,$sortorder);
-    if (! empty($arrayfields['p.town']['checked']))            print_liste_field_titre($langs->trans("Town"),$_SERVER["PHP_SELF"],"p.town", $begin, $param, '', $sortfield,$sortorder);
-    if (! empty($arrayfields['p.poste']['checked']))            print_liste_field_titre($langs->trans("PostOrFunction"),$_SERVER["PHP_SELF"],"p.poste", $begin, $param, '', $sortfield,$sortorder);
-    if (! empty($arrayfields['p.phone']['checked']))            print_liste_field_titre($langs->trans("Phone"),$_SERVER["PHP_SELF"],"p.phone", $begin, $param, '', $sortfield,$sortorder);
-    if (! empty($arrayfields['p.phone_perso']['checked']))            print_liste_field_titre($langs->trans("PhonePerso"),$_SERVER["PHP_SELF"],"p.phone_perso", $begin, $param, '', $sortfield,$sortorder);
-    if (! empty($arrayfields['p.phone_mobile']['checked']))            print_liste_field_titre($langs->trans("PhoneMobile"),$_SERVER["PHP_SELF"],"p.phone_mobile", $begin, $param, '', $sortfield,$sortorder);
-    if (! empty($arrayfields['p.fax']['checked']))            print_liste_field_titre($langs->trans("Fax"),$_SERVER["PHP_SELF"],"p.fax", $begin, $param, '', $sortfield,$sortorder);
-    if (! empty($arrayfields['p.email']['checked']))            print_liste_field_titre($langs->trans("EMail"),$_SERVER["PHP_SELF"],"p.email", $begin, $param, '', $sortfield,$sortorder);
-    if (! empty($arrayfields['p.skype']['checked']))            print_liste_field_titre($langs->trans("Skype"),$_SERVER["PHP_SELF"],"p.skype", $begin, $param, '', $sortfield,$sortorder);
-    if (! empty($arrayfields['p.thirdparty']['checked']))            print_liste_field_titre($langs->trans("ThirdParty"),$_SERVER["PHP_SELF"],"s.nom", $begin, $param, '', $sortfield,$sortorder);
-    if (! empty($arrayfields['p.priv']['checked']))            print_liste_field_titre($langs->trans("ContactVisibility"),$_SERVER["PHP_SELF"],"p.priv", $begin, $param, 'align="center"', $sortfield,$sortorder);
-	// Extra fields
-	if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
+	}
+	if (empty($type) || $type == 'f')
 	{
-	   foreach($extrafields->attribute_label as $key => $val) 
-	   {
-           if (! empty($arrayfields["ef.".$key]['checked'])) 
-           {
-				$align=$extrafields->getAlignFlag($key);
-				print_liste_field_titre($extralabels[$key],$_SERVER["PHP_SELF"],"ef.".$key,"",$param,($align?'align="'.$align.'"':''),$sortfield,$sortorder);
-           }
-	   }
+    	$moreforfilter.='<div class="divsearchfield">';
+		$moreforfilter.=$langs->trans('SuppliersCategoriesShort'). ': ';
+    	$moreforfilter.=$formother->select_categories(Categorie::TYPE_SUPPLIER,$search_categ_supplier,'search_categ_supplier',1);
+    	$moreforfilter.='</div>';
 	}
-	// Hook fields
-	$parameters=array('arrayfields'=>$arrayfields);
-    $reshook=$hookmanager->executeHooks('printFieldListTitle',$parameters);    // Note that $action and $object may have been modified by hook
+}
+if ($moreforfilter)
+{
+	print '<div class="liste_titre liste_titre_bydiv centpercent">';
+	print $moreforfilter;
+	$parameters=array('type'=>$type);
+	$reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters);    // Note that $action and $object may have been modified by hook
     print $hookmanager->resPrint;
-	if (! empty($arrayfields['p.datec']['checked']))  print_liste_field_titre($langs->trans("DateCreationShort"),$_SERVER["PHP_SELF"],"p.datec","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
-	if (! empty($arrayfields['p.tms']['checked']))    print_liste_field_titre($langs->trans("DateModificationShort"),$_SERVER["PHP_SELF"],"p.tms","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
-	if (! empty($arrayfields['p.statut']['checked'])) print_liste_field_titre($langs->trans("Status"),$_SERVER["PHP_SELF"],"p.statut","",$param,'align="center"',$sortfield,$sortorder);
-	print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"],"",'','','align="right"',$sortfield,$sortorder,'maxwidthsearch ');
-    print "</tr>\n";
+	print '</div>';
+}
+
+$varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage;
+$selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage);	// This also change content of $arrayfields
+
+print '<table class="liste '.($moreforfilter?"listwithfilterbefore":"").'">';
+
+// Ligne des titres
+print '<tr class="liste_titre">';
+if (! empty($arrayfields['p.lastname']['checked']))            print_liste_field_titre($langs->trans("Lastname"),$_SERVER["PHP_SELF"],"p.lastname", $begin, $param, '', $sortfield,$sortorder);
+if (! empty($arrayfields['p.firstname']['checked']))            print_liste_field_titre($langs->trans("Firstname"),$_SERVER["PHP_SELF"],"p.firstname", $begin, $param, '', $sortfield,$sortorder);
+if (! empty($arrayfields['p.zip']['checked']))            print_liste_field_titre($langs->trans("Zip"),$_SERVER["PHP_SELF"],"p.zip", $begin, $param, '', $sortfield,$sortorder);
+if (! empty($arrayfields['p.town']['checked']))            print_liste_field_titre($langs->trans("Town"),$_SERVER["PHP_SELF"],"p.town", $begin, $param, '', $sortfield,$sortorder);
+if (! empty($arrayfields['p.poste']['checked']))            print_liste_field_titre($langs->trans("PostOrFunction"),$_SERVER["PHP_SELF"],"p.poste", $begin, $param, '', $sortfield,$sortorder);
+if (! empty($arrayfields['p.phone']['checked']))            print_liste_field_titre($langs->trans("Phone"),$_SERVER["PHP_SELF"],"p.phone", $begin, $param, '', $sortfield,$sortorder);
+if (! empty($arrayfields['p.phone_perso']['checked']))            print_liste_field_titre($langs->trans("PhonePerso"),$_SERVER["PHP_SELF"],"p.phone_perso", $begin, $param, '', $sortfield,$sortorder);
+if (! empty($arrayfields['p.phone_mobile']['checked']))            print_liste_field_titre($langs->trans("PhoneMobile"),$_SERVER["PHP_SELF"],"p.phone_mobile", $begin, $param, '', $sortfield,$sortorder);
+if (! empty($arrayfields['p.fax']['checked']))            print_liste_field_titre($langs->trans("Fax"),$_SERVER["PHP_SELF"],"p.fax", $begin, $param, '', $sortfield,$sortorder);
+if (! empty($arrayfields['p.email']['checked']))            print_liste_field_titre($langs->trans("EMail"),$_SERVER["PHP_SELF"],"p.email", $begin, $param, '', $sortfield,$sortorder);
+if (! empty($arrayfields['p.skype']['checked']))            print_liste_field_titre($langs->trans("Skype"),$_SERVER["PHP_SELF"],"p.skype", $begin, $param, '', $sortfield,$sortorder);
+if (! empty($arrayfields['p.thirdparty']['checked']))            print_liste_field_titre($langs->trans("ThirdParty"),$_SERVER["PHP_SELF"],"s.nom", $begin, $param, '', $sortfield,$sortorder);
+if (! empty($arrayfields['p.priv']['checked']))            print_liste_field_titre($langs->trans("ContactVisibility"),$_SERVER["PHP_SELF"],"p.priv", $begin, $param, 'align="center"', $sortfield,$sortorder);
+// Extra fields
+if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
+{
+   foreach($extrafields->attribute_label as $key => $val) 
+   {
+       if (! empty($arrayfields["ef.".$key]['checked'])) 
+       {
+			$align=$extrafields->getAlignFlag($key);
+			print_liste_field_titre($extralabels[$key],$_SERVER["PHP_SELF"],"ef.".$key,"",$param,($align?'align="'.$align.'"':''),$sortfield,$sortorder);
+       }
+   }
+}
+// Hook fields
+$parameters=array('arrayfields'=>$arrayfields);
+$reshook=$hookmanager->executeHooks('printFieldListTitle',$parameters);    // Note that $action and $object may have been modified by hook
+print $hookmanager->resPrint;
+if (! empty($arrayfields['p.datec']['checked']))  print_liste_field_titre($langs->trans("DateCreationShort"),$_SERVER["PHP_SELF"],"p.datec","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
+if (! empty($arrayfields['p.tms']['checked']))    print_liste_field_titre($langs->trans("DateModificationShort"),$_SERVER["PHP_SELF"],"p.tms","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
+if (! empty($arrayfields['p.statut']['checked'])) print_liste_field_titre($langs->trans("Status"),$_SERVER["PHP_SELF"],"p.statut","",$param,'align="center"',$sortfield,$sortorder);
+print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"],"",'','','align="right"',$sortfield,$sortorder,'maxwidthsearch ');
+print "</tr>\n";
+
+// Lines for filter fields
+print '<tr class="liste_titre">';
+if (! empty($arrayfields['p.lastname']['checked']))
+{
+    print '<td class="liste_titre">';
+    print '<input class="flat" type="text" name="search_lastname" size="6" value="'.dol_escape_htmltag($search_lastname).'">';
+    print '</td>';
+}
+if (! empty($arrayfields['p.firstname']['checked']))
+{
+    print '<td class="liste_titre">';
+    print '<input class="flat" type="text" name="search_firstname" size="6" value="'.dol_escape_htmltag($search_firstname).'">';
+    print '</td>';
+}
+if (! empty($arrayfields['p.poste']['checked']))
+{
+    print '<td class="liste_titre">';
+    print '<input class="flat" type="text" name="search_poste" size="5" value="'.dol_escape_htmltag($search_poste).'">';
+    print '</td>';
+}
+if (! empty($arrayfields['p.zip']['checked']))
+{
+    print '<td class="liste_titre">';
+    print '<input class="flat" type="text" name="search_zip" size="3" value="'.dol_escape_htmltag($search_zip).'">';
+    print '</td>';
+}
+if (! empty($arrayfields['p.town']['checked']))
+{
+    print '<td class="liste_titre">';
+    print '<input class="flat" type="text" name="search_town" size="5" value="'.dol_escape_htmltag($search_town).'">';
+    print '</td>';
+}
+if (! empty($arrayfields['p.phone']['checked'])) 
+{
+    print '<td class="liste_titre">';
+    print '<input class="flat" type="text" name="search_phone_pro" size="6" value="'.dol_escape_htmltag($search_phone_pro).'">';
+    print '</td>';
+}
+if (! empty($arrayfields['p.phone_perso']['checked'])) 
+{
+    print '<td class="liste_titre">';
+    print '<input class="flat" type="text" name="search_phone_perso" size="6" value="'.dol_escape_htmltag($search_phone_perso).'">';
+    print '</td>';
+}
+if (! empty($arrayfields['p.phone_mobile']['checked']))
+{
+    print '<td class="liste_titre">';
+    print '<input class="flat" type="text" name="search_phone_mobile" size="6" value="'.dol_escape_htmltag($search_phone_mobile).'">';
+    print '</td>';
+}
+if (! empty($arrayfields['p.fax']['checked']))
+{
+    print '<td class="liste_titre">';
+    print '<input class="flat" type="text" name="search_fax" size="6" value="'.dol_escape_htmltag($search_fax).'">';
+    print '</td>';
+}
+if (! empty($arrayfields['p.email']['checked']))
+{
+    print '<td class="liste_titre">';
+    print '<input class="flat" type="text" name="search_email" size="6" value="'.dol_escape_htmltag($search_email).'">';
+    print '</td>';
+}
+if (! empty($arrayfields['p.skype']['checked']))
+{
+    print '<td class="liste_titre">';
+    print '<input class="flat" type="text" name="search_skype" size="6" value="'.dol_escape_htmltag($search_skype).'">';
+    print '</td>';
+}
+if (! empty($arrayfields['p.thirdparty']['checked']))
+{
+    print '<td class="liste_titre">';
+    print '<input class="flat" type="text" name="search_societe" size="8" value="'.dol_escape_htmltag($search_societe).'">';
+    print '</td>';
+}
+if (! empty($arrayfields['p.priv']['checked']))
+{
+    print '<td class="liste_titre" align="center">';
+   $selectarray=array('0'=>$langs->trans("ContactPublic"),'1'=>$langs->trans("ContactPrivate"));
+   print $form->selectarray('search_priv',$selectarray,$search_priv,1);
+   print '</td>';
+}
+// Extra fields
+if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
+{
+   foreach($extrafields->attribute_label as $key => $val) 
+   {
+		if (! empty($arrayfields["ef.".$key]['checked'])) 
+		{
+			print '<td class="liste_titre">';
+			print '</td>';
+		}
+   }
+}
+// Fields from hook
+$parameters=array('arrayfields'=>$arrayfields);
+$reshook=$hookmanager->executeHooks('printFieldListOption',$parameters);    // Note that $action and $object may have been modified by hook
+print $hookmanager->resPrint;
+// Date creation
+if (! empty($arrayfields['p.datec']['checked']))
+{
+    print '<td class="liste_titre">';
+    print '</td>';
+}
+// Date modification
+if (! empty($arrayfields['p.tms']['checked']))
+{
+    print '<td class="liste_titre">';
+    print '</td>';
+}
+if (! empty($arrayfields['p.statut']['checked']))
+{
+    print '<td class="liste_titre" align="center">';
+    print $form->selectarray('search_status', array('-1'=>'', '0'=>$langs->trans('ActivityCeased'),'1'=>$langs->trans('InActivity')),$search_status);
+    print '</td>';
+}
+print '<td class="liste_titre" align="right">';
+print '<input type="image" name="button_search" class="liste_titre" src="'.img_picto($langs->trans("Search"),'search.png','','',1).'" value="'.dol_escape_htmltag($langs->trans("Search")).'" title="'.dol_escape_htmltag($langs->trans("Search")).'">';
+print '<input type="image" name="button_removefilter" class="liste_titre" src="'.img_picto($langs->trans("RemoveFilter"),'searchclear.png','','',1).'" value="'.dol_escape_htmltag($langs->trans("RemoveFilter")).'" title="'.dol_escape_htmltag($langs->trans("RemoveFilter")).'">';
+print '</td>';
+
+print '</tr>';
 
-    // Lines for filter fields
-    print '<tr class="liste_titre">';
+$var=True;
+$i = 0;
+while ($i < min($num,$limit))
+{
+    $obj = $db->fetch_object($result);
+
+	$var=!$var;
+    print "<tr ".$bc[$var].">";
+
+	$contactstatic->lastname=$obj->lastname;
+	$contactstatic->firstname='';
+	$contactstatic->id=$obj->cidp;
+	$contactstatic->statut=$obj->statut;
+	$contactstatic->poste=$obj->poste;
+	$contactstatic->phone_pro=$obj->phone_pro;
+	$contactstatic->phone_perso=$obj->phone_perso;
+	$contactstatic->phone_mobile=$obj->phone_mobile;
+	$contactstatic->zip=$obj->zip;
+	$contactstatic->town=$obj->town;
+    
+    // Name
     if (! empty($arrayfields['p.lastname']['checked']))
     {
-        print '<td class="liste_titre">';
-        print '<input class="flat" type="text" name="search_lastname" size="6" value="'.dol_escape_htmltag($search_lastname).'">';
-        print '</td>';
+        print '<td valign="middle">';
+	  print $contactstatic->getNomUrl(1,'',0);
+	  print '</td>';
     }
+	// Firstname
     if (! empty($arrayfields['p.firstname']['checked']))
     {
-        print '<td class="liste_titre">';
-        print '<input class="flat" type="text" name="search_firstname" size="6" value="'.dol_escape_htmltag($search_firstname).'">';
-        print '</td>';
-    }
-    if (! empty($arrayfields['p.poste']['checked']))
-    {
-        print '<td class="liste_titre">';
-        print '<input class="flat" type="text" name="search_poste" size="5" value="'.dol_escape_htmltag($search_poste).'">';
-        print '</td>';
+        print '<td>'.$obj->firstname.'</td>';
     }
+	// Zip
     if (! empty($arrayfields['p.zip']['checked']))
     {
-        print '<td class="liste_titre">';
-        print '<input class="flat" type="text" name="search_zip" size="3" value="'.dol_escape_htmltag($search_zip).'">';
-        print '</td>';
+        print '<td>'.$obj->zip.'</td>';
     }
+	// Town
     if (! empty($arrayfields['p.town']['checked']))
     {
-        print '<td class="liste_titre">';
-        print '<input class="flat" type="text" name="search_town" size="5" value="'.dol_escape_htmltag($search_town).'">';
-        print '</td>';
+        print '<td>'.$obj->town.'</td>';
     }
-    if (! empty($arrayfields['p.phone']['checked'])) 
+    // Function
+    if (! empty($arrayfields['p.poste']['checked']))
     {
-        print '<td class="liste_titre">';
-        print '<input class="flat" type="text" name="search_phone_pro" size="6" value="'.dol_escape_htmltag($search_phone_pro).'">';
-        print '</td>';
+        print '<td>'.dol_trunc($obj->poste,20).'</td>';
     }
-    if (! empty($arrayfields['p.phone_perso']['checked'])) 
+    // Phone
+    if (! empty($arrayfields['p.phone']['checked']))
     {
-        print '<td class="liste_titre">';
-        print '<input class="flat" type="text" name="search_phone_perso" size="6" value="'.dol_escape_htmltag($search_phone_perso).'">';
-        print '</td>';
+        print '<td>'.dol_print_phone($obj->phone_pro,$obj->country_code,$obj->cidp,$obj->socid,'AC_TEL').'</td>';
     }
+    // Phone perso
+    if (! empty($arrayfields['p.phone_perso']['checked']))
+    {
+        print '<td>'.dol_print_phone($obj->phone_perso,$obj->country_code,$obj->cidp,$obj->socid,'AC_TEL').'</td>';
+    }
+    // Phone mobile
     if (! empty($arrayfields['p.phone_mobile']['checked']))
     {
-        print '<td class="liste_titre">';
-        print '<input class="flat" type="text" name="search_phone_mobile" size="6" value="'.dol_escape_htmltag($search_phone_mobile).'">';
-        print '</td>';
+        print '<td>'.dol_print_phone($obj->phone_mobile,$obj->country_code,$obj->cidp,$obj->socid,'AC_TEL').'</td>';
     }
+    // Fax
     if (! empty($arrayfields['p.fax']['checked']))
     {
-        print '<td class="liste_titre">';
-        print '<input class="flat" type="text" name="search_fax" size="6" value="'.dol_escape_htmltag($search_fax).'">';
-        print '</td>';
+        print '<td>'.dol_print_phone($obj->fax,$obj->country_code,$obj->cidp,$obj->socid,'AC_TEL').'</td>';
     }
+    // EMail
     if (! empty($arrayfields['p.email']['checked']))
     {
-        print '<td class="liste_titre">';
-        print '<input class="flat" type="text" name="search_email" size="6" value="'.dol_escape_htmltag($search_email).'">';
-        print '</td>';
+        print '<td>'.dol_print_email($obj->email,$obj->cidp,$obj->socid,'AC_EMAIL',18).'</td>';
     }
+    // Skype
     if (! empty($arrayfields['p.skype']['checked']))
     {
-        print '<td class="liste_titre">';
-        print '<input class="flat" type="text" name="search_skype" size="6" value="'.dol_escape_htmltag($search_skype).'">';
-        print '</td>';
+        if (! empty($conf->skype->enabled)) { print '<td>'.dol_print_skype($obj->skype,$obj->cidp,$obj->socid,'AC_SKYPE',18).'</td>'; }
     }
+    // Company
     if (! empty($arrayfields['p.thirdparty']['checked']))
     {
-        print '<td class="liste_titre">';
-        print '<input class="flat" type="text" name="search_societe" size="8" value="'.dol_escape_htmltag($search_societe).'">';
+		print '<td>';
+        if ($obj->socid)
+        {
+		$objsoc = new Societe($db);
+		$objsoc->fetch($obj->socid);
+		print $objsoc->getNomUrl(1);
+        }
+        else
+            print '&nbsp;';
         print '</td>';
     }
+
+    // Private/Public
     if (! empty($arrayfields['p.priv']['checked']))
     {
-        print '<td class="liste_titre" align="center">';
-	   $selectarray=array('0'=>$langs->trans("ContactPublic"),'1'=>$langs->trans("ContactPrivate"));
-	   print $form->selectarray('search_priv',$selectarray,$search_priv,1);
-	   print '</td>';
+	    print '<td align="center">'.$contactstatic->LibPubPriv($obj->priv).'</td>';
     }
+
 	// Extra fields
 	if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
 	{
@@ -587,203 +749,58 @@ if ($result)
 	   {
 			if (! empty($arrayfields["ef.".$key]['checked'])) 
 			{
-				print '<td class="liste_titre">';
+				print '<td';
+				$align=$extrafields->getAlignFlag($key);
+				if ($align) print ' align="'.$align.'"';
+				print '>';
+				$tmpkey='options_'.$key;
+				print $extrafields->showOutputField($key, $obj->$tmpkey, '', 1);
 				print '</td>';
 			}
 	   }
 	}
     // Fields from hook
-	$parameters=array('arrayfields'=>$arrayfields);
-    $reshook=$hookmanager->executeHooks('printFieldListOption',$parameters);    // Note that $action and $object may have been modified by hook
+    $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj);
+	$reshook=$hookmanager->executeHooks('printFieldListValue',$parameters);    // Note that $action and $object may have been modified by hook
     print $hookmanager->resPrint;
     // Date creation
     if (! empty($arrayfields['p.datec']['checked']))
     {
-        print '<td class="liste_titre">';
+        print '<td align="center">';
+        print dol_print_date($db->jdate($obj->date_creation), 'dayhour');
         print '</td>';
     }
     // Date modification
     if (! empty($arrayfields['p.tms']['checked']))
     {
-        print '<td class="liste_titre">';
+        print '<td align="center">';
+        print dol_print_date($db->jdate($obj->date_update), 'dayhour');
         print '</td>';
     }
+    // Status
     if (! empty($arrayfields['p.statut']['checked']))
     {
-        print '<td class="liste_titre" align="center">';
-        print $form->selectarray('search_status', array('-1'=>'', '0'=>$langs->trans('ActivityCeased'),'1'=>$langs->trans('InActivity')),$search_status);
-        print '</td>';
+        print '<td align="center">'.$contactstatic->getLibStatut(3).'</td>';
     }
-    print '<td class="liste_titre" align="right">';
-    print '<input type="image" name="button_search" class="liste_titre" src="'.img_picto($langs->trans("Search"),'search.png','','',1).'" value="'.dol_escape_htmltag($langs->trans("Search")).'" title="'.dol_escape_htmltag($langs->trans("Search")).'">';
-    print '<input type="image" name="button_removefilter" class="liste_titre" src="'.img_picto($langs->trans("RemoveFilter"),'searchclear.png','','',1).'" value="'.dol_escape_htmltag($langs->trans("RemoveFilter")).'" title="'.dol_escape_htmltag($langs->trans("RemoveFilter")).'">';
-    print '</td>';
-    
-    print '</tr>';
-
-    $var=True;
-    while ($i < min($num,$limit))
-    {
-        $obj = $db->fetch_object($result);
-
-		$var=!$var;
-        print "<tr ".$bc[$var].">";
-
-		$contactstatic->lastname=$obj->lastname;
-		$contactstatic->firstname='';
-		$contactstatic->id=$obj->cidp;
-		$contactstatic->statut=$obj->statut;
-		$contactstatic->poste=$obj->poste;
-		$contactstatic->phone_pro=$obj->phone_pro;
-		$contactstatic->phone_perso=$obj->phone_perso;
-		$contactstatic->phone_mobile=$obj->phone_mobile;
-		$contactstatic->zip=$obj->zip;
-		$contactstatic->town=$obj->town;
-        
-        // Name
-        if (! empty($arrayfields['p.lastname']['checked']))
-        {
-            print '<td valign="middle">';
-		  print $contactstatic->getNomUrl(1,'',0);
-		  print '</td>';
-        }
-		// Firstname
-        if (! empty($arrayfields['p.firstname']['checked']))
-        {
-            print '<td>'.$obj->firstname.'</td>';
-        }
-    	// Zip
-        if (! empty($arrayfields['p.zip']['checked']))
-        {
-            print '<td>'.$obj->zip.'</td>';
-        }
-    	// Town
-        if (! empty($arrayfields['p.town']['checked']))
-        {
-            print '<td>'.$obj->town.'</td>';
-        }
-        // Function
-        if (! empty($arrayfields['p.poste']['checked']))
-        {
-            print '<td>'.dol_trunc($obj->poste,20).'</td>';
-        }
-        // Phone
-        if (! empty($arrayfields['p.phone']['checked']))
-        {
-            print '<td>'.dol_print_phone($obj->phone_pro,$obj->country_code,$obj->cidp,$obj->socid,'AC_TEL').'</td>';
-        }
-        // Phone perso
-        if (! empty($arrayfields['p.phone_perso']['checked']))
-        {
-            print '<td>'.dol_print_phone($obj->phone_perso,$obj->country_code,$obj->cidp,$obj->socid,'AC_TEL').'</td>';
-        }
-        // Phone mobile
-        if (! empty($arrayfields['p.phone_mobile']['checked']))
-        {
-            print '<td>'.dol_print_phone($obj->phone_mobile,$obj->country_code,$obj->cidp,$obj->socid,'AC_TEL').'</td>';
-        }
-        // Fax
-        if (! empty($arrayfields['p.fax']['checked']))
-        {
-            print '<td>'.dol_print_phone($obj->fax,$obj->country_code,$obj->cidp,$obj->socid,'AC_TEL').'</td>';
-        }
-        // EMail
-        if (! empty($arrayfields['p.email']['checked']))
-        {
-            print '<td>'.dol_print_email($obj->email,$obj->cidp,$obj->socid,'AC_EMAIL',18).'</td>';
-        }
-        // Skype
-        if (! empty($arrayfields['p.skype']['checked']))
-        {
-            if (! empty($conf->skype->enabled)) { print '<td>'.dol_print_skype($obj->skype,$obj->cidp,$obj->socid,'AC_SKYPE',18).'</td>'; }
-        }
-        // Company
-        if (! empty($arrayfields['p.thirdparty']['checked']))
-        {
-    		print '<td>';
-            if ($obj->socid)
-            {
-			$objsoc = new Societe($db);
-			$objsoc->fetch($obj->socid);
-			print $objsoc->getNomUrl(1);
-            }
-            else
-                print '&nbsp;';
-            print '</td>';
-        }
+    // Action column - Links Add action and Export vcard
+    print '<td align="right">';
+    print '<a href="'.DOL_URL_ROOT.'/comm/action/card.php?action=create&amp;backtopage=1&amp;contactid='.$obj->cidp.'&amp;socid='.$obj->socid.'">'.img_object($langs->trans("AddAction"),"action").'</a>';
+    print ' &nbsp; ';
+    print '<a data-ajax="false" href="'.DOL_URL_ROOT.'/contact/vcard.php?id='.$obj->cidp.'">';
+    print img_picto($langs->trans("VCard"),'vcard.png').' ';
+    print '</a></td>';
 
-        // Private/Public
-        if (! empty($arrayfields['p.priv']['checked']))
-        {
-		    print '<td align="center">'.$contactstatic->LibPubPriv($obj->priv).'</td>';
-        }
+    print "</tr>\n";
+    $i++;
+}
 
-		// Extra fields
-		if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
-		{
-		   foreach($extrafields->attribute_label as $key => $val) 
-		   {
-				if (! empty($arrayfields["ef.".$key]['checked'])) 
-				{
-					print '<td';
-					$align=$extrafields->getAlignFlag($key);
-					if ($align) print ' align="'.$align.'"';
-					print '>';
-					$tmpkey='options_'.$key;
-					print $extrafields->showOutputField($key, $obj->$tmpkey, '', 1);
-					print '</td>';
-				}
-		   }
-		}
-        // Fields from hook
-	    $parameters=array('arrayfields'=>$arrayfields, 'obj'=>$obj);
-		$reshook=$hookmanager->executeHooks('printFieldListValue',$parameters);    // Note that $action and $object may have been modified by hook
-        print $hookmanager->resPrint;
-        // Date creation
-        if (! empty($arrayfields['p.datec']['checked']))
-        {
-            print '<td align="center">';
-            print dol_print_date($db->jdate($obj->date_creation), 'dayhour');
-            print '</td>';
-        }
-        // Date modification
-        if (! empty($arrayfields['p.tms']['checked']))
-        {
-            print '<td align="center">';
-            print dol_print_date($db->jdate($obj->date_update), 'dayhour');
-            print '</td>';
-        }
-	    // Status
-        if (! empty($arrayfields['p.statut']['checked']))
-        {
-            print '<td align="center">'.$contactstatic->getLibStatut(3).'</td>';
-        }
-        // Action column - Links Add action and Export vcard
-        print '<td align="right">';
-        print '<a href="'.DOL_URL_ROOT.'/comm/action/card.php?action=create&amp;backtopage=1&amp;contactid='.$obj->cidp.'&amp;socid='.$obj->socid.'">'.img_object($langs->trans("AddAction"),"action").'</a>';
-        print ' &nbsp; ';
-        print '<a data-ajax="false" href="'.DOL_URL_ROOT.'/contact/vcard.php?id='.$obj->cidp.'">';
-        print img_picto($langs->trans("VCard"),'vcard.png').' ';
-        print '</a></td>';
-
-        print "</tr>\n";
-        $i++;
-    }
+print "</table>";
 
-    print "</table>";
+if ($num > $limit || $page) print_barre_liste('', $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords, 'title_companies.png', 0, '', '', $limit, 1);
 
-    if ($num > $limit || $page) print_barre_liste('', $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords, 'title_companies.png', 0, '', '', $limit, 1);
-    
-    print '</form>';
-    
-    $db->free($result);
-}
-else
-{
-    dol_print_error($db);
-}
+print '</form>';
 
-print '<br>';
+$db->free($result);
 
 
 llxFooter();
diff --git a/htdocs/societe/list.php b/htdocs/societe/list.php
index 40ef1e6c896..96c527f3976 100644
--- a/htdocs/societe/list.php
+++ b/htdocs/societe/list.php
@@ -181,54 +181,58 @@ if (is_array($extrafields->attribute_label) && count($extrafields->attribute_lab
  * Actions
  */
 
+if (GETPOST('cancel')) { $action='list'; $massaction=''; }
+if (! GETPOST('confirmmassaction') && $massaction != 'presend' && $massaction != 'confirm_presend') { $massaction=''; }
+
 $parameters=array();
 $reshook=$hookmanager->executeHooks('doActions',$parameters);    // Note that $action and $object may have been modified by some hooks
 if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
 
-include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
-
 if (empty($reshook))
 {
-	if ($action == 'setstcomm')
-	{
-		$object = new Client($db);
-		$result=$object->fetch(GETPOST('stcommsocid'));
-		$object->stcomm_id=dol_getIdFromCode($db, GETPOST('stcomm','alpha'), 'c_stcomm');
-		$result=$object->update($object->id, $user);
-		if ($result < 0) setEventMessages($object->error,$object->errors,'errors');
+    // Selection of new fields
+    include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
 
-		$action='';
-	}
-}
+    // Do we click on purge search criteria ?
+    if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter.x") || GETPOST("button_removefilter")) // All tests are required to be compatible with all browsers
+    {
+        $search_nom='';
+        $search_categ=0;
+        $search_sale='';
+    	$search_barcode="";
+        $search_customer_code='';
+        $search_supplier_code='';
+        $search_account_customer_code='';
+        $search_account_supplier_code='';
+    	$search_town="";
+    	$search_zip="";
+    	$search_state="";
+    	$search_country='';
+    	$search_idprof1='';
+    	$search_idprof2='';
+    	$search_idprof3='';
+    	$search_idprof4='';
+    	$search_idprof5='';
+    	$search_idprof6='';
+    	$search_type='';
+    	$search_type_thirdparty='';
+    	$search_status='';
+    	$search_stcomm='';
+     	$search_level_from='';
+     	$search_level_to='';
+    	$search_array_options=array();
+    }
 
-// Do we click on purge search criteria ?
-if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter.x") || GETPOST("button_removefilter")) // Both test are required to be compatible with all browsers
-{
-    $search_nom='';
-    $search_categ=0;
-    $search_sale='';
-	$search_barcode="";
-    $search_customer_code='';
-    $search_supplier_code='';
-    $search_account_customer_code='';
-    $search_account_supplier_code='';
-	$search_town="";
-	$search_zip="";
-	$search_state="";
-	$search_country='';
-	$search_idprof1='';
-	$search_idprof2='';
-	$search_idprof3='';
-	$search_idprof4='';
-	$search_idprof5='';
-	$search_idprof6='';
-	$search_type='';
-	$search_type_thirdparty='';
-	$search_status='';
-	$search_stcomm='';
- 	$search_level_from='';
- 	$search_level_to='';
-	$search_array_options=array();
+    if ($action == 'setstcomm')
+    {
+        $object = new Client($db);
+        $result=$object->fetch(GETPOST('stcommsocid'));
+        $object->stcomm_id=dol_getIdFromCode($db, GETPOST('stcomm','alpha'), 'c_stcomm');
+        $result=$object->update($object->id, $user);
+        if ($result < 0) setEventMessages($object->error,$object->errors,'errors');
+    
+        $action='';
+    }
 }
 
 if ($search_status=='') $search_status=1; // always display active thirdparty first
@@ -439,7 +443,7 @@ if (! $resql)
 }
 
 $num = $db->num_rows($resql);
-$i = 0;
+
 if ($num == 1 && ! empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE))
 {
     $obj = $db->fetch_object($resql);
@@ -848,7 +852,7 @@ print '</td>';
 print "</tr>\n";
 
 $var=True;
-
+$i = 0;
 while ($i < min($num, $limit))
 {
 	$obj = $db->fetch_object($resql);
-- 
GitLab