diff --git a/dev/skeletons/skeleton_list.php b/dev/skeletons/skeleton_list.php
index da8a9995538924c999fcf5b04d481ca5e45167df..c47a87a803375700b5811c5c5ed60d51febef457 100644
--- a/dev/skeletons/skeleton_list.php
+++ b/dev/skeletons/skeleton_list.php
@@ -58,6 +58,7 @@ $action		= GETPOST('action','alpha');
 $backtopage = GETPOST('backtopage');
 $myparam	= GETPOST('myparam','alpha');
 
+$search_all=trim(GETPOST("sall"));
 $search_field1=GETPOST("search_field1");
 $search_field2=GETPOST("search_field2");
 $search_myfield=GETPOST('search_myfield');
@@ -247,7 +248,6 @@ if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST))
 
 $sql.= $db->plimit($limit+1, $offset);
 
-
 dol_syslog($script_file, LOG_DEBUG);
 $resql=$db->query($sql);
 if (! $resql)
@@ -259,7 +259,7 @@ if (! $resql)
 $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))
+if ($num == 1 && ! empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $search_all)
 {
     $obj = $db->fetch_object($resql);
     $id = $obj->rowid;
diff --git a/htdocs/adherents/list.php b/htdocs/adherents/list.php
index d3e7e96a7931b00e2acdff092a57d4c022257328..c98ad4abf3117c64870399d0b1d284a6c4de4ded 100644
--- a/htdocs/adherents/list.php
+++ b/htdocs/adherents/list.php
@@ -129,44 +129,49 @@ if (is_array($extrafields->attribute_label) && count($extrafields->attribute_lab
     }
 }
 
+
 /*
  * Actions
  */
 
 if (GETPOST('cancel')) { $action='list'; $massaction=''; }
-if (! GETPOST('confirmmassaction')) { $massaction=''; }
+if (! GETPOST('confirmmassaction') && $massaction != 'presend' && $massaction != 'confirm_presend' && $massaction != 'confirm_createbills') { $massaction=''; }
 
 $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")) // Both test are required to be compatible with all browsers
-{
-    $search="";
-	$search_ref="";
-    $search_lastname="";
-	$search_firstname="";
-	$search_login="";
-	$search_company="";
-	$type="";
-	$search_email="";
-	$search_address="";
-	$search_zip="";
-	$search_town="";
-	$search_state="";
-	$search_country='';
-	$search_phone='';
-	$search_phone_perso='';
-	$search_phone_mobile='';
-	$search_morphy="";
-	$search_categ="";
-	$catid="";
-	$sall="";
-	$statut='';
-	$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="";
+    	$search_ref="";
+        $search_lastname="";
+    	$search_firstname="";
+    	$search_login="";
+    	$search_company="";
+    	$type="";
+    	$search_email="";
+    	$search_address="";
+    	$search_zip="";
+    	$search_town="";
+    	$search_state="";
+    	$search_country='';
+    	$search_phone='';
+    	$search_phone_perso='';
+    	$search_phone_mobile='';
+    	$search_morphy="";
+    	$search_categ="";
+    	$catid="";
+    	$sall="";
+    	$statut='';
+    	$search_array_options=array();
+    }
 }
 
 
@@ -179,8 +184,6 @@ $formother=new FormOther($db);
 $membertypestatic=new AdherentType($db);
 $memberstatic=new Adherent($db);
 
-llxHeader('',$langs->trans("Member"),'EN:Module_Foundations|FR:Module_Adh&eacute;rents|ES:M&oacute;dulo_Miembros');
-
 $now=dol_now();
 
 $sql = "SELECT d.rowid, d.login, d.lastname, d.firstname, d.societe as company, d.fk_soc,";
@@ -259,263 +262,510 @@ $sql.= $db->plimit($limit+1, $offset);
 
 dol_syslog("get list", LOG_DEBUG);
 $resql = $db->query($sql);
-if ($resql)
+if (! $resql)
 {
-	$num = $db->num_rows($resql);
-	$i = 0;
+    dol_print_error($db);
+    exit;
+}
 
-	$titre=$langs->trans("MembersList");
-	if (isset($_GET["statut"]))
-	{
-		if ($statut == '-1,1') { $titre=$langs->trans("MembersListQualified"); }
-		if ($statut == '-1')   { $titre=$langs->trans("MembersListToValid"); }
-		if ($statut == '1' && ! $filter)    		{ $titre=$langs->trans("MembersListValid"); }
-		if ($statut == '1' && $filter=='uptodate')  { $titre=$langs->trans("MembersListUpToDate"); }
-		if ($statut == '1' && $filter=='outofdate')	{ $titre=$langs->trans("MembersListNotUpToDate"); }
-		if ($statut == '0')    { $titre=$langs->trans("MembersListResiliated"); }
-	}
-	elseif ($action == 'search')
-	{
-		$titre=$langs->trans("MembersListQualified");
-	}
+$num = $db->num_rows($resql);
 
-	if ($type > 0)
-	{
-		$membertype=new AdherentType($db);
-		$result=$membertype->fetch(GETPOST("type"));
-		$titre.=" (".$membertype->libelle.")";
-	}
+if ($num == 1 && ! empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $sall)
+{
+    $obj = $db->fetch_object($resql);
+    $id = $obj->rowid;
+    header("Location: ".DOL_URL_ROOT.'/adherents/card.php?id='.$id);
+    exit;
+}
 
-	$param='';
-    if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.urlencode($limit);
-	if ($statut != "") $param.="&statut=".urlencode($statut);
-	if ($search_ref)   $param.="&search_ref=".urlencode($search_ref);
-	if ($search_nom)   $param.="&search_nom=".urlencode($search_nom);
-	if ($search_firstname) $param.="&search_firstname=".urlencode($search_firstname);
-	if ($search_lastname)  $param.="&search_lastname=".urlencode($search_lastname);
-	if ($search_login)   $param.="&search_login=".urlencode($search_login);
-	if ($search_email)   $param.="&search_email=".urlencode($search_email);
-	if ($search_company) $param.="&search_company=".urlencode($search_company);
-	if ($search_address != '') $param.= "&search_address=".urlencode($search_address);
-	if ($search_town != '') $param.= "&search_town=".urlencode($search_town);
-	if ($search_zip != '') $param.= "&search_zip=".urlencode($search_zip);
-	if ($search_state != '') $param.= "&search_state=".urlencode($search_state);
-	if ($search_country != '') $param.= "&search_country=".urlencode($search_country);
-	if ($search_phone != '') $param.= "&search_phone=".urlencode($search_phone);
-	if ($search_phone_perso != '') $param.= "&search_phone_perso=".urlencode($search_phone_perso);
-	if ($search_phone_mobile != '') $param.= "&search_phone_mobile=".urlencode($search_phone_mobile);
-	if ($filter)         $param.="&filter=".urlencode($filter);
-	if ($type > 0)       $param.="&type=".urlencode($type);
-	if ($optioncss != '')       $param.='&optioncss='.urlencode($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);
-	}
-	
-	//$massactionbutton=$form->selectMassAction('', $massaction == 'presend' ? array() : array('presend'=>$langs->trans("SendByMail"), 'builddoc'=>$langs->trans("PDFMerge")));
-	
-	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="action" value="list">';
-	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_generic.png', 0, '', '', $limit);
-	
-	if ($sall)
-	{
-        foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val);
-        print $langs->trans("FilterOnInto", $sall) . implode(', ',$fieldstosearchall);
-	}
+llxHeader('',$langs->trans("Member"),'EN:Module_Foundations|FR:Module_Adh&eacute;rents|ES:M&oacute;dulo_Miembros');
 
-	// Filter on categories
-	$moreforfilter='';
-	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_MEMBER,$search_categ,'search_categ',1);
-		$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>';
-	}
+$titre=$langs->trans("MembersList");
+if (isset($_GET["statut"]))
+{
+	if ($statut == '-1,1') { $titre=$langs->trans("MembersListQualified"); }
+	if ($statut == '-1')   { $titre=$langs->trans("MembersListToValid"); }
+	if ($statut == '1' && ! $filter)    		{ $titre=$langs->trans("MembersListValid"); }
+	if ($statut == '1' && $filter=='uptodate')  { $titre=$langs->trans("MembersListUpToDate"); }
+	if ($statut == '1' && $filter=='outofdate')	{ $titre=$langs->trans("MembersListNotUpToDate"); }
+	if ($statut == '0')    { $titre=$langs->trans("MembersListResiliated"); }
+}
+elseif ($action == 'search')
+{
+	$titre=$langs->trans("MembersListQualified");
+}
+
+if ($type > 0)
+{
+	$membertype=new AdherentType($db);
+	$result=$membertype->fetch(GETPOST("type"));
+	$titre.=" (".$membertype->libelle.")";
+}
+
+$param='';
+if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage;
+if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit;
+if ($sall != "") $param.="&sall=".urlencode($sall);
+if ($statut != "") $param.="&statut=".urlencode($statut);
+if ($search_ref)   $param.="&search_ref=".urlencode($search_ref);
+if ($search_nom)   $param.="&search_nom=".urlencode($search_nom);
+if ($search_firstname) $param.="&search_firstname=".urlencode($search_firstname);
+if ($search_lastname)  $param.="&search_lastname=".urlencode($search_lastname);
+if ($search_login)   $param.="&search_login=".urlencode($search_login);
+if ($search_email)   $param.="&search_email=".urlencode($search_email);
+if ($search_company) $param.="&search_company=".urlencode($search_company);
+if ($search_address != '') $param.= "&search_address=".urlencode($search_address);
+if ($search_town != '') $param.= "&search_town=".urlencode($search_town);
+if ($search_zip != '') $param.= "&search_zip=".urlencode($search_zip);
+if ($search_state != '') $param.= "&search_state=".urlencode($search_state);
+if ($search_country != '') $param.= "&search_country=".urlencode($search_country);
+if ($search_phone != '') $param.= "&search_phone=".urlencode($search_phone);
+if ($search_phone_perso != '') $param.= "&search_phone_perso=".urlencode($search_phone_perso);
+if ($search_phone_mobile != '') $param.= "&search_phone_mobile=".urlencode($search_phone_mobile);
+if ($filter)         $param.="&filter=".urlencode($filter);
+if ($type > 0)       $param.="&type=".urlencode($type);
+if ($optioncss != '')       $param.='&optioncss='.urlencode($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);
+}
+
+//$massactionbutton=$form->selectMassAction('', $massaction == 'presend' ? array() : array('presend'=>$langs->trans("SendByMail"), 'builddoc'=>$langs->trans("PDFMerge")));
+
+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="action" value="list">';
+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_generic.png', 0, '', '', $limit);
+
+if ($sall)
+{
+    foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val);
+    print $langs->trans("FilterOnInto", $sall) . implode(', ',$fieldstosearchall);
+}
+
+// Filter on categories
+$moreforfilter='';
+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_MEMBER,$search_categ,'search_categ',1);
+	$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";
+print '<tr class="liste_titre">';
+if (! empty($conf->global->MAIN_VIEW_LINE_NUMBER))
+{
+	print '<td colspan="1" align="center">'.$langs->trans("NumberingShort").'</td>';
+}
+if (! empty($arrayfields['d.ref']['checked']))            print_liste_field_titre($arrayfields['d.ref']['label'],$_SERVER["PHP_SELF"],'d.rowid','',$param,'',$sortfield,$sortorder);
+if (! empty($arrayfields['d.firstname']['checked']))      print_liste_field_titre($arrayfields['d.firstname']['label'],$_SERVER["PHP_SELF"],'d.firstname','',$param,'',$sortfield,$sortorder);
+if (! empty($arrayfields['d.lastname']['checked']))       print_liste_field_titre($arrayfields['d.lastname']['label'],$_SERVER["PHP_SELF"],'d.lastname','',$param,'',$sortfield,$sortorder);
+if (! empty($arrayfields['d.company']['checked']))        print_liste_field_titre($arrayfields['d.company']['label'],$_SERVER["PHP_SELF"],'d.societe','',$param,'',$sortfield,$sortorder);
+if (! empty($arrayfields['d.login']['checked']))          print_liste_field_titre($arrayfields['d.login']['label'],$_SERVER["PHP_SELF"],'d.login','',$param,'',$sortfield,$sortorder);
+if (! empty($arrayfields['d.morphy']['checked']))         print_liste_field_titre($arrayfields['d.morphy']['label'],$_SERVER["PHP_SELF"],'d.morphy','',$param,'',$sortfield,$sortorder);
+if (! empty($arrayfields['t.libelle']['checked']))        print_liste_field_titre($arrayfields['t.libelle']['label'],$_SERVER["PHP_SELF"],'t.libelle','',$param,'',$sortfield,$sortorder);
+if (! empty($arrayfields['d.address']['checked']))        print_liste_field_titre($arrayfields['d.address']['label'],$_SERVER["PHP_SELF"],'d.address','',$param,'',$sortfield,$sortorder);
+if (! empty($arrayfields['d.zip']['checked']))            print_liste_field_titre($arrayfields['d.zip']['label'],$_SERVER["PHP_SELF"],'d.zip','',$param,'',$sortfield,$sortorder);
+if (! empty($arrayfields['d.town']['checked']))           print_liste_field_titre($arrayfields['d.town']['label'],$_SERVER["PHP_SELF"],'d.town','',$param,'',$sortfield,$sortorder);
+if (! empty($arrayfields['state.nom']['checked']))        print_liste_field_titre($langs->trans("StateShort"),$_SERVER["PHP_SELF"],"state.nom","",$param,'',$sortfield,$sortorder);
+if (! empty($arrayfields['country.code_iso']['checked'])) print_liste_field_titre($langs->trans("Country"),$_SERVER["PHP_SELF"],"country.code_iso","",$param,'align="center"',$sortfield,$sortorder);
+if (! empty($arrayfields['d.phone']['checked']))          print_liste_field_titre($arrayfields['d.phone']['label'],$_SERVER["PHP_SELF"],'d.phone','',$param,'',$sortfield,$sortorder);
+if (! empty($arrayfields['d.phone_perso']['checked']))          print_liste_field_titre($arrayfields['d.phone_perso']['label'],$_SERVER["PHP_SELF"],'d.phone_perso','',$param,'',$sortfield,$sortorder);
+if (! empty($arrayfields['d.phone_mobile']['checked']))          print_liste_field_titre($arrayfields['d.phone_mobile']['label'],$_SERVER["PHP_SELF"],'d.phone_mobile','',$param,'',$sortfield,$sortorder);
+if (! empty($arrayfields['d.email']['checked']))          print_liste_field_titre($arrayfields['d.email']['label'],$_SERVER["PHP_SELF"],'d.email','',$param,'',$sortfield,$sortorder);
+if (! empty($arrayfields['d.datefin']['checked']))        print_liste_field_titre($arrayfields['d.datefin']['label'],$_SERVER["PHP_SELF"],'d.datefin','',$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['d.datec']['checked']))     print_liste_field_titre($arrayfields['d.datec']['label'],$_SERVER["PHP_SELF"],"d.datec","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
+if (! empty($arrayfields['d.tms']['checked']))       print_liste_field_titre($arrayfields['d.tms']['label'],$_SERVER["PHP_SELF"],"d.tms","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
+if (! empty($arrayfields['d.statut']['checked']))    print_liste_field_titre($arrayfields['d.statut']['label'],$_SERVER["PHP_SELF"],"d.statut","",$param,'align="right"',$sortfield,$sortorder);
+print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"],"",'','','align="right"',$sortfield,$sortorder,'maxwidthsearch ');
+print "</tr>\n";
+
+// Line for filters fields
+print '<tr class="liste_titre">';
+
+// Line numbering
+if (! empty($conf->global->MAIN_VIEW_LINE_NUMBER))
+{
+	print '<td class="liste_titre">&nbsp;</td>';
+}
+
+// Ref
+if (! empty($arrayfields['d.ref']['checked'])) 
+{
+    print '<td class="liste_titre">';
+	print '<input class="flat" size="6" type="text" name="search_ref" value="'.$search_ref.'">';
+    print '</td>';
+}
+
+if (! empty($arrayfields['d.firstname']['checked'])) 
+{
+	print '<td class="liste_titre" align="left">';
+	print '<input class="flat" type="text" name="search_firstname" value="'.$search_firstname.'" size="6"></td>';
+}
+
+if (! empty($arrayfields['d.lastname']['checked'])) 
+{
+	print '<td class="liste_titre" align="left">';
+	print '<input class="flat" type="text" name="search_lastname" value="'.$search_lastname.'" size="6"></td>';
+}
+
+if (! empty($arrayfields['d.company']['checked'])) 
+{
+	print '<td class="liste_titre" align="left">';
+	print '<input class="flat" type="text" name="search_company" value="'.$search_company.'" size="6"></td>';
+}
+
+if (! empty($arrayfields['d.login']['checked'])) 
+{
+	print '<td class="liste_titre" align="left">';
+	print '<input class="flat" type="text" name="search_login" value="'.$search_login.'" size="6"></td>';
+}
+
+if (! empty($arrayfields['d.morphy']['checked']))
+{
+    print '<td class="liste_titre" align="left">';
+    print '</td>';
+}
+
+if (! empty($arrayfields['t.libelle']['checked'])) 
+{
+	print '<td class="liste_titre">';
+	$listetype=$membertypestatic->liste_array();
+	print $form->selectarray("type", $listetype, $type, 1, 0, 0, '', 0, 32);
+	print '</td>';
+}
+
+if (! empty($arrayfields['d.address']['checked'])) 
+{
+	print '<td class="liste_titre" align="left">';
+	print '<input class="flat" type="text" name="search_address" value="'.$search_address.'" size="5"></td>';
+}
+
+if (! empty($arrayfields['d.zip']['checked'])) 
+{
+	print '<td class="liste_titre" align="left">';
+	print '<input class="flat" type="text" name="search_zip" value="'.$search_zip.'" size="5"></td>';
+}
+if (! empty($arrayfields['d.town']['checked'])) 
+{
+	print '<td class="liste_titre" align="left">';
+	print '<input class="flat" type="text" name="search_town" value="'.$search_town.'" size="5"></td>';
+}
+// State
+if (! empty($arrayfields['state.nom']['checked']))
+{
+    print '<td class="liste_titre">';
+    print '<input class="flat searchstring" size="4" type="text" name="search_state" value="'.dol_escape_htmltag($search_state).'">';
+    print '</td>';
+}
+// Country
+if (! empty($arrayfields['country.code_iso']['checked']))
+{
+    print '<td class="liste_titre" align="center">';
+    print $form->select_country($search_country,'search_country','',0,'maxwidth100');
+    print '</td>';
+}
+// Phone pro
+if (! empty($arrayfields['d.phone']['checked'])) 
+{
+	print '<td class="liste_titre" align="left">';
+	print '<input class="flat" type="text" name="search_phone" value="'.$search_phone.'" size="5"></td>';
+}
+// Phone perso
+if (! empty($arrayfields['d.phone_perso']['checked'])) 
+{
+	print '<td class="liste_titre" align="left">';
+	print '<input class="flat" type="text" name="search_phone_perso" value="'.$search_phone_perso.'" size="5"></td>';
+}
+// Phone mobile
+if (! empty($arrayfields['d.phone_mobile']['checked'])) 
+{
+	print '<td class="liste_titre" align="left">';
+	print '<input class="flat" type="text" name="search_phone_mobile" value="'.$search_phone_mobile.'" size="5"></td>';
+}
+// Email
+if (! empty($arrayfields['d.email']['checked'])) 
+{
+	print '<td class="liste_titre" align="left">';
+	print '<input class="flat" type="text" name="search_email" value="'.$search_email.'" size="5"></td>';
+}
+
+if (! empty($arrayfields['d.datefin']['checked'])) 
+{
+	print '<td class="liste_titre" align="left">';
+	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']))
+        {
+            $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;
+// Date creation
+if (! empty($arrayfields['d.datec']['checked']))
+{
+    print '<td class="liste_titre">';
+    print '</td>';
+}
+// Date modification
+if (! empty($arrayfields['d.tms']['checked']))
+{
+    print '<td class="liste_titre">';
+    print '</td>';
+}
+// Status
+if (! empty($arrayfields['d.statut']['checked']))
+{
+    print '<td class="liste_titre maxwidthonsmartphone" align="right">';
+    $liststatus=array(
+        '-1'=>$langs->trans("Draft"),
+        '1'=>$langs->trans("Validated"),
+        '0'=>$langs->trans("Resiliated")
+    );
+    print $form->selectarray('statut', $liststatus, $statut, -2);
+    print '</td>';
+}
+// Action column
+print '<td class="liste_titre" align="middle">';
+$searchpitco=$form->showFilterAndCheckAddButtons(0);
+print $searchpitco;
+print '</td>';
 
-    $varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage;
-    $selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage);	// This also change content of $arrayfields
+print "</tr>\n";
+
+$var=True;
+$i = 0;
+while ($i < $num && $i < $conf->liste_limit)
+{
+	$obj = $db->fetch_object($resql);
+
+	$datefin=$db->jdate($obj->datefin);
+	$memberstatic->id=$obj->rowid;
+	$memberstatic->ref=$obj->rowid;
+	$memberstatic->lastname=$obj->lastname;
+	$memberstatic->firstname=$obj->firstname;
+	$memberstatic->societe=$obj->company;
+	$memberstatic->statut=$obj->statut;
+	$memberstatic->datefin= $datefin;
+	$memberstatic->socid = $obj->fk_soc;
 	
-	print '<table class="tagtable liste'.($moreforfilter?" listwithfilterbefore":"").'">'."\n";
-	print '<tr class="liste_titre">';
-	if (! empty($conf->global->MAIN_VIEW_LINE_NUMBER))
-	{
-		print '<td colspan="1" align="center">'.$langs->trans("NumberingShort").'</td>';
+	if (! empty($obj->fk_soc)) {
+	    $memberstatic->fetch_thirdparty();
+		$companyname=$memberstatic->thirdparty->name;
+	} else {
+		$companyname=$obj->company;
 	}
-	if (! empty($arrayfields['d.ref']['checked']))            print_liste_field_titre($arrayfields['d.ref']['label'],$_SERVER["PHP_SELF"],'d.rowid','',$param,'',$sortfield,$sortorder);
-	if (! empty($arrayfields['d.firstname']['checked']))      print_liste_field_titre($arrayfields['d.firstname']['label'],$_SERVER["PHP_SELF"],'d.firstname','',$param,'',$sortfield,$sortorder);
-	if (! empty($arrayfields['d.lastname']['checked']))       print_liste_field_titre($arrayfields['d.lastname']['label'],$_SERVER["PHP_SELF"],'d.lastname','',$param,'',$sortfield,$sortorder);
-	if (! empty($arrayfields['d.company']['checked']))        print_liste_field_titre($arrayfields['d.company']['label'],$_SERVER["PHP_SELF"],'d.societe','',$param,'',$sortfield,$sortorder);
-	if (! empty($arrayfields['d.login']['checked']))          print_liste_field_titre($arrayfields['d.login']['label'],$_SERVER["PHP_SELF"],'d.login','',$param,'',$sortfield,$sortorder);
-	if (! empty($arrayfields['d.morphy']['checked']))         print_liste_field_titre($arrayfields['d.morphy']['label'],$_SERVER["PHP_SELF"],'d.morphy','',$param,'',$sortfield,$sortorder);
-	if (! empty($arrayfields['t.libelle']['checked']))        print_liste_field_titre($arrayfields['t.libelle']['label'],$_SERVER["PHP_SELF"],'t.libelle','',$param,'',$sortfield,$sortorder);
-	if (! empty($arrayfields['d.address']['checked']))        print_liste_field_titre($arrayfields['d.address']['label'],$_SERVER["PHP_SELF"],'d.address','',$param,'',$sortfield,$sortorder);
-	if (! empty($arrayfields['d.zip']['checked']))            print_liste_field_titre($arrayfields['d.zip']['label'],$_SERVER["PHP_SELF"],'d.zip','',$param,'',$sortfield,$sortorder);
-	if (! empty($arrayfields['d.town']['checked']))           print_liste_field_titre($arrayfields['d.town']['label'],$_SERVER["PHP_SELF"],'d.town','',$param,'',$sortfield,$sortorder);
-	if (! empty($arrayfields['state.nom']['checked']))        print_liste_field_titre($langs->trans("StateShort"),$_SERVER["PHP_SELF"],"state.nom","",$param,'',$sortfield,$sortorder);
-	if (! empty($arrayfields['country.code_iso']['checked'])) print_liste_field_titre($langs->trans("Country"),$_SERVER["PHP_SELF"],"country.code_iso","",$param,'align="center"',$sortfield,$sortorder);
-	if (! empty($arrayfields['d.phone']['checked']))          print_liste_field_titre($arrayfields['d.phone']['label'],$_SERVER["PHP_SELF"],'d.phone','',$param,'',$sortfield,$sortorder);
-	if (! empty($arrayfields['d.phone_perso']['checked']))          print_liste_field_titre($arrayfields['d.phone_perso']['label'],$_SERVER["PHP_SELF"],'d.phone_perso','',$param,'',$sortfield,$sortorder);
-	if (! empty($arrayfields['d.phone_mobile']['checked']))          print_liste_field_titre($arrayfields['d.phone_mobile']['label'],$_SERVER["PHP_SELF"],'d.phone_mobile','',$param,'',$sortfield,$sortorder);
-	if (! empty($arrayfields['d.email']['checked']))          print_liste_field_titre($arrayfields['d.email']['label'],$_SERVER["PHP_SELF"],'d.email','',$param,'',$sortfield,$sortorder);
-	if (! empty($arrayfields['d.datefin']['checked']))        print_liste_field_titre($arrayfields['d.datefin']['label'],$_SERVER["PHP_SELF"],'d.datefin','',$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['d.datec']['checked']))     print_liste_field_titre($arrayfields['d.datec']['label'],$_SERVER["PHP_SELF"],"d.datec","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
-	if (! empty($arrayfields['d.tms']['checked']))       print_liste_field_titre($arrayfields['d.tms']['label'],$_SERVER["PHP_SELF"],"d.tms","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
-	if (! empty($arrayfields['d.statut']['checked']))    print_liste_field_titre($arrayfields['d.statut']['label'],$_SERVER["PHP_SELF"],"d.statut","",$param,'align="right"',$sortfield,$sortorder);
-	print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"],"",'','','align="right"',$sortfield,$sortorder,'maxwidthsearch ');
-    print "</tr>\n";
-
-	// Line for filters fields
-	print '<tr class="liste_titre">';
+
+	$var=!$var;
+	print "<tr ".$bc[$var].">";
 	
-	// Line numbering
 	if (! empty($conf->global->MAIN_VIEW_LINE_NUMBER))
 	{
- 		print '<td class="liste_titre">&nbsp;</td>';
- 	}
-	
+		print '<td align="center">'.($i+1).'</td>';
+	}
+
 	// Ref
 	if (! empty($arrayfields['d.ref']['checked'])) 
 	{
-	    print '<td class="liste_titre">';
-    	print '<input class="flat" size="6" type="text" name="search_ref" value="'.$search_ref.'">';
-	    print '</td>';
-	}
-
+   		print "<td>";
+		print $memberstatic->getNomUrl(1);
+		print "</td>\n";
+	}		
+	// Firstname
 	if (! empty($arrayfields['d.firstname']['checked'])) 
 	{
-		print '<td class="liste_titre" align="left">';
-		print '<input class="flat" type="text" name="search_firstname" value="'.$search_firstname.'" size="6"></td>';
+    	print "<td>";
+		print $obj->firstname;
+		print "</td>\n";
 	}
-	
+	// Lastname
 	if (! empty($arrayfields['d.lastname']['checked'])) 
 	{
-		print '<td class="liste_titre" align="left">';
-		print '<input class="flat" type="text" name="search_lastname" value="'.$search_lastname.'" size="6"></td>';
+    	print "<td>";
+		print $obj->lastname;
+		print "</td>\n";
 	}
-	
+	// Company
 	if (! empty($arrayfields['d.company']['checked'])) 
 	{
-		print '<td class="liste_titre" align="left">';
-		print '<input class="flat" type="text" name="search_company" value="'.$search_company.'" size="6"></td>';
+    	print "<td>";
+    	print $companyname;
+		print "</td>\n";
 	}
-	
+	// Login
 	if (! empty($arrayfields['d.login']['checked'])) 
 	{
-		print '<td class="liste_titre" align="left">';
-		print '<input class="flat" type="text" name="search_login" value="'.$search_login.'" size="6"></td>';
+	   print "<td>".$obj->login."</td>\n";
 	}
-	
-	if (! empty($arrayfields['d.morphy']['checked']))
+	// Moral/Physique
+	if (! empty($arrayfields['d.morphy']['checked'])) 
 	{
-	    print '<td class="liste_titre" align="left">';
-	    print '</td>';
+	   print "<td>".$memberstatic->getmorphylib($obj->morphy)."</td>\n";
 	}
-	
+	// Type label
 	if (! empty($arrayfields['t.libelle']['checked'])) 
 	{
-		print '<td class="liste_titre">';
-		$listetype=$membertypestatic->liste_array();
-		print $form->selectarray("type", $listetype, $type, 1, 0, 0, '', 0, 32);
+    	$membertypestatic->id=$obj->type_id;
+		$membertypestatic->libelle=$obj->type;
+		print '<td class="nowrap">';
+		print $membertypestatic->getNomUrl(1,32);
 		print '</td>';
 	}
-	
-	if (! empty($arrayfields['d.address']['checked'])) 
+	// Address
+	if (! empty($arrayfields['d.address']['checked']))
 	{
-		print '<td class="liste_titre" align="left">';
-		print '<input class="flat" type="text" name="search_address" value="'.$search_address.'" size="5"></td>';
+	    print '<td class="nocellnopadd">';
+	    print $obj->address;
+	    print '</td>';
 	}
-	
-	if (! empty($arrayfields['d.zip']['checked'])) 
+	// Zip
+	if (! empty($arrayfields['d.zip']['checked']))
 	{
-		print '<td class="liste_titre" align="left">';
-		print '<input class="flat" type="text" name="search_zip" value="'.$search_zip.'" size="5"></td>';
+	    print '<td class="nocellnopadd">';
+	    print $obj->zip;
+	    print '</td>';
+	    if (! $i) $totalarray['nbfield']++;
 	}
-	if (! empty($arrayfields['d.town']['checked'])) 
+	// Town
+	if (! empty($arrayfields['d.town']['checked']))
 	{
-		print '<td class="liste_titre" align="left">';
-		print '<input class="flat" type="text" name="search_town" value="'.$search_town.'" size="5"></td>';
+	    print '<td class="nocellnopadd">';
+	    print $obj->town;
+	    print '</td>';
+	    if (! $i) $totalarray['nbfield']++;
 	}
 	// State
 	if (! empty($arrayfields['state.nom']['checked']))
 	{
-	    print '<td class="liste_titre">';
-	    print '<input class="flat searchstring" size="4" type="text" name="search_state" value="'.dol_escape_htmltag($search_state).'">';
-	    print '</td>';
+	    print "<td>".$obj->state_name."</td>\n";
+	    if (! $i) $totalarray['nbfield']++;
 	}
 	// Country
 	if (! empty($arrayfields['country.code_iso']['checked']))
 	{
-	    print '<td class="liste_titre" align="center">';
-	    print $form->select_country($search_country,'search_country','',0,'maxwidth100');
+	    print '<td align="center">';
+	    $tmparray=getCountry($obj->country,'all');
+	    print $tmparray['label'];
 	    print '</td>';
+	    if (! $i) $totalarray['nbfield']++;
 	}
 	// Phone pro
 	if (! empty($arrayfields['d.phone']['checked'])) 
 	{
-		print '<td class="liste_titre" align="left">';
-		print '<input class="flat" type="text" name="search_phone" value="'.$search_phone.'" size="5"></td>';
+		print '<td class="nocellnopadd">';
+	    print $obj->phone;
+	    print '</td>';
+	    if (! $i) $totalarray['nbfield']++;
 	}
 	// Phone perso
 	if (! empty($arrayfields['d.phone_perso']['checked'])) 
 	{
-		print '<td class="liste_titre" align="left">';
-		print '<input class="flat" type="text" name="search_phone_perso" value="'.$search_phone_perso.'" size="5"></td>';
+		print '<td class="nocellnopadd">';
+	    print $obj->phone_perso;
+	    print '</td>';
+	    if (! $i) $totalarray['nbfield']++;
 	}
 	// Phone mobile
 	if (! empty($arrayfields['d.phone_mobile']['checked'])) 
 	{
-		print '<td class="liste_titre" align="left">';
-		print '<input class="flat" type="text" name="search_phone_mobile" value="'.$search_phone_mobile.'" size="5"></td>';
+		print '<td class="nocellnopadd">';
+	    print $obj->phone_mobile;
+	    print '</td>';
+	    if (! $i) $totalarray['nbfield']++;
 	}
-	// Email
-	if (! empty($arrayfields['d.email']['checked'])) 
+	// EMail
+	if (! empty($arrayfields['d.email']['checked']))
 	{
-		print '<td class="liste_titre" align="left">';
-		print '<input class="flat" type="text" name="search_email" value="'.$search_email.'" size="5"></td>';
+        print "<td>".dol_print_email($obj->email,0,0,1)."</td>\n";
 	}
-
-	if (! empty($arrayfields['d.datefin']['checked'])) 
+	// End of subscription date
+	$datefin=$db->jdate($obj->datefin);		
+	if (! empty($arrayfields['d.datefin']['checked']))
 	{
-		print '<td class="liste_titre" align="left">';
-		print '</td>';
+		if ($datefin)
+		{
+			print '<td align="center" class="nowrap">';
+			print dol_print_date($datefin,'day');
+			if ($memberstatic->hasDelay()) {
+				print " ".img_warning($langs->trans("SubscriptionLate"));
+			}
+			print '</td>';
+		}
+		else
+		{
+			print '<td align="left" class="nowrap">';
+			if ($obj->subscription == 'yes')
+			{
+				print $langs->trans("SubscriptionNotReceived");
+				if ($obj->statut > 0) print " ".img_warning();
+			}
+			else
+			{
+				print '&nbsp;';
+			}
+			print '</td>';
+		}
 	}
 	// Extra fields
 	if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
@@ -524,315 +774,78 @@ if ($resql)
 	    {
 	        if (! empty($arrayfields["ef.".$key]['checked']))
 	        {
+	            print '<td';
 	            $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]).'">';
-	            }
+	            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);
-	$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['d.datec']['checked']))
 	{
-	    print '<td class="liste_titre">';
+	    print '<td align="center" class="nowrap">';
+	    print dol_print_date($db->jdate($obj->date_creation), 'dayhour');
 	    print '</td>';
+	    if (! $i) $totalarray['nbfield']++;
 	}
 	// Date modification
 	if (! empty($arrayfields['d.tms']['checked']))
 	{
-	    print '<td class="liste_titre">';
+	    print '<td align="center" class="nowrap">';
+	    print dol_print_date($db->jdate($obj->date_update), 'dayhour');
 	    print '</td>';
+	    if (! $i) $totalarray['nbfield']++;
 	}
 	// Status
 	if (! empty($arrayfields['d.statut']['checked']))
 	{
-	    print '<td class="liste_titre maxwidthonsmartphone" align="right">';
-	    $liststatus=array(
-	        '-1'=>$langs->trans("Draft"),
-	        '1'=>$langs->trans("Validated"),
-	        '0'=>$langs->trans("Resiliated")
-	    );
-	    print $form->selectarray('statut', $liststatus, $statut, -2);
+	    print '<td align="right" class="nowrap">';
+	    print $memberstatic->LibStatut($obj->statut,$obj->subscription,$datefin,2);
 	    print '</td>';
+	    if (! $i) $totalarray['nbfield']++;
 	}
 	// Action column
-	print '<td class="liste_titre" align="middle">';
-	$searchpitco=$form->showFilterAndCheckAddButtons(0);
-	print $searchpitco;
-	print '</td>';
-    
-	print "</tr>\n";
-
-	$var=True;
-	while ($i < $num && $i < $conf->liste_limit)
+	print '<td align="center">';
+	if ($user->rights->adherent->creer)
 	{
-		$obj = $db->fetch_object($resql);
-
-		$datefin=$db->jdate($obj->datefin);
-		$memberstatic->id=$obj->rowid;
-		$memberstatic->ref=$obj->rowid;
-		$memberstatic->lastname=$obj->lastname;
-		$memberstatic->firstname=$obj->firstname;
-		$memberstatic->societe=$obj->company;
-		$memberstatic->statut=$obj->statut;
-		$memberstatic->datefin= $datefin;
-		$memberstatic->socid = $obj->fk_soc;
-		
-		if (! empty($obj->fk_soc)) {
-		    $memberstatic->fetch_thirdparty();
-			$companyname=$memberstatic->thirdparty->name;
-		} else {
-			$companyname=$obj->company;
-		}
-
-		$var=!$var;
-		print "<tr ".$bc[$var].">";
-		
-		if (! empty($conf->global->MAIN_VIEW_LINE_NUMBER))
-		{
-			print '<td align="center">'.($i+1).'</td>';
-		}
-
-    	// Ref
-    	if (! empty($arrayfields['d.ref']['checked'])) 
-    	{
-       		print "<td>";
-    		print $memberstatic->getNomUrl(1);
-    		print "</td>\n";
-    	}		
-		// Firstname
-    	if (! empty($arrayfields['d.firstname']['checked'])) 
-    	{
-        	print "<td>";
-    		print $obj->firstname;
-    		print "</td>\n";
-    	}
-		// Lastname
-    	if (! empty($arrayfields['d.lastname']['checked'])) 
-    	{
-        	print "<td>";
-    		print $obj->lastname;
-    		print "</td>\n";
-    	}
-		// Company
-    	if (! empty($arrayfields['d.company']['checked'])) 
-    	{
-        	print "<td>";
-        	print $companyname;
-    		print "</td>\n";
-    	}
-    	// Login
-    	if (! empty($arrayfields['d.login']['checked'])) 
-    	{
-    	   print "<td>".$obj->login."</td>\n";
-    	}
-    	// Moral/Physique
-    	if (! empty($arrayfields['d.morphy']['checked'])) 
-    	{
-    	   print "<td>".$memberstatic->getmorphylib($obj->morphy)."</td>\n";
-    	}
-		// Type label
-    	if (! empty($arrayfields['t.libelle']['checked'])) 
-    	{
-        	$membertypestatic->id=$obj->type_id;
-    		$membertypestatic->libelle=$obj->type;
-    		print '<td class="nowrap">';
-    		print $membertypestatic->getNomUrl(1,32);
-    		print '</td>';
-    	}
-		// Address
-		if (! empty($arrayfields['d.address']['checked']))
-		{
-		    print '<td class="nocellnopadd">';
-		    print $obj->address;
-		    print '</td>';
-		}
-		// Zip
-		if (! empty($arrayfields['d.zip']['checked']))
-		{
-		    print '<td class="nocellnopadd">';
-		    print $obj->zip;
-		    print '</td>';
-		    if (! $i) $totalarray['nbfield']++;
-		}
-    	// Town
-		if (! empty($arrayfields['d.town']['checked']))
-		{
-		    print '<td class="nocellnopadd">';
-		    print $obj->town;
-		    print '</td>';
-		    if (! $i) $totalarray['nbfield']++;
-		}
-		// State
-		if (! empty($arrayfields['state.nom']['checked']))
-		{
-		    print "<td>".$obj->state_name."</td>\n";
-		    if (! $i) $totalarray['nbfield']++;
-		}
-		// Country
-		if (! empty($arrayfields['country.code_iso']['checked']))
-		{
-		    print '<td align="center">';
-		    $tmparray=getCountry($obj->country,'all');
-		    print $tmparray['label'];
-		    print '</td>';
-		    if (! $i) $totalarray['nbfield']++;
-		}
-		// Phone pro
-		if (! empty($arrayfields['d.phone']['checked'])) 
-		{
-			print '<td class="nocellnopadd">';
-		    print $obj->phone;
-		    print '</td>';
-		    if (! $i) $totalarray['nbfield']++;
-		}
-		// Phone perso
-		if (! empty($arrayfields['d.phone_perso']['checked'])) 
-		{
-			print '<td class="nocellnopadd">';
-		    print $obj->phone_perso;
-		    print '</td>';
-		    if (! $i) $totalarray['nbfield']++;
-		}
-		// Phone mobile
-		if (! empty($arrayfields['d.phone_mobile']['checked'])) 
-		{
-			print '<td class="nocellnopadd">';
-		    print $obj->phone_mobile;
-		    print '</td>';
-		    if (! $i) $totalarray['nbfield']++;
-		}
-		// EMail
-		if (! empty($arrayfields['d.email']['checked']))
-		{
-            print "<td>".dol_print_email($obj->email,0,0,1)."</td>\n";
-		}
-		// End of subscription date
-		$datefin=$db->jdate($obj->datefin);		
-		if (! empty($arrayfields['d.datefin']['checked']))
-		{
-    		if ($datefin)
-    		{
-    			print '<td align="center" class="nowrap">';
-    			print dol_print_date($datefin,'day');
-    			if ($memberstatic->hasDelay()) {
-    				print " ".img_warning($langs->trans("SubscriptionLate"));
-    			}
-    			print '</td>';
-    		}
-    		else
-    		{
-    			print '<td align="left" class="nowrap">';
-    			if ($obj->subscription == 'yes')
-    			{
-    				print $langs->trans("SubscriptionNotReceived");
-    				if ($obj->statut > 0) print " ".img_warning();
-    			}
-    			else
-    			{
-    				print '&nbsp;';
-    			}
-    			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';
-		            $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['d.datec']['checked']))
-		{
-		    print '<td align="center" class="nowrap">';
-		    print dol_print_date($db->jdate($obj->date_creation), 'dayhour');
-		    print '</td>';
-		    if (! $i) $totalarray['nbfield']++;
-		}
-		// Date modification
-		if (! empty($arrayfields['d.tms']['checked']))
-		{
-		    print '<td align="center" class="nowrap">';
-		    print dol_print_date($db->jdate($obj->date_update), 'dayhour');
-		    print '</td>';
-		    if (! $i) $totalarray['nbfield']++;
-		}
-		// Status
-		if (! empty($arrayfields['d.statut']['checked']))
-		{
-		    print '<td align="right" class="nowrap">';
-		    print $memberstatic->LibStatut($obj->statut,$obj->subscription,$datefin,2);
-		    print '</td>';
-		    if (! $i) $totalarray['nbfield']++;
-		}
-		// Action column
-		print '<td align="center">';
-		if ($user->rights->adherent->creer)
-		{
-			print "<a href=\"card.php?rowid=".$obj->rowid."&action=edit&backtopage=1\">".img_edit()."</a>";
-		}
-		print '&nbsp;';
-		if ($user->rights->adherent->supprimer && $obj->statut == -1)
-		{
-			print "<a href=\"card.php?rowid=".$obj->rowid."&action=delete&backtopage=1\">".img_picto($langs->trans("Delete"),'disable.png')."</a>";
-		}
-		if ($user->rights->adherent->supprimer && $obj->statut == 1)
-		{
-			print "<a href=\"card.php?rowid=".$obj->rowid."&action=resign&backtopage=1\">".img_picto($langs->trans("Resiliate"),'disable.png')."</a>";
-		}
-		print "</td>";
-		if (! $i) $totalarray['nbfield']++;
-		
-		print "</tr>\n";
-		$i++;
+		print "<a href=\"card.php?rowid=".$obj->rowid."&action=edit&backtopage=1\">".img_edit()."</a>";
+	}
+	print '&nbsp;';
+	if ($user->rights->adherent->supprimer && $obj->statut == -1)
+	{
+		print "<a href=\"card.php?rowid=".$obj->rowid."&action=delete&backtopage=1\">".img_picto($langs->trans("Delete"),'disable.png')."</a>";
 	}
+	if ($user->rights->adherent->supprimer && $obj->statut == 1)
+	{
+		print "<a href=\"card.php?rowid=".$obj->rowid."&action=resign&backtopage=1\">".img_picto($langs->trans("Resiliate"),'disable.png')."</a>";
+	}
+	print "</td>";
+	if (! $i) $totalarray['nbfield']++;
+	
+	print "</tr>\n";
+	$i++;
+}
 
-	$db->free($resql);
+$db->free($resql);
 
-	$parameters=array('sql' => $sql);
-	$reshook=$hookmanager->executeHooks('printFieldListFooter',$parameters);    // Note that $action and $object may have been modified by hook
-	print $hookmanager->resPrint;
+$parameters=array('sql' => $sql);
+$reshook=$hookmanager->executeHooks('printFieldListFooter',$parameters);    // Note that $action and $object may have been modified by hook
+print $hookmanager->resPrint;
 
-	print "</table>\n";
-	print '</form>';
+print "</table>\n";
+print '</form>';
 
-	if ($num > $limit || $page) print_barre_liste('', $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords, 'title_generic.png', 0, '', '', $limit, 1);
-}
-else
-{
-	dol_print_error($db);
-}
+if ($num > $limit || $page) print_barre_liste('', $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords, 'title_generic.png', 0, '', '', $limit, 1);
 
 
 llxFooter();
-
 $db->close();
diff --git a/htdocs/contact/list.php b/htdocs/contact/list.php
index bc8c3235242f4594e0875776135447c6e771669f..7b2e5528eb6e51578625b17b6924958a155e188e 100644
--- a/htdocs/contact/list.php
+++ b/htdocs/contact/list.php
@@ -385,7 +385,7 @@ if (! $result)
 
 $num = $db->num_rows($result);
 
-if ($num == 1 && ! empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE))
+if ($num == 1 && ! empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $sall)
 {
     $obj = $db->fetch_object($resql);
     $id = $obj->cidp;
diff --git a/htdocs/product/list.php b/htdocs/product/list.php
index 671e6db3af36e9718ea840006581cd75558e6ddc..3e2f21e4ecd37a01acc3a05fb403febf7ba5a077 100644
--- a/htdocs/product/list.php
+++ b/htdocs/product/list.php
@@ -170,26 +170,38 @@ if (is_array($extrafields->attribute_label) && count($extrafields->attribute_lab
 }
 
 
-		    
+
 /*
  * Actions
  */
 
-include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
+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');
 
-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))
 {
-	$sall="";
-	$sref="";
-	$snom="";
-	$sbarcode="";
-	$search_categ=0;
-	$tosell="";
-	$tobuy="";
-	$search_tobatch='';
-	$search_accountancy_code_sell='';
-	$search_accountancy_code_buy='';
-	$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
+    {
+    	$sall="";
+    	$sref="";
+    	$snom="";
+    	$sbarcode="";
+    	$search_categ=0;
+    	$tosell="";
+    	$tobuy="";
+    	$search_tobatch='';
+    	$search_accountancy_code_sell='';
+    	$search_accountancy_code_buy='';
+    	$search_array_options=array();
+    }
 }
 
 
@@ -305,13 +317,12 @@ else
     {
     	$num = $db->num_rows($resql);
 
-    	$i = 0;
-
-    	if ($num == 1 && ($sall || $snom || $sref || $sbarcode) && $action != 'list')
+    	if ($num == 1 && ! empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $sall)
     	{
-    		$objp = $db->fetch_object($resql);
-    		header("Location: card.php?id=".$objp->rowid);
-    		exit;
+    	    $obj = $db->fetch_object($resql);
+    	    $id = $obj->rowid;
+    	    header("Location: ".DOL_URL_ROOT.'/product/card.php?id='.$id);
+    	    exit;
     	}
 
     	$helpurl='';
@@ -585,6 +596,7 @@ else
     		$product_fourn =new ProductFournisseur($db);
 
     		$var=true;
+    	    $i = 0;
     		while ($i < min($num,$limit))
     		{
     			$objp = $db->fetch_object($resql);
diff --git a/htdocs/projet/list.php b/htdocs/projet/list.php
index 56da78cdbcf055a28e1f3e7e84973706cdf0d35e..787d902768d9b5c68f9d195a5b0066422a564333 100644
--- a/htdocs/projet/list.php
+++ b/htdocs/projet/list.php
@@ -142,34 +142,44 @@ if (is_array($extrafields->attribute_label) && count($extrafields->attribute_lab
  * Actions
  */
 
-include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
-
-// 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_all='';
-	$search_categ='';
-	$search_ref="";
-	$search_label="";
-	$search_societe="";
-	$search_year="";
-	$search_status=-1;
-	$search_opp_status=-1;
-	$search_opp_amount='';
-	$search_opp_percent='';
-	$search_budget_amount='';
-	$search_public="";
-	$search_sale="";
-	$search_user='';
-	$sday="";
-	$smonth="";
-	$syear="";
-	$day="";
-	$month="";
-	$year="";
-	$search_array_options=array();
-}
+if (GETPOST('cancel')) { $action='list'; $massaction=''; }
+if (! GETPOST('confirmmassaction') && $massaction != 'presend' && $massaction != 'confirm_presend' && $massaction != 'confirm_createbills') { $massaction=''; }
+
+$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');
+
+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")) // Both test are required to be compatible with all browsers
+    {
+    	$search_all='';
+    	$search_categ='';
+    	$search_ref="";
+    	$search_label="";
+    	$search_societe="";
+    	$search_year="";
+    	$search_status=-1;
+    	$search_opp_status=-1;
+    	$search_opp_amount='';
+    	$search_opp_percent='';
+    	$search_budget_amount='';
+    	$search_public="";
+    	$search_sale="";
+    	$search_user='';
+    	$sday="";
+    	$smonth="";
+    	$syear="";
+    	$day="";
+    	$month="";
+    	$year="";
+    	$search_array_options=array();
+    }
+}
 
 
 /*
@@ -185,8 +195,6 @@ $formproject = new FormProjets($db);
 $title=$langs->trans("Projects");
 if ($search_user == $user->id) $title=$langs->trans("MyProjects");
 
-llxHeader("",$title,"EN:Module_Projects|FR:Module_Projets|ES:M&oacute;dulo_Proyectos");
-
 // Get list of project id allowed to user (in a string list separated by coma)
 if (! $user->rights->projet->all->lire) $projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,0,1,$socid);
 
@@ -320,538 +328,546 @@ $sql.= $db->plimit($limit + 1,$offset);
 dol_syslog("list allowed project", LOG_DEBUG);
 //print $sql;
 $resql = $db->query($sql);
-if ($resql)
+if (! $resql)
 {
-	$var=true;
-	$num = $db->num_rows($resql);
-
-	$param='';
-    if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage;
-	if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit;
-	if ($sday)              		$param.='&sday='.$day;
-	if ($smonth)              		$param.='&smonth='.$smonth;
-	if ($syear)               		$param.='&syear=' .$syear;
-	if ($day)               		$param.='&day='.$day;
-	if ($month)              		$param.='&month='.$month;
-	if ($year)               		$param.='&year=' .$year;
-	if ($socid)				        $param.='&socid='.$socid;
-	if ($search_all != '') 			$param.='&search_all='.$search_all;
-	if ($search_ref != '') 			$param.='&search_ref='.$search_ref;
-	if ($search_label != '') 		$param.='&search_label='.$search_label;
-	if ($search_societe != '') 		$param.='&search_societe='.$search_societe;
-	if ($search_status >= 0) 		$param.='&search_status='.$search_status;
-	if ((is_numeric($search_opp_status) && $search_opp_status >= 0) || in_array($search_opp_status, array('all','openedopp','none'))) 	$param.='&search_opp_status='.urlencode($search_opp_status);
-	if ((is_numeric($search_opp_percent) && $search_opp_percent >= 0) || in_array($search_opp_percent, array('all','openedopp','none'))) 	$param.='&search_opp_percent='.urlencode($search_opp_percent);
-	if ($search_public != '') 		$param.='&search_public='.$search_public;
-	if ($search_user > 0)    		$param.='&search_user='.$search_user;
-	if ($search_sale > 0)    		$param.='&search_sale='.$search_sale;
-	if ($search_opp_amount != '')    $param.='&search_opp_amount='.$search_opp_amount;
-	if ($search_budget_amount != '') $param.='&search_budget_amount='.$search_budget_amount;
-	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);
-	}
+    dol_print_error($db);
+    exit;
+}
 
-	$text=$langs->trans("Projects");
-	if ($search_user == $user->id) $text=$langs->trans('MyProjects');
-
-	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 '<input type="hidden" name="type" value="'.$type.'">';
-	print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
-	
-	print_barre_liste($text, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, "", $num, $nbtotalofrecords, 'title_project', 0, '', '', $limit);
-	
-	// Show description of content
-	if ($search_user == $user->id) print $langs->trans("MyProjectsDesc").'<br><br>';
-	else
-	{
-		if ($user->rights->projet->all->lire && ! $socid) print $langs->trans("ProjectsDesc").'<br><br>';
-		else print $langs->trans("ProjectsPublicDesc").'<br><br>';
-	}
+$var=true;
+$num = $db->num_rows($resql);
 
-	if ($search_all)
-	{
-        foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val);
-        print $langs->trans("FilterOnInto", $search_all) . join(', ',$fieldstosearchall);
-	}
+if ($num == 1 && ! empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $search_all)
+{
+    $obj = $db->fetch_object($resql);
+    $id = $obj->projectid;
+    header("Location: ".DOL_URL_ROOT.'/projet/card.php?id='.$id);
+    exit;
+}
 
-	$moreforfilter='';
-	
-	// Filter on categories
-    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('project',$search_categ,'search_categ',1);
-        $moreforfilter.='</div>';
-	}
-	
-	// If the user can view user other than himself
-	$moreforfilter.='<div class="divsearchfield">';
-	$moreforfilter.=$langs->trans('ProjectsWithThisUserAsContact'). ': ';
-	$includeonly='';
-	if (empty($user->rights->user->user->lire)) $includeonly=array($user->id);
-	$moreforfilter.=$form->select_dolusers($search_user, 'search_user', 1, '', 0, $includeonly, '', 0, 0, 0, '', 0, '', 'maxwidth300');
-	$moreforfilter.='</div>';
+llxHeader("",$title,"EN:Module_Projects|FR:Module_Projets|ES:M&oacute;dulo_Proyectos");
 
-	// If the user can view thirdparties other than his'
-	if ($user->rights->societe->client->voir || $socid)
-	{
-		$langs->load("commercial");
-		$moreforfilter.='<div class="divsearchfield">';
-		$moreforfilter.=$langs->trans('ThirdPartiesOfSaleRepresentative'). ': ';
-		$moreforfilter.=$formother->select_salesrepresentatives($search_sale, 'search_sale', $user, 0, 1, 'maxwidth300');
-		$moreforfilter.='</div>';
-	}
+$param='';
+if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage;
+if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit;
+if ($sday)              		$param.='&sday='.$day;
+if ($smonth)              		$param.='&smonth='.$smonth;
+if ($syear)               		$param.='&syear=' .$syear;
+if ($day)               		$param.='&day='.$day;
+if ($month)              		$param.='&month='.$month;
+if ($year)               		$param.='&year=' .$year;
+if ($socid)				        $param.='&socid='.$socid;
+if ($search_all != '') 			$param.='&search_all='.$search_all;
+if ($search_ref != '') 			$param.='&search_ref='.$search_ref;
+if ($search_label != '') 		$param.='&search_label='.$search_label;
+if ($search_societe != '') 		$param.='&search_societe='.$search_societe;
+if ($search_status >= 0) 		$param.='&search_status='.$search_status;
+if ((is_numeric($search_opp_status) && $search_opp_status >= 0) || in_array($search_opp_status, array('all','openedopp','none'))) 	$param.='&search_opp_status='.urlencode($search_opp_status);
+if ((is_numeric($search_opp_percent) && $search_opp_percent >= 0) || in_array($search_opp_percent, array('all','openedopp','none'))) 	$param.='&search_opp_percent='.urlencode($search_opp_percent);
+if ($search_public != '') 		$param.='&search_public='.$search_public;
+if ($search_user > 0)    		$param.='&search_user='.$search_user;
+if ($search_sale > 0)    		$param.='&search_sale='.$search_sale;
+if ($search_opp_amount != '')    $param.='&search_opp_amount='.$search_opp_amount;
+if ($search_budget_amount != '') $param.='&search_budget_amount='.$search_budget_amount;
+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);
+}
 
-	if (! empty($moreforfilter))
-	{
-		print '<div class="liste_titre liste_titre_bydiv centpercent">';
-		print $moreforfilter;
-    	$parameters=array();
-    	$reshook=$hookmanager->executeHooks('printFieldPreListTitle',$parameters);    // Note that $action and $object may have been modified by hook
-    	print $hookmanager->resPrint;
-    	print '</div>';
-    }
+$text=$langs->trans("Projects");
+if ($search_user == $user->id) $text=$langs->trans('MyProjects');
 
-	$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":"").'">';
-    		
-	print '<tr class="liste_titre">';
-	if (! empty($arrayfields['p.ref']['checked']))           print_liste_field_titre($arrayfields['p.ref']['label'],$_SERVER["PHP_SELF"],"p.ref","",$param,"",$sortfield,$sortorder);
-	if (! empty($arrayfields['p.title']['checked']))         print_liste_field_titre($arrayfields['p.title']['label'],$_SERVER["PHP_SELF"],"p.title","",$param,"",$sortfield,$sortorder);
-	if (! empty($arrayfields['s.nom']['checked']))           print_liste_field_titre($arrayfields['s.nom']['label'],$_SERVER["PHP_SELF"],"s.nom","",$param,"",$sortfield,$sortorder);
-	if (! empty($arrayfields['commercial']['checked']))      print_liste_field_titre($arrayfields['commercial']['label'],$_SERVER["PHP_SELF"],"","",$param,"",$sortfield,$sortorder);
-	if (! empty($arrayfields['p.dateo']['checked']))         print_liste_field_titre($arrayfields['p.dateo']['label'],$_SERVER["PHP_SELF"],"p.dateo","",$param,'align="center"',$sortfield,$sortorder);
-	if (! empty($arrayfields['p.datee']['checked']))         print_liste_field_titre($arrayfields['p.datee']['label'],$_SERVER["PHP_SELF"],"p.datee","",$param,'align="center"',$sortfield,$sortorder);
-	if (! empty($arrayfields['p.public']['checked']))        print_liste_field_titre($arrayfields['p.public']['label'],$_SERVER["PHP_SELF"],"p.public","",$param,"",$sortfield,$sortorder);
-    if (! empty($arrayfields['p.opp_amount']['checked']))    print_liste_field_titre($arrayfields['p.opp_amount']['label'],$_SERVER["PHP_SELF"],'p.opp_amount',"",$param,'align="right"',$sortfield,$sortorder);
-	if (! empty($arrayfields['p.fk_opp_status']['checked'])) print_liste_field_titre($arrayfields['p.fk_opp_status']['label'],$_SERVER["PHP_SELF"],'p.fk_opp_status',"",$param,'align="center"',$sortfield,$sortorder);
-    if (! empty($arrayfields['p.opp_percent']['checked']))   print_liste_field_titre($arrayfields['p.opp_percent']['label'],$_SERVER["PHP_SELF"],'p.opp_percent',"",$param,'align="right"',$sortfield,$sortorder);
-    if (! empty($arrayfields['p.budget_amount']['checked'])) print_liste_field_titre($arrayfields['p.budget_amount']['label'],$_SERVER["PHP_SELF"],'p.budget_amount',"",$param,'align="right"',$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 '<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 '<input type="hidden" name="type" value="'.$type.'">';
+print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
+
+print_barre_liste($text, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, "", $num, $nbtotalofrecords, 'title_project', 0, '', '', $limit);
+
+// Show description of content
+if ($search_user == $user->id) print $langs->trans("MyProjectsDesc").'<br><br>';
+else
+{
+	if ($user->rights->projet->all->lire && ! $socid) print $langs->trans("ProjectsDesc").'<br><br>';
+	else print $langs->trans("ProjectsPublicDesc").'<br><br>';
+}
+
+if ($search_all)
+{
+    foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val);
+    print $langs->trans("FilterOnInto", $search_all) . join(', ',$fieldstosearchall);
+}
+
+$moreforfilter='';
+
+// Filter on categories
+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('project',$search_categ,'search_categ',1);
+    $moreforfilter.='</div>';
+}
+
+// If the user can view user other than himself
+$moreforfilter.='<div class="divsearchfield">';
+$moreforfilter.=$langs->trans('ProjectsWithThisUserAsContact'). ': ';
+$includeonly='';
+if (empty($user->rights->user->user->lire)) $includeonly=array($user->id);
+$moreforfilter.=$form->select_dolusers($search_user, 'search_user', 1, '', 0, $includeonly, '', 0, 0, 0, '', 0, '', 'maxwidth300');
+$moreforfilter.='</div>';
+
+// If the user can view thirdparties other than his'
+if ($user->rights->societe->client->voir || $socid)
+{
+	$langs->load("commercial");
+	$moreforfilter.='<div class="divsearchfield">';
+	$moreforfilter.=$langs->trans('ThirdPartiesOfSaleRepresentative'). ': ';
+	$moreforfilter.=$formother->select_salesrepresentatives($search_sale, 'search_sale', $user, 0, 1, 'maxwidth300');
+	$moreforfilter.='</div>';
+}
+
+if (! empty($moreforfilter))
+{
+	print '<div class="liste_titre liste_titre_bydiv centpercent">';
+	print $moreforfilter;
+	$parameters=array();
+	$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($arrayfields['p.datec']['label'],$_SERVER["PHP_SELF"],"p.datec","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
-	if (! empty($arrayfields['p.tms']['checked']))    print_liste_field_titre($arrayfields['p.tms']['label'],$_SERVER["PHP_SELF"],"p.tms","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
-	if (! empty($arrayfields['p.fk_statut']['checked'])) print_liste_field_titre($arrayfields['p.fk_statut']['label'],$_SERVER["PHP_SELF"],"p.fk_statut","",$param,'align="right"',$sortfield,$sortorder);
-	print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"],"",'','','align="right"',$sortfield,$sortorder,'maxwidthsearch ');
-	print "</tr>\n";
-
-	print '<tr class="liste_titre">';
-	if (! empty($arrayfields['p.ref']['checked']))
-	{
-    	print '<td class="liste_titre">';
-    	print '<input type="text" class="flat" name="search_ref" value="'.$search_ref.'" size="6">';
-    	print '</td>';
-	}
-	if (! empty($arrayfields['p.title']['checked']))
-	{
-    	print '<td class="liste_titre">';
-    	print '<input type="text" class="flat" name="search_label" size="8" value="'.$search_label.'">';
-    	print '</td>';
-	}
-	if (! empty($arrayfields['s.nom']['checked']))
-	{
-    	print '<td class="liste_titre">';
-    	print '<input type="text" class="flat" name="search_societe" size="8" value="'.$search_societe.'">';
-    	print '</td>';
-	}
-	// Sale representative
-	if (! empty($arrayfields['commercial']['checked']))
-	{
-    	print '<td class="liste_titre">&nbsp;</td>';
-	}
-	// Start date
-	if (! empty($arrayfields['p.dateo']['checked']))
-	{
-		print '<td class="liste_titre center">';
-		if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print '<input class="flat" type="text" size="1" maxlength="2" name="sday" value="'.$sday.'">';
-		print '<input class="flat" type="text" size="1" maxlength="2" name="smonth" value="'.$smonth.'">';
-		$formother->select_year($syear?$syear:-1,'syear',1, 20, 5);
-		print '</td>';
-	}
-	// End date
-	if (! empty($arrayfields['p.datee']['checked']))
-	{
-    	print '<td class="liste_titre center">';
-    	if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print '<input class="flat" type="text" size="1" maxlength="2" name="day" value="'.$day.'">';
-    	print '<input class="flat" type="text" size="1" maxlength="2" name="month" value="'.$month.'">';
-    	$formother->select_year($year?$year:-1,'year',1, 20, 5);
-    	print '</td>';
-	}
-	if (! empty($arrayfields['p.public']['checked']))
-	{
-    	print '<td class="liste_titre">';
-    	$array=array(''=>'',0 => $langs->trans("PrivateProject"),1 => $langs->trans("SharedProject"));
-        print $form->selectarray('search_public',$array,$search_public);
-        print '</td>';
-	}
-	if (! empty($arrayfields['p.opp_amount']['checked']))
-	{
-		print '<td class="liste_titre nowrap right">';
-    	print '<input type="text" class="flat" name="search_opp_amount" size="3" value="'.$search_opp_amount.'">';
-		print '</td>';
-	}
-	if (! empty($arrayfields['p.fk_opp_status']['checked']))
-	{
-    	print '<td class="liste_titre nowrap center">';
-		print $formproject->selectOpportunityStatus('search_opp_status',$search_opp_status,1,1,1);
-	    print '</td>';
-    }
-	if (! empty($arrayfields['p.opp_percent']['checked']))
-	{
-		print '<td class="liste_titre nowrap right">';
-    	print '<input type="text" class="flat" name="search_opp_percent" size="2" value="'.$search_opp_percent.'">';
-		print '</td>';
-	}
-	if (! empty($arrayfields['p.budget_amount']['checked']))
-	{
-		print '<td class="liste_titre nowrap" align="right">';
-		print '<input type="text" class="flat" name="search_budget_amount" size="4" value="'.$search_budget_amount.'">';
-	    print '</td>';
-	}
-    // Extra fields
-    if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
+	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":"").'">';
+		
+print '<tr class="liste_titre">';
+if (! empty($arrayfields['p.ref']['checked']))           print_liste_field_titre($arrayfields['p.ref']['label'],$_SERVER["PHP_SELF"],"p.ref","",$param,"",$sortfield,$sortorder);
+if (! empty($arrayfields['p.title']['checked']))         print_liste_field_titre($arrayfields['p.title']['label'],$_SERVER["PHP_SELF"],"p.title","",$param,"",$sortfield,$sortorder);
+if (! empty($arrayfields['s.nom']['checked']))           print_liste_field_titre($arrayfields['s.nom']['label'],$_SERVER["PHP_SELF"],"s.nom","",$param,"",$sortfield,$sortorder);
+if (! empty($arrayfields['commercial']['checked']))      print_liste_field_titre($arrayfields['commercial']['label'],$_SERVER["PHP_SELF"],"","",$param,"",$sortfield,$sortorder);
+if (! empty($arrayfields['p.dateo']['checked']))         print_liste_field_titre($arrayfields['p.dateo']['label'],$_SERVER["PHP_SELF"],"p.dateo","",$param,'align="center"',$sortfield,$sortorder);
+if (! empty($arrayfields['p.datee']['checked']))         print_liste_field_titre($arrayfields['p.datee']['label'],$_SERVER["PHP_SELF"],"p.datee","",$param,'align="center"',$sortfield,$sortorder);
+if (! empty($arrayfields['p.public']['checked']))        print_liste_field_titre($arrayfields['p.public']['label'],$_SERVER["PHP_SELF"],"p.public","",$param,"",$sortfield,$sortorder);
+if (! empty($arrayfields['p.opp_amount']['checked']))    print_liste_field_titre($arrayfields['p.opp_amount']['label'],$_SERVER["PHP_SELF"],'p.opp_amount',"",$param,'align="right"',$sortfield,$sortorder);
+if (! empty($arrayfields['p.fk_opp_status']['checked'])) print_liste_field_titre($arrayfields['p.fk_opp_status']['label'],$_SERVER["PHP_SELF"],'p.fk_opp_status',"",$param,'align="center"',$sortfield,$sortorder);
+if (! empty($arrayfields['p.opp_percent']['checked']))   print_liste_field_titre($arrayfields['p.opp_percent']['label'],$_SERVER["PHP_SELF"],'p.opp_percent',"",$param,'align="right"',$sortfield,$sortorder);
+if (! empty($arrayfields['p.budget_amount']['checked'])) print_liste_field_titre($arrayfields['p.budget_amount']['label'],$_SERVER["PHP_SELF"],'p.budget_amount',"",$param,'align="right"',$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($arrayfields['p.datec']['label'],$_SERVER["PHP_SELF"],"p.datec","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
+if (! empty($arrayfields['p.tms']['checked']))    print_liste_field_titre($arrayfields['p.tms']['label'],$_SERVER["PHP_SELF"],"p.tms","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
+if (! empty($arrayfields['p.fk_statut']['checked'])) print_liste_field_titre($arrayfields['p.fk_statut']['label'],$_SERVER["PHP_SELF"],"p.fk_statut","",$param,'align="right"',$sortfield,$sortorder);
+print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"],"",'','','align="right"',$sortfield,$sortorder,'maxwidthsearch ');
+print "</tr>\n";
+
+print '<tr class="liste_titre">';
+if (! empty($arrayfields['p.ref']['checked']))
+{
+	print '<td class="liste_titre">';
+	print '<input type="text" class="flat" name="search_ref" value="'.$search_ref.'" size="6">';
+	print '</td>';
+}
+if (! empty($arrayfields['p.title']['checked']))
+{
+	print '<td class="liste_titre">';
+	print '<input type="text" class="flat" name="search_label" size="8" value="'.$search_label.'">';
+	print '</td>';
+}
+if (! empty($arrayfields['s.nom']['checked']))
+{
+	print '<td class="liste_titre">';
+	print '<input type="text" class="flat" name="search_societe" size="8" value="'.$search_societe.'">';
+	print '</td>';
+}
+// Sale representative
+if (! empty($arrayfields['commercial']['checked']))
+{
+	print '<td class="liste_titre">&nbsp;</td>';
+}
+// Start date
+if (! empty($arrayfields['p.dateo']['checked']))
+{
+	print '<td class="liste_titre center">';
+	if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print '<input class="flat" type="text" size="1" maxlength="2" name="sday" value="'.$sday.'">';
+	print '<input class="flat" type="text" size="1" maxlength="2" name="smonth" value="'.$smonth.'">';
+	$formother->select_year($syear?$syear:-1,'syear',1, 20, 5);
+	print '</td>';
+}
+// End date
+if (! empty($arrayfields['p.datee']['checked']))
+{
+	print '<td class="liste_titre center">';
+	if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print '<input class="flat" type="text" size="1" maxlength="2" name="day" value="'.$day.'">';
+	print '<input class="flat" type="text" size="1" maxlength="2" name="month" value="'.$month.'">';
+	$formother->select_year($year?$year:-1,'year',1, 20, 5);
+	print '</td>';
+}
+if (! empty($arrayfields['p.public']['checked']))
+{
+	print '<td class="liste_titre">';
+	$array=array(''=>'',0 => $langs->trans("PrivateProject"),1 => $langs->trans("SharedProject"));
+    print $form->selectarray('search_public',$array,$search_public);
+    print '</td>';
+}
+if (! empty($arrayfields['p.opp_amount']['checked']))
+{
+	print '<td class="liste_titre nowrap right">';
+	print '<input type="text" class="flat" name="search_opp_amount" size="3" value="'.$search_opp_amount.'">';
+	print '</td>';
+}
+if (! empty($arrayfields['p.fk_opp_status']['checked']))
+{
+	print '<td class="liste_titre nowrap center">';
+	print $formproject->selectOpportunityStatus('search_opp_status',$search_opp_status,1,1,1);
+    print '</td>';
+}
+if (! empty($arrayfields['p.opp_percent']['checked']))
+{
+	print '<td class="liste_titre nowrap right">';
+	print '<input type="text" class="flat" name="search_opp_percent" size="2" value="'.$search_opp_percent.'">';
+	print '</td>';
+}
+if (! empty($arrayfields['p.budget_amount']['checked']))
+{
+	print '<td class="liste_titre nowrap" align="right">';
+	print '<input type="text" class="flat" name="search_budget_amount" size="4" value="'.$search_budget_amount.'">';
+    print '</td>';
+}
+// Extra fields
+if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
+{
+    foreach($extrafields->attribute_label as $key => $val)
     {
-        foreach($extrafields->attribute_label as $key => $val)
+        if (! empty($arrayfields["ef.".$key]['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')))
-				{
-				    $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);
+            $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['p.datec']['checked']))
-    {
-        // Date creation
-        print '<td class="liste_titre">';
-        print '</td>';
-    }
-    if (! empty($arrayfields['p.tms']['checked']))
-    {
-        // Date modification
-        print '<td class="liste_titre">';
-        print '</td>';
-    }
-    if (! empty($arrayfields['p.fk_statut']['checked']))
-    {
-    	print '<td class="liste_titre nowrap" align="right">';
-        $arrayofstatus = array();
-        foreach($projectstatic->statuts_short as $key => $val) $arrayofstatus[$key]=$langs->trans($val);
-        $arrayofstatus['99']=$langs->trans("NotClosed").' ('.$langs->trans('Draft').'+'.$langs->trans('Opened').')';
-    	print $form->selectarray('search_status', $arrayofstatus, $search_status, 1, 0, 0, '', 0, 0, 0, '', 'maxwidth100');
-        print '</td>';
     }
-    // Action column
-    print '<td class="liste_titre" align="right">';
-    $searchpitco=$form->showFilterAndCheckAddButtons(0);
-    print $searchpitco;
+}
+// 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['p.datec']['checked']))
+{
+    // Date creation
+    print '<td class="liste_titre">';
     print '</td>';
+}
+if (! empty($arrayfields['p.tms']['checked']))
+{
+    // Date modification
+    print '<td class="liste_titre">';
+    print '</td>';
+}
+if (! empty($arrayfields['p.fk_statut']['checked']))
+{
+	print '<td class="liste_titre nowrap" align="right">';
+    $arrayofstatus = array();
+    foreach($projectstatic->statuts_short as $key => $val) $arrayofstatus[$key]=$langs->trans($val);
+    $arrayofstatus['99']=$langs->trans("NotClosed").' ('.$langs->trans('Draft').'+'.$langs->trans('Opened').')';
+	print $form->selectarray('search_status', $arrayofstatus, $search_status, 1, 0, 0, '', 0, 0, 0, '', 'maxwidth100');
+    print '</td>';
+}
+// Action column
+print '<td class="liste_titre" align="right">';
+$searchpitco=$form->showFilterAndCheckAddButtons(0);
+print $searchpitco;
+print '</td>';
+
+print '</tr>'."\n";
+
+$i=0;
+$var=true;
+$totalarray=array();
+while ($i < min($num,$limit))
+{
+	$obj = $db->fetch_object($resql);
+
+	$projectstatic->id = $obj->projectid;
+	$projectstatic->user_author_id = $obj->fk_user_creat;
+	$projectstatic->public = $obj->public;
+	$projectstatic->ref = $obj->ref;
+	$projectstatic->datee = $obj->date_end;
+	$projectstatic->statut = $obj->fk_statut;
+	$projectstatic->opp_status = $obj->fk_opp_status;
+	 
+	$userAccess = $projectstatic->restrictedProjectArea($user);    // why this ?
+	if ($userAccess >= 0)
+	{
+		$var=!$var;
+		print "<tr ".$bc[$var].">";
 
-    print '</tr>'."\n";
-
-    $i=0;
-	$var=true;
-	$totalarray=array();
-    while ($i < min($num,$limit))
-    {
-    	$obj = $db->fetch_object($resql);
-
-    	$projectstatic->id = $obj->projectid;
-    	$projectstatic->user_author_id = $obj->fk_user_creat;
-    	$projectstatic->public = $obj->public;
-    	$projectstatic->ref = $obj->ref;
-    	$projectstatic->datee = $obj->date_end;
-    	$projectstatic->statut = $obj->fk_statut;
-    	$projectstatic->opp_status = $obj->fk_opp_status;
-    	 
-    	$userAccess = $projectstatic->restrictedProjectArea($user);    // why this ?
-    	if ($userAccess >= 0)
+		// Project url
+    	if (! empty($arrayfields['p.ref']['checked']))
     	{
-    		$var=!$var;
-    		print "<tr ".$bc[$var].">";
-
-    		// Project url
-        	if (! empty($arrayfields['p.ref']['checked']))
-        	{
-        		print '<td class="nowrap">';
-        		print $projectstatic->getNomUrl(1);
-        		if ($projectstatic->hasDelay()) print img_warning($langs->trans('Late'));
-        		print '</td>';
-    		    if (! $i) $totalarray['nbfield']++;
-        	}
-    		// Title
-        	if (! empty($arrayfields['p.title']['checked']))
-        	{
-            	print '<td>';
-        		print dol_trunc($obj->title,80);
-        		print '</td>';
-    		    if (! $i) $totalarray['nbfield']++;
-        	}
-    		// Company
-        	if (! empty($arrayfields['s.nom']['checked']))
-        	{
-            	print '<td>';
-        		if ($obj->socid)
-        		{
-        			$socstatic->id=$obj->socid;
-        			$socstatic->name=$obj->name;
-        			print $socstatic->getNomUrl(1);
-        		}
-        		else
-        		{
-        			print '&nbsp;';
-        		}
-        		print '</td>';
-    		    if (! $i) $totalarray['nbfield']++;
-        	}
-    		// Sales Representatives
-        	if (! empty($arrayfields['commercial']['checked']))
-        	{
-            	print '<td>';
-        		if ($obj->socid)
-        		{
-        			$socstatic->id=$obj->socid;
-        			$socstatic->name=$obj->name;
-        		    $listsalesrepresentatives=$socstatic->getSalesRepresentatives($user);
-        			$nbofsalesrepresentative=count($listsalesrepresentatives);
-        			if ($nbofsalesrepresentative > 3)   // We print only number
-        			{
-        				print '<a href="'.DOL_URL_ROOT.'/societe/commerciaux.php?socid='.$socstatic->id.'">';
-        				print $nbofsalesrepresentative;
-        				print '</a>';
-        			}
-        			else if ($nbofsalesrepresentative > 0)
-        			{
-        				$userstatic=new User($db);
-        				$j=0;
-        				foreach($listsalesrepresentatives as $val)
-        				{
-        					$userstatic->id=$val['id'];
-        					$userstatic->lastname=$val['lastname'];
-        					$userstatic->firstname=$val['firstname'];
-        					$userstatic->email=$val['email'];
-        					$userstatic->statut=$val['statut'];
-        					$userstatic->entity=$val['entity'];
-        					print $userstatic->getNomUrl(1);
-        					$j++;
-        					if ($j < $nbofsalesrepresentative) print ', ';
-        				}
-        			}
-        			//else print $langs->trans("NoSalesRepresentativeAffected");
-        		}
-        		else
-        		{
-        			print '&nbsp';
-        		}
-        		print '</td>';
-    		    if (! $i) $totalarray['nbfield']++;
-        	}
-    		// Date start
-        	if (! empty($arrayfields['p.dateo']['checked']))
-        	{
-				print '<td class="center">';
-	    		print dol_print_date($db->jdate($obj->date_start),'day');
-	    		print '</td>';
-    		    if (! $i) $totalarray['nbfield']++;
-        	}
-    		// Date end
-        	if (! empty($arrayfields['p.datee']['checked']))
-        	{
-    			print '<td class="center">';
-        		print dol_print_date($db->jdate($obj->date_end),'day');
-        		print '</td>';
-    		    if (! $i) $totalarray['nbfield']++;
-        	}
-    		// Visibility
-        	if (! empty($arrayfields['p.public']['checked']))
-        	{
-        		print '<td align="left">';
-        		if ($obj->public) print $langs->trans('SharedProject');
-        		else print $langs->trans('PrivateProject');
-        		print '</td>';
-    		    if (! $i) $totalarray['nbfield']++;
-        	}
-        	// Amount
-        	if (! empty($arrayfields['p.opp_amount']['checked']))
-        	{
-    			print '<td align="right">';
-    			if ($obj->opp_status_code) 
-    			{
-    			    print price($obj->opp_amount, 1, '', 1, -1, -1, '');
-    			    $totalarray['totalopp'] += $obj->opp_amount;
-    			}
-    			print '</td>';
-    			if (! $i) $totalarray['nbfield']++;
-    			if (! $i) $totalarray['totaloppfield']=$totalarray['nbfield'];
-        	}
-        	if (! empty($arrayfields['p.fk_opp_status']['checked']))
-        	{
-                print '<td align="middle">';
-    			if ($obj->opp_status_code) print $langs->trans("OppStatusShort".$obj->opp_status_code);
-    			print '</td>';
-    		    if (! $i) $totalarray['nbfield']++;
-        	}
-    	    if (! empty($arrayfields['p.opp_percent']['checked']))
-        	{
-    			print '<td align="right">';
-    			if ($obj->opp_percent) print price($obj->opp_percent, 1, '', 1, 0).'%';
-    			print '</td>';
-    		    if (! $i) $totalarray['nbfield']++;
-        	}
-    	    if (! empty($arrayfields['p.budget_amount']['checked']))
-        	{
-    			print '<td align="right">';
-    			if ($obj->budget_amount != '') 
-    			{
-    			    print price($obj->budget_amount, 1, '', 1, -1, -1);
-    			    $totalarray['totalbudget'] += $obj->budget_amount;
-    			}
-    			print '</td>';
-    			if (! $i) $totalarray['nbfield']++;
-    			if (! $i) $totalarray['totalbudgetfield']=$totalarray['nbfield'];
-        	}
-    		// Extra fields
-    		if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
+    		print '<td class="nowrap">';
+    		print $projectstatic->getNomUrl(1);
+    		if ($projectstatic->hasDelay()) print img_warning($langs->trans('Late'));
+    		print '</td>';
+		    if (! $i) $totalarray['nbfield']++;
+    	}
+		// Title
+    	if (! empty($arrayfields['p.title']['checked']))
+    	{
+        	print '<td>';
+    		print dol_trunc($obj->title,80);
+    		print '</td>';
+		    if (! $i) $totalarray['nbfield']++;
+    	}
+		// Company
+    	if (! empty($arrayfields['s.nom']['checked']))
+    	{
+        	print '<td>';
+    		if ($obj->socid)
     		{
-    		    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']++;
+    			$socstatic->id=$obj->socid;
+    			$socstatic->name=$obj->name;
+    			print $socstatic->getNomUrl(1);
     		}
-    		// 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']))
+    		else
     		{
-    		    print '<td align="center">';
-    		    print dol_print_date($db->jdate($obj->date_creation), 'dayhour');
-    		    print '</td>';
-    			if (! $i) $totalarray['nbfield']++;
+    			print '&nbsp;';
     		}
-    		// Date modification
-    		if (! empty($arrayfields['p.tms']['checked']))
+    		print '</td>';
+		    if (! $i) $totalarray['nbfield']++;
+    	}
+		// Sales Representatives
+    	if (! empty($arrayfields['commercial']['checked']))
+    	{
+        	print '<td>';
+    		if ($obj->socid)
     		{
-    		    print '<td align="center">';
-    		    print dol_print_date($db->jdate($obj->date_update), 'dayhour');
-    		    print '</td>';
-    			if (! $i) $totalarray['nbfield']++;
+    			$socstatic->id=$obj->socid;
+    			$socstatic->name=$obj->name;
+    		    $listsalesrepresentatives=$socstatic->getSalesRepresentatives($user);
+    			$nbofsalesrepresentative=count($listsalesrepresentatives);
+    			if ($nbofsalesrepresentative > 3)   // We print only number
+    			{
+    				print '<a href="'.DOL_URL_ROOT.'/societe/commerciaux.php?socid='.$socstatic->id.'">';
+    				print $nbofsalesrepresentative;
+    				print '</a>';
+    			}
+    			else if ($nbofsalesrepresentative > 0)
+    			{
+    				$userstatic=new User($db);
+    				$j=0;
+    				foreach($listsalesrepresentatives as $val)
+    				{
+    					$userstatic->id=$val['id'];
+    					$userstatic->lastname=$val['lastname'];
+    					$userstatic->firstname=$val['firstname'];
+    					$userstatic->email=$val['email'];
+    					$userstatic->statut=$val['statut'];
+    					$userstatic->entity=$val['entity'];
+    					print $userstatic->getNomUrl(1);
+    					$j++;
+    					if ($j < $nbofsalesrepresentative) print ', ';
+    				}
+    			}
+    			//else print $langs->trans("NoSalesRepresentativeAffected");
     		}
-    		// Status
-    		if (! empty($arrayfields['p.fk_statut']['checked']))
+    		else
     		{
-        		$projectstatic->statut = $obj->fk_statut;
-        		print '<td align="right">'.$projectstatic->getLibStatut(5).'</td>';
-    			if (! $i) $totalarray['nbfield']++;
+    			print '&nbsp';
     		}
-            // 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>\n";
-
+    		print '</td>';
+		    if (! $i) $totalarray['nbfield']++;
+    	}
+		// Date start
+    	if (! empty($arrayfields['p.dateo']['checked']))
+    	{
+			print '<td class="center">';
+    		print dol_print_date($db->jdate($obj->date_start),'day');
+    		print '</td>';
+		    if (! $i) $totalarray['nbfield']++;
+    	}
+		// Date end
+    	if (! empty($arrayfields['p.datee']['checked']))
+    	{
+			print '<td class="center">';
+    		print dol_print_date($db->jdate($obj->date_end),'day');
+    		print '</td>';
+		    if (! $i) $totalarray['nbfield']++;
+    	}
+		// Visibility
+    	if (! empty($arrayfields['p.public']['checked']))
+    	{
+    		print '<td align="left">';
+    		if ($obj->public) print $langs->trans('SharedProject');
+    		else print $langs->trans('PrivateProject');
+    		print '</td>';
+		    if (! $i) $totalarray['nbfield']++;
     	}
+    	// Amount
+    	if (! empty($arrayfields['p.opp_amount']['checked']))
+    	{
+			print '<td align="right">';
+			if ($obj->opp_status_code) 
+			{
+			    print price($obj->opp_amount, 1, '', 1, -1, -1, '');
+			    $totalarray['totalopp'] += $obj->opp_amount;
+			}
+			print '</td>';
+			if (! $i) $totalarray['nbfield']++;
+			if (! $i) $totalarray['totaloppfield']=$totalarray['nbfield'];
+    	}
+    	if (! empty($arrayfields['p.fk_opp_status']['checked']))
+    	{
+            print '<td align="middle">';
+			if ($obj->opp_status_code) print $langs->trans("OppStatusShort".$obj->opp_status_code);
+			print '</td>';
+		    if (! $i) $totalarray['nbfield']++;
+    	}
+	    if (! empty($arrayfields['p.opp_percent']['checked']))
+    	{
+			print '<td align="right">';
+			if ($obj->opp_percent) print price($obj->opp_percent, 1, '', 1, 0).'%';
+			print '</td>';
+		    if (! $i) $totalarray['nbfield']++;
+    	}
+	    if (! empty($arrayfields['p.budget_amount']['checked']))
+    	{
+			print '<td align="right">';
+			if ($obj->budget_amount != '') 
+			{
+			    print price($obj->budget_amount, 1, '', 1, -1, -1);
+			    $totalarray['totalbudget'] += $obj->budget_amount;
+			}
+			print '</td>';
+			if (! $i) $totalarray['nbfield']++;
+			if (! $i) $totalarray['totalbudgetfield']=$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['p.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['p.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['p.fk_statut']['checked']))
+		{
+    		$projectstatic->statut = $obj->fk_statut;
+    		print '<td align="right">'.$projectstatic->getLibStatut(5).'</td>';
+			if (! $i) $totalarray['nbfield']++;
+		}
+        // 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>\n";
 
-    	$i++;
+	}
 
-    }
-    
-    // Show total line
-    if (isset($totalarray['totaloppfield']) || isset($totalarray['totalbudgetfield']))
+	$i++;
+
+}
+
+// Show total line
+if (isset($totalarray['totaloppfield']) || isset($totalarray['totalbudgetfield']))
+{
+    print '<tr class="liste_total">';
+    $i=0;
+    while ($i < $totalarray['nbfield'])
     {
-        print '<tr class="liste_total">';
-        $i=0;
-        while ($i < $totalarray['nbfield'])
+        $i++;
+        if ($i == 1)
         {
-            $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['totaloppfield'] == $i) print '<td align="right">'.price($totalarray['totalopp']).'</td>';
-            elseif ($totalarray['totalbudgetfield'] == $i) print '<td align="right">'.price($totalarray['totalbudget']).'</td>';
-            else print '<td></td>';
+            if ($num < $limit) print '<td align="left">'.$langs->trans("Total").'</td>';
+            else print '<td align="left">'.$langs->trans("Totalforthispage").'</td>';
         }
-        print '</tr>';
+        elseif ($totalarray['totaloppfield'] == $i) print '<td align="right">'.price($totalarray['totalopp']).'</td>';
+        elseif ($totalarray['totalbudgetfield'] == $i) print '<td align="right">'.price($totalarray['totalbudget']).'</td>';
+        else print '<td></td>';
     }
-    
-    $db->free($resql);
+    print '</tr>';
+}
 
-	$parameters=array('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";
-	print "</form>\n";
-}
-else
-{
-	dol_print_error($db);
-}
+$parameters=array('sql' => $sql);
+$reshook=$hookmanager->executeHooks('printFieldListFooter',$parameters);    // Note that $action and $object may have been modified by hook
+print $hookmanager->resPrint;
 
+print "</table>\n";
+print "</form>\n";
 
 
 llxFooter();
diff --git a/htdocs/projet/tasks/list.php b/htdocs/projet/tasks/list.php
index f5b422a7ce2731a05e024ad2e091d94661261fa8..1179ca7546e2c8b4d0f37a9ebc199a75b7afc808 100644
--- a/htdocs/projet/tasks/list.php
+++ b/htdocs/projet/tasks/list.php
@@ -129,29 +129,41 @@ if (is_array($extrafields->attribute_label) && count($extrafields->attribute_lab
  * Actions
  */
 
-include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
-
-// Purge criteria
-if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter.x") || GETPOST("button_removefilter")) // Both test are required to be compatible with all browsers
-{
-    $search_all="";
-    $search_project="";
-    $search_projectstatus=-1;
-    $search_project_ref="";
-    $search_project_title="";
-    $search_task_ref="";
-    $search_task_label="";
-    $search_task_description="";
-    $search_task_user=-1;
-    $search_project_user=-1;
-    $sday='';
-    $smonth='';
-    $syear='';
-    $day='';
-    $month='';
-    $year='';
-    $search_array_options=array();
+if (GETPOST('cancel')) { $action='list'; $massaction=''; }
+if (! GETPOST('confirmmassaction') && $massaction != 'presend' && $massaction != 'confirm_presend' && $massaction != 'confirm_createbills') { $massaction=''; }
+
+$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');
+
+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")) // Both test are required to be compatible with all browsers
+    {
+        $search_all="";
+        $search_project="";
+        $search_projectstatus=-1;
+        $search_project_ref="";
+        $search_project_title="";
+        $search_task_ref="";
+        $search_task_label="";
+        $search_task_description="";
+        $search_task_user=-1;
+        $search_project_user=-1;
+        $sday='';
+        $smonth='';
+        $syear='';
+        $day='';
+        $month='';
+        $year='';
+        $search_array_options=array();
+    }
 }
+
 if (empty($search_projectstatus) && $search_projectstatus == '') $search_projectstatus=1;
 
 
@@ -174,8 +186,6 @@ if ($search_task_user > 0) $tuser->fetch($search_task_user);
 $title=$langs->trans("Activities");
 if ($search_task_user == $user->id) $title=$langs->trans("MyActivities");
 
-llxHeader("",$title,"Projet");
-
 if ($id)
 {
 	$projectstatic->fetch($id);
@@ -311,506 +321,513 @@ $sql.= $db->plimit($limit + 1,$offset);
 dol_syslog("list allowed project", LOG_DEBUG);
 //print $sql;
 $resql = $db->query($sql);
-if ($resql)
+if (! $resql)
 {
-    $var=true;
-    $num = $db->num_rows($resql);
-
-    $param='';
-    if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage;
-    if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit;
-    if ($sday)              		$param.='&sday='.$day;
-	if ($smonth)              		$param.='&smonth='.$smonth;
-	if ($syear)               		$param.='&syear=' .$syear;
-	if ($day)               		$param.='&day='.$day;
-	if ($month)              		$param.='&month='.$month;
-	if ($year)               		$param.='&year=' .$year;
-    if ($socid)				        $param.='&socid='.$socid;
-    if ($search_all != '') 			$param.='&search_all='.$search_all;
-    if ($search_project_ref != '') 			$param.='&search_project_ref='.$search_project_ref;
-    if ($search_project_title != '') 		$param.='&search_project_title='.$search_project_title;
-    if ($search_ref != '') 			$param.='&search_ref='.$search_ref;
-    if ($search_label != '') 		$param.='&search_label='.$search_label;
-    if ($search_societe != '') 		$param.='&search_societe='.$search_societe;
-    if ($search_projectstatus != '') $param.='&search_projectstatus='.$search_projectstatus;
-    if ((is_numeric($search_opp_status) && $search_opp_status >= 0) || in_array($search_opp_status, array('all','none'))) 	$param.='&search_opp_status='.urlencode($search_opp_status);
-    if ($search_public != '') 		$param.='&search_public='.$search_public;
-    if ($search_project_user > 0)   $param.='&search_project_user='.$search_project_user;
-    if ($search_task_user > 0)    	$param.='&search_task_user='.$search_task_user;
-    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" 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="action" value="list">';
-	print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
-	print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
-	print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
-    print '<input type="hidden" name="type" value="'.$type.'">';
-    
-    print_barre_liste($title, $page, $_SERVER["PHP_SELF"], "", $sortfield, $sortorder, "", $num, $nbtotalofrecords, 'title_project', 0, '', '', $limit);
-    
-    // Show description of content
-    if ($search_task_user == $user->id) print $langs->trans("MyTasksDesc").'<br><br>';
-    else
-    {
-        if ($user->rights->projet->all->lire && ! $socid) print $langs->trans("TasksOnProjectsDesc").'<br><br>';
-        else print $langs->trans("TasksOnProjectsPublicDesc").'<br><br>';
-    }
-    
-    if ($search_all)
-    {
-        foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val);
-        print $langs->trans("FilterOnInto", $search_all) . join(', ',$fieldstosearchall);
-    }
-    
-    // If the user can view users
-    $moreforfilter.='<div class="divsearchfield">';
-    $moreforfilter.=$langs->trans('ProjectsWithThisUserAsContact'). ' ';
-    $includeonly='';
-    if (empty($user->rights->user->user->lire)) $includeonly=array($user->id);
-    $moreforfilter.=$form->select_dolusers($search_project_user, 'search_project_user', 1, '', 0, $includeonly, '', 0, 0, 0, '', 0, '', 'maxwidth300');
-    $moreforfilter.='</div>';
-    
-    // If the user can view users
-    $moreforfilter.='<div class="divsearchfield">';
-    $moreforfilter.=$langs->trans('TasksWithThisUserAsContact'). ': ';
-    $includeonly='';
-    if (empty($user->rights->user->user->lire)) $includeonly=array($user->id);
-    $moreforfilter.=$form->select_dolusers($search_task_user, 'search_task_user', 1, '', 0, $includeonly, '', 0, 0, 0, '', 0, '', 'maxwidth300');
-    $moreforfilter.='</div>';
-    
-    if (! empty($moreforfilter))
-    {
-    	print '<div class="liste_titre liste_titre_bydiv centpercent">';
-    	print $moreforfilter;
-    	$parameters=array();
-    	$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
+    dol_print_error($db);
+    exit;
+}
+
+$var=true;
+$num = $db->num_rows($resql);
+
+if ($num == 1 && ! empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $search_all)
+{
+    $obj = $db->fetch_object($resql);
+    $id = $obj->id;
+    header("Location: ".DOL_URL_ROOT.'/projet/tasks/task.php?id='.$id.'&withprojet=1');
+    exit;
+}
+
+llxHeader("",$title,"Projet");
+
+$param='';
+if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage;
+if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit;
+if ($sday)              		$param.='&sday='.$day;
+if ($smonth)              		$param.='&smonth='.$smonth;
+if ($syear)               		$param.='&syear=' .$syear;
+if ($day)               		$param.='&day='.$day;
+if ($month)              		$param.='&month='.$month;
+if ($year)               		$param.='&year=' .$year;
+if ($socid)				        $param.='&socid='.$socid;
+if ($search_all != '') 			$param.='&search_all='.$search_all;
+if ($search_project_ref != '') 			$param.='&search_project_ref='.$search_project_ref;
+if ($search_project_title != '') 		$param.='&search_project_title='.$search_project_title;
+if ($search_ref != '') 			$param.='&search_ref='.$search_ref;
+if ($search_label != '') 		$param.='&search_label='.$search_label;
+if ($search_societe != '') 		$param.='&search_societe='.$search_societe;
+if ($search_projectstatus != '') $param.='&search_projectstatus='.$search_projectstatus;
+if ((is_numeric($search_opp_status) && $search_opp_status >= 0) || in_array($search_opp_status, array('all','none'))) 	$param.='&search_opp_status='.urlencode($search_opp_status);
+if ($search_public != '') 		$param.='&search_public='.$search_public;
+if ($search_project_user > 0)   $param.='&search_project_user='.$search_project_user;
+if ($search_task_user > 0)    	$param.='&search_task_user='.$search_task_user;
+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 '<table class="liste '.($moreforfilter?"listwithfilterbefore":"").'" id="tablelines3">';
-
-    print '<tr class="liste_titre">';
-    if (! empty($arrayfields['t.ref']['checked']))           print_liste_field_titre($arrayfields['t.ref']['label'],$_SERVER["PHP_SELF"],"t.ref","",$param,"",$sortfield,$sortorder);
-    if (! empty($arrayfields['t.label']['checked']))         print_liste_field_titre($arrayfields['t.label']['label'],$_SERVER["PHP_SELF"],"t.label","",$param,"",$sortfield,$sortorder);
-    if (! empty($arrayfields['t.dateo']['checked']))         print_liste_field_titre($arrayfields['t.dateo']['label'],$_SERVER["PHP_SELF"],"t.dateo","",$param,'align="center"',$sortfield,$sortorder);
-    if (! empty($arrayfields['t.datee']['checked']))         print_liste_field_titre($arrayfields['t.datee']['label'],$_SERVER["PHP_SELF"],"t.datee","",$param,'align="center"',$sortfield,$sortorder);
-    if (! empty($arrayfields['p.ref']['checked']))           print_liste_field_titre($arrayfields['p.ref']['label'],$_SERVER["PHP_SELF"],"p.ref","",$param,"",$sortfield,$sortorder);
-    if (! empty($arrayfields['p.title']['checked']))         print_liste_field_titre($arrayfields['p.title']['label'],$_SERVER["PHP_SELF"],"p.title","",$param,"",$sortfield,$sortorder);
-	if (! empty($arrayfields['s.nom']['checked']))           print_liste_field_titre($arrayfields['s.nom']['label'],$_SERVER["PHP_SELF"],"s.nom","",$param,"",$sortfield,$sortorder);
-    if (! empty($arrayfields['p.fk_statut']['checked']))     print_liste_field_titre($arrayfields['p.fk_statut']['label'],$_SERVER["PHP_SELF"],"p.fk_statut","",$param,"",$sortfield,$sortorder);
-    if (! empty($arrayfields['t.planned_workload']['checked']))         print_liste_field_titre($arrayfields['t.planned_workload']['label'],$_SERVER["PHP_SELF"],"t.planned_workload","",$param,'align="center"',$sortfield,$sortorder);
-    if (! empty($arrayfields['t.duration_effective']['checked']))       print_liste_field_titre($arrayfields['t.duration_effective']['label'],$_SERVER["PHP_SELF"],"t.duration_effective","",$param,'align="center"',$sortfield,$sortorder);
-    if (! empty($arrayfields['t.progress_calculated']['checked']))      print_liste_field_titre($arrayfields['t.progress_calculated']['label'],$_SERVER["PHP_SELF"],"","",$param,'align="center"');
-    if (! empty($arrayfields['t.progress']['checked']))      print_liste_field_titre($arrayfields['t.progress']['label'],$_SERVER["PHP_SELF"],"t.progress","",$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 '<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="action" value="list">';
+print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
+print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
+print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
+print '<input type="hidden" name="type" value="'.$type.'">';
+
+print_barre_liste($title, $page, $_SERVER["PHP_SELF"], "", $sortfield, $sortorder, "", $num, $nbtotalofrecords, 'title_project', 0, '', '', $limit);
+
+// Show description of content
+if ($search_task_user == $user->id) print $langs->trans("MyTasksDesc").'<br><br>';
+else
+{
+    if ($user->rights->projet->all->lire && ! $socid) print $langs->trans("TasksOnProjectsDesc").'<br><br>';
+    else print $langs->trans("TasksOnProjectsPublicDesc").'<br><br>';
+}
+
+if ($search_all)
+{
+    foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val);
+    print $langs->trans("FilterOnInto", $search_all) . join(', ',$fieldstosearchall);
+}
+
+// If the user can view users
+$moreforfilter.='<div class="divsearchfield">';
+$moreforfilter.=$langs->trans('ProjectsWithThisUserAsContact'). ' ';
+$includeonly='';
+if (empty($user->rights->user->user->lire)) $includeonly=array($user->id);
+$moreforfilter.=$form->select_dolusers($search_project_user, 'search_project_user', 1, '', 0, $includeonly, '', 0, 0, 0, '', 0, '', 'maxwidth300');
+$moreforfilter.='</div>';
+
+// If the user can view users
+$moreforfilter.='<div class="divsearchfield">';
+$moreforfilter.=$langs->trans('TasksWithThisUserAsContact'). ': ';
+$includeonly='';
+if (empty($user->rights->user->user->lire)) $includeonly=array($user->id);
+$moreforfilter.=$form->select_dolusers($search_task_user, 'search_task_user', 1, '', 0, $includeonly, '', 0, 0, 0, '', 0, '', 'maxwidth300');
+$moreforfilter.='</div>';
+
+if (! empty($moreforfilter))
+{
+	print '<div class="liste_titre liste_titre_bydiv centpercent">';
+	print $moreforfilter;
+	$parameters=array();
+	$reshook=$hookmanager->executeHooks('printFieldPreListTitle',$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);
-	print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"],"",'','','align="right"',$sortfield,$sortorder,'maxwidthsearch ');
-    print "</tr>\n";
+	print '</div>';
+}
 
-    print '<tr class="liste_titre">';
-    if (! empty($arrayfields['t.ref']['checked']))
-    {
-        print '<td class="liste_titre">';
-        print '<input type="text" class="flat" name="search_task_ref" value="'.dol_escape_htmltag($search_task_ref).'" size="4">';
-        print '</td>';
-    }
-    if (! empty($arrayfields['t.label']['checked']))
-    {
-        print '<td class="liste_titre">';
-        print '<input type="text" class="flat" name="search_task_label" value="'.dol_escape_htmltag($search_task_label).'" size="8">';
-        print '</td>';
-    }
-    // Start date
-    if (! empty($arrayfields['t.dateo']['checked']))
-    {
-        print '<td class="liste_titre center">';
-        if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print '<input class="flat" type="text" size="1" maxlength="2" name="sday" value="'.$sday.'">';
-        print '<input class="flat" type="text" size="1" maxlength="2" name="smonth" value="'.$smonth.'">';
-        $formother->select_year($syear?$syear:-1,'syear',1, 20, 5);
-        print '</td>';
-    }
-    // End date
-    if (! empty($arrayfields['t.datee']['checked']))
-    {
-        print '<td class="liste_titre center">';
-        if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print '<input class="flat" type="text" size="1" maxlength="2" name="day" value="'.$day.'">';
-        print '<input class="flat" type="text" size="1" maxlength="2" name="month" value="'.$month.'">';
-        $formother->select_year($year?$year:-1,'year',1, 20, 5);
-        print '</td>';
-    }
-    if (! empty($arrayfields['p.ref']['checked']))
-    {
-        print '<td class="liste_titre">';
-        print '<input type="text" class="flat" name="search_project_ref" value="'.$search_project_ref.'" size="4">';
-        print '</td>';
-    }
-    if (! empty($arrayfields['p.title']['checked']))
-    {
-        print '<td class="liste_titre">';
-        print '<input type="text" class="flat" name="search_project_title" value="'.$search_project_title.'" size="6">';
-        print '</td>';
-    }
-    if (! empty($arrayfields['s.nom']['checked']))
-    {
-        print '<td class="liste_titre">';
-        print '<input type="text" class="flat" name="search_societe" value="'.dol_escape_htmltag($search_societe).'" size="4">';
-        print '</td>';
-    }
-    if (! empty($arrayfields['p.fk_statut']['checked']))
+$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":"").'" id="tablelines3">';
+
+print '<tr class="liste_titre">';
+if (! empty($arrayfields['t.ref']['checked']))           print_liste_field_titre($arrayfields['t.ref']['label'],$_SERVER["PHP_SELF"],"t.ref","",$param,"",$sortfield,$sortorder);
+if (! empty($arrayfields['t.label']['checked']))         print_liste_field_titre($arrayfields['t.label']['label'],$_SERVER["PHP_SELF"],"t.label","",$param,"",$sortfield,$sortorder);
+if (! empty($arrayfields['t.dateo']['checked']))         print_liste_field_titre($arrayfields['t.dateo']['label'],$_SERVER["PHP_SELF"],"t.dateo","",$param,'align="center"',$sortfield,$sortorder);
+if (! empty($arrayfields['t.datee']['checked']))         print_liste_field_titre($arrayfields['t.datee']['label'],$_SERVER["PHP_SELF"],"t.datee","",$param,'align="center"',$sortfield,$sortorder);
+if (! empty($arrayfields['p.ref']['checked']))           print_liste_field_titre($arrayfields['p.ref']['label'],$_SERVER["PHP_SELF"],"p.ref","",$param,"",$sortfield,$sortorder);
+if (! empty($arrayfields['p.title']['checked']))         print_liste_field_titre($arrayfields['p.title']['label'],$_SERVER["PHP_SELF"],"p.title","",$param,"",$sortfield,$sortorder);
+if (! empty($arrayfields['s.nom']['checked']))           print_liste_field_titre($arrayfields['s.nom']['label'],$_SERVER["PHP_SELF"],"s.nom","",$param,"",$sortfield,$sortorder);
+if (! empty($arrayfields['p.fk_statut']['checked']))     print_liste_field_titre($arrayfields['p.fk_statut']['label'],$_SERVER["PHP_SELF"],"p.fk_statut","",$param,"",$sortfield,$sortorder);
+if (! empty($arrayfields['t.planned_workload']['checked']))         print_liste_field_titre($arrayfields['t.planned_workload']['label'],$_SERVER["PHP_SELF"],"t.planned_workload","",$param,'align="center"',$sortfield,$sortorder);
+if (! empty($arrayfields['t.duration_effective']['checked']))       print_liste_field_titre($arrayfields['t.duration_effective']['label'],$_SERVER["PHP_SELF"],"t.duration_effective","",$param,'align="center"',$sortfield,$sortorder);
+if (! empty($arrayfields['t.progress_calculated']['checked']))      print_liste_field_titre($arrayfields['t.progress_calculated']['label'],$_SERVER["PHP_SELF"],"","",$param,'align="center"');
+if (! empty($arrayfields['t.progress']['checked']))      print_liste_field_titre($arrayfields['t.progress']['label'],$_SERVER["PHP_SELF"],"t.progress","",$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['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);
+print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"],"",'','','align="right"',$sortfield,$sortorder,'maxwidthsearch ');
+print "</tr>\n";
+
+print '<tr class="liste_titre">';
+if (! empty($arrayfields['t.ref']['checked']))
+{
+    print '<td class="liste_titre">';
+    print '<input type="text" class="flat" name="search_task_ref" value="'.dol_escape_htmltag($search_task_ref).'" size="4">';
+    print '</td>';
+}
+if (! empty($arrayfields['t.label']['checked']))
+{
+    print '<td class="liste_titre">';
+    print '<input type="text" class="flat" name="search_task_label" value="'.dol_escape_htmltag($search_task_label).'" size="8">';
+    print '</td>';
+}
+// Start date
+if (! empty($arrayfields['t.dateo']['checked']))
+{
+    print '<td class="liste_titre center">';
+    if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print '<input class="flat" type="text" size="1" maxlength="2" name="sday" value="'.$sday.'">';
+    print '<input class="flat" type="text" size="1" maxlength="2" name="smonth" value="'.$smonth.'">';
+    $formother->select_year($syear?$syear:-1,'syear',1, 20, 5);
+    print '</td>';
+}
+// End date
+if (! empty($arrayfields['t.datee']['checked']))
+{
+    print '<td class="liste_titre center">';
+    if (! empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) print '<input class="flat" type="text" size="1" maxlength="2" name="day" value="'.$day.'">';
+    print '<input class="flat" type="text" size="1" maxlength="2" name="month" value="'.$month.'">';
+    $formother->select_year($year?$year:-1,'year',1, 20, 5);
+    print '</td>';
+}
+if (! empty($arrayfields['p.ref']['checked']))
+{
+    print '<td class="liste_titre">';
+    print '<input type="text" class="flat" name="search_project_ref" value="'.$search_project_ref.'" size="4">';
+    print '</td>';
+}
+if (! empty($arrayfields['p.title']['checked']))
+{
+    print '<td class="liste_titre">';
+    print '<input type="text" class="flat" name="search_project_title" value="'.$search_project_title.'" size="6">';
+    print '</td>';
+}
+if (! empty($arrayfields['s.nom']['checked']))
+{
+    print '<td class="liste_titre">';
+    print '<input type="text" class="flat" name="search_societe" value="'.dol_escape_htmltag($search_societe).'" size="4">';
+    print '</td>';
+}
+if (! empty($arrayfields['p.fk_statut']['checked']))
+{
+    print '<td class="liste_titre">';
+    $arrayofstatus = array();
+    foreach($projectstatic->statuts_short as $key => $val) $arrayofstatus[$key]=$langs->trans($val);
+    $arrayofstatus['99']=$langs->trans("NotClosed").' ('.$langs->trans('Draft').'+'.$langs->trans('Opened').')';
+	print $form->selectarray('search_projectstatus', $arrayofstatus, $search_projectstatus, 1, 0, 0, '', 0, 0, 0, '', 'maxwidth100');
+    print '</td>';
+}
+if (! empty($arrayfields['t.planned_workload']['checked'])) print '<td></td>';
+if (! empty($arrayfields['t.duration_effective']['checked'])) print '<td></td>';
+if (! empty($arrayfields['t.progress_calculated']['checked'])) print '<td></td>';
+if (! empty($arrayfields['t.progress']['checked'])) print '<td></td>';
+// Extra fields
+if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
+{
+    foreach($extrafields->attribute_label as $key => $val) 
     {
-        print '<td class="liste_titre">';
-        $arrayofstatus = array();
-        foreach($projectstatic->statuts_short as $key => $val) $arrayofstatus[$key]=$langs->trans($val);
-        $arrayofstatus['99']=$langs->trans("NotClosed").' ('.$langs->trans('Draft').'+'.$langs->trans('Opened').')';
-    	print $form->selectarray('search_projectstatus', $arrayofstatus, $search_projectstatus, 1, 0, 0, '', 0, 0, 0, '', 'maxwidth100');
-        print '</td>';
-    }
-    if (! empty($arrayfields['t.planned_workload']['checked'])) print '<td></td>';
-    if (! empty($arrayfields['t.duration_effective']['checked'])) print '<td></td>';
-    if (! empty($arrayfields['t.progress_calculated']['checked'])) print '<td></td>';
-    if (! empty($arrayfields['t.progress']['checked'])) print '<td></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']))
         {
-            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>';
-            }
+            $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>';
     }
-    // Action column
-    print '<td class="liste_titre" align="right">';
-    $searchpitco=$form->showFilterAndCheckAddButtons(0);
-    print $searchpitco;
+}
+// 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>';
-    print '</tr>';
-    
-    
-    $plannedworkloadoutputformat='allhourmin';
-    $timespentoutputformat='allhourmin';
-    if (! empty($conf->global->PROJECT_PLANNED_WORKLOAD_FORMAT)) $plannedworkloadoutputformat=$conf->global->PROJECT_PLANNED_WORKLOAD_FORMAT;
-    if (! empty($conf->global->PROJECT_TIMES_SPENT_FORMAT)) $timespentoutputformat=$conf->global->PROJECT_TIME_SPENT_FORMAT;
-     
-    $now = dol_now();
-    $i=0;
-    $var=true;
-    $totalarray=array();
-    while ($i < min($num,$limit))
-    {
-    	$obj = $db->fetch_object($resql);
-
-    	$projectstatic->id = $obj->projectid;
-    	$projectstatic->ref = $obj->projectref;
-    	$projectstatic->title = $obj->projecttitle;
-    	$projectstatic->public = $obj->public;
-    	$projectstatic->statut = $obj->projectstatus;
-    	$projectstatic->datee = $db->jdate($obj->projectdatee);
-    	
-    	$taskstatic->id = $obj->id;
-    	$taskstatic->ref = $obj->ref;
-    	$taskstatic->label = $obj->label;
-    	$taskstatic->fk_statut = $obj->fk_statut;
-    	$taskstatic->progress = $obj->progress;
-    	$taskstatic->datee = $db->jdate($obj->date_end);	// deprecated
-    	$taskstatic->date_end = $db->jdate($obj->date_end);
+}
+if (! empty($arrayfields['t.tms']['checked']))
+{
+    // Date modification
+    print '<td class="liste_titre">';
+    print '</td>';
+}
+// Action column
+print '<td class="liste_titre" align="right">';
+$searchpitco=$form->showFilterAndCheckAddButtons(0);
+print $searchpitco;
+print '</td>';
+print '</tr>';
+
+
+$plannedworkloadoutputformat='allhourmin';
+$timespentoutputformat='allhourmin';
+if (! empty($conf->global->PROJECT_PLANNED_WORKLOAD_FORMAT)) $plannedworkloadoutputformat=$conf->global->PROJECT_PLANNED_WORKLOAD_FORMAT;
+if (! empty($conf->global->PROJECT_TIMES_SPENT_FORMAT)) $timespentoutputformat=$conf->global->PROJECT_TIME_SPENT_FORMAT;
+ 
+$now = dol_now();
+$i=0;
+$var=true;
+$totalarray=array();
+while ($i < min($num,$limit))
+{
+	$obj = $db->fetch_object($resql);
+
+	$projectstatic->id = $obj->projectid;
+	$projectstatic->ref = $obj->projectref;
+	$projectstatic->title = $obj->projecttitle;
+	$projectstatic->public = $obj->public;
+	$projectstatic->statut = $obj->projectstatus;
+	$projectstatic->datee = $db->jdate($obj->projectdatee);
+	
+	$taskstatic->id = $obj->id;
+	$taskstatic->ref = $obj->ref;
+	$taskstatic->label = $obj->label;
+	$taskstatic->fk_statut = $obj->fk_statut;
+	$taskstatic->progress = $obj->progress;
+	$taskstatic->datee = $db->jdate($obj->date_end);	// deprecated
+	$taskstatic->date_end = $db->jdate($obj->date_end);
+	
+	$userAccess = $projectstatic->restrictedProjectArea($user);    // why this ?
+	if ($userAccess >= 0)
+	{
+		$var=!$var;
+		print "<tr ".$bc[$var].">";
+
+    	// Ref
+    	if (! empty($arrayfields['t.ref']['checked']))
+    	{
+    	    print '<td>';
+    	    print $taskstatic->getNomUrl(1,'withproject');
+    		if ($taskstatic->hasDelay()) print img_warning("Late");
+    	    print '</td>';
+		    if (! $i) $totalarray['nbfield']++;
+    	}        	 
+	    // Label
+    	if (! empty($arrayfields['t.label']['checked']))
+    	{
+    	    print '<td>';
+    	    print $taskstatic->label;
+    	    print '</td>';
+		    if (! $i) $totalarray['nbfield']++;
+    	}
+    	// Date start
+    	if (! empty($arrayfields['t.dateo']['checked']))
+    	{
+			print '<td class="center">';
+    		print dol_print_date($db->jdate($obj->date_start),'day');
+    		print '</td>';
+		    if (! $i) $totalarray['nbfield']++;
+    	}
+		// Date end
+    	if (! empty($arrayfields['t.datee']['checked']))
+    	{
+			print '<td class="center">';
+    		print dol_print_date($db->jdate($obj->date_end),'day');
+    		print '</td>';
+		    if (! $i) $totalarray['nbfield']++;
+    	}
+    	// Project ref
+    	if (! empty($arrayfields['p.ref']['checked']))
+    	{
+    	    print '<td class="nowrap">';
+    	    print $projectstatic->getNomUrl(1, 'task');
+    	    if ($projectstatic->hasDelay()) print img_warning("Late");
+    	    print '</td>';
+    	    if (! $i) $totalarray['nbfield']++;
+    	}
+    	// Project title
+    	if (! empty($arrayfields['p.title']['checked']))
+    	{
+    	    print '<td>';
+    	    print dol_trunc($obj->projecttitle,80);
+    	    print '</td>';
+    	    if (! $i) $totalarray['nbfield']++;
+    	}
+    	// Third party
+    	if (! empty($arrayfields['s.nom']['checked']))
+    	{
+    	    print '<td>';
+    	    if ($obj->socid)
+    	    {
+    	        $socstatic->id=$obj->socid;
+    	        $socstatic->name=$obj->name;
+    	        print $socstatic->getNomUrl(1);
+    	    }
+    	    else
+    	    {
+    	        print '&nbsp;';
+    	    }
+    	    print '</td>';
+    	    if (! $i) $totalarray['nbfield']++;
+    	}
+    	// Project status
+    	if (! empty($arrayfields['p.fk_statut']['checked']))
+    	{
+    	    print '<td>';
+    	    print $projectstatic->getLibStatut(1);
+    	    print '</td>';
+    	    if (! $i) $totalarray['nbfield']++;
+    	}
     	
-    	$userAccess = $projectstatic->restrictedProjectArea($user);    // why this ?
-    	if ($userAccess >= 0)
+    	// Planned workload
+    	if (! empty($arrayfields['t.planned_workload']['checked']))
     	{
-    		$var=!$var;
-    		print "<tr ".$bc[$var].">";
-
-        	// Ref
-        	if (! empty($arrayfields['t.ref']['checked']))
-        	{
-        	    print '<td>';
-        	    print $taskstatic->getNomUrl(1,'withproject');
-        		if ($taskstatic->hasDelay()) print img_warning("Late");
-        	    print '</td>';
-    		    if (! $i) $totalarray['nbfield']++;
-        	}        	 
-    	    // Label
-        	if (! empty($arrayfields['t.label']['checked']))
-        	{
-        	    print '<td>';
-        	    print $taskstatic->label;
-        	    print '</td>';
-    		    if (! $i) $totalarray['nbfield']++;
-        	}
-        	// Date start
-        	if (! empty($arrayfields['t.dateo']['checked']))
-        	{
-				print '<td class="center">';
-	    		print dol_print_date($db->jdate($obj->date_start),'day');
-	    		print '</td>';
-    		    if (! $i) $totalarray['nbfield']++;
-        	}
-    		// Date end
-        	if (! empty($arrayfields['t.datee']['checked']))
-        	{
-    			print '<td class="center">';
-        		print dol_print_date($db->jdate($obj->date_end),'day');
-        		print '</td>';
-    		    if (! $i) $totalarray['nbfield']++;
-        	}
-        	// Project ref
-        	if (! empty($arrayfields['p.ref']['checked']))
-        	{
-        	    print '<td class="nowrap">';
-        	    print $projectstatic->getNomUrl(1, 'task');
-        	    if ($projectstatic->hasDelay()) print img_warning("Late");
-        	    print '</td>';
-        	    if (! $i) $totalarray['nbfield']++;
-        	}
-        	// Project title
-        	if (! empty($arrayfields['p.title']['checked']))
-        	{
-        	    print '<td>';
-        	    print dol_trunc($obj->projecttitle,80);
-        	    print '</td>';
-        	    if (! $i) $totalarray['nbfield']++;
-        	}
-        	// Third party
-        	if (! empty($arrayfields['s.nom']['checked']))
-        	{
-        	    print '<td>';
-        	    if ($obj->socid)
-        	    {
-        	        $socstatic->id=$obj->socid;
-        	        $socstatic->name=$obj->name;
-        	        print $socstatic->getNomUrl(1);
-        	    }
-        	    else
-        	    {
-        	        print '&nbsp;';
-        	    }
-        	    print '</td>';
-        	    if (! $i) $totalarray['nbfield']++;
-        	}
-        	// Project status
-        	if (! empty($arrayfields['p.fk_statut']['checked']))
-        	{
-        	    print '<td>';
-        	    print $projectstatic->getLibStatut(1);
-        	    print '</td>';
-        	    if (! $i) $totalarray['nbfield']++;
-        	}
-        	
-        	// Planned workload
-        	if (! empty($arrayfields['t.planned_workload']['checked']))
-        	{
-        	    print '<td class="center">';
-        	    $fullhour=convertSecondToTime($obj->planned_workload,$plannedworkloadoutputformat);
-        	    $workingdelay=convertSecondToTime($obj->planned_workload,'all',86400,7);	// TODO Replace 86400 and 7 to take account working hours per day and working day per weeks
-        	    if ($obj->planned_workload != '')
-        	    {
-        	        print $fullhour;
-        	        // TODO Add delay taking account of working hours per day and working day per week
-        	        //if ($workingdelay != $fullhour) print '<br>('.$workingdelay.')';
-        	    }
-        	    //else print '--:--';
-        	    print '</td>';
-    		    if (! $i) $totalarray['nbfield']++;
-    		    if (! $i) $totalarray['totalplannedworkloadfield']=$totalarray['nbfield'];
-    		    $totalarray['totalplannedworkload'] += $obj->planned_workload;
-        	}
-        	// Time spent
-        	if (! empty($arrayfields['t.duration_effective']['checked']))
-        	{
-        	    $showlineingray=0;$showproject=1;
-        	    print '<td class="center">';
-				if ($showlineingray) print '<i>';
-				else print '<a href="'.DOL_URL_ROOT.'/projet/tasks/time.php?id='.$lines[$i]->id.($showproject?'':'&withproject=1').'">';
-				if ($obj->duration_effective) print convertSecondToTime($obj->duration_effective,$timespentoutputformat);
-				else print '--:--';
-				if ($showlineingray) print '</i>';
-				else print '</a>';
-        	    print '</td>';
-                if (! $i) $totalarray['nbfield']++;
-    		    if (! $i) $totalarray['totaldurationeffectivefield']=$totalarray['nbfield'];
-    		    $totalarray['totaldurationeffective'] += $obj->duration_effective;
-        	}    		
-    	    // Calculated progress
-        	if (! empty($arrayfields['t.progress_calculated']['checked']))
-        	{
-    			print '<td class="center">';
-            	if ($obj->planned_workload || $obj->duration_effective)
-				{
-					if ($obj->planned_workload) print round(100 * $obj->duration_effective / $obj->planned_workload,2).' %';
-					else print $langs->trans('WorkloadNotDefined');
-				}
-        		print '</td>';
-                if (! $i) $totalarray['nbfield']++;
-        	}    		
-    	    // Declared progress
-        	if (! empty($arrayfields['t.progress']['checked']))
-        	{
-    			print '<td class="center">';
-                if ($obj->progress != '')
-				{
-					print $obj->progress.' %';
-				}
-        		print '</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['p.fk_statut']['checked']))
-    		{
-        		$projectstatic->statut = $obj->fk_statut;
-        		print '<td align="right">'.$projectstatic->getLibStatut(5).'</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>';
+    	    print '<td class="center">';
+    	    $fullhour=convertSecondToTime($obj->planned_workload,$plannedworkloadoutputformat);
+    	    $workingdelay=convertSecondToTime($obj->planned_workload,'all',86400,7);	// TODO Replace 86400 and 7 to take account working hours per day and working day per weeks
+    	    if ($obj->planned_workload != '')
+    	    {
+    	        print $fullhour;
+    	        // TODO Add delay taking account of working hours per day and working day per week
+    	        //if ($workingdelay != $fullhour) print '<br>('.$workingdelay.')';
+    	    }
+    	    //else print '--:--';
+    	    print '</td>';
+		    if (! $i) $totalarray['nbfield']++;
+		    if (! $i) $totalarray['totalplannedworkloadfield']=$totalarray['nbfield'];
+		    $totalarray['totalplannedworkload'] += $obj->planned_workload;
+    	}
+    	// Time spent
+    	if (! empty($arrayfields['t.duration_effective']['checked']))
+    	{
+    	    $showlineingray=0;$showproject=1;
+    	    print '<td class="center">';
+			if ($showlineingray) print '<i>';
+			else print '<a href="'.DOL_URL_ROOT.'/projet/tasks/time.php?id='.$lines[$i]->id.($showproject?'':'&withproject=1').'">';
+			if ($obj->duration_effective) print convertSecondToTime($obj->duration_effective,$timespentoutputformat);
+			else print '--:--';
+			if ($showlineingray) print '</i>';
+			else print '</a>';
+    	    print '</td>';
+            if (! $i) $totalarray['nbfield']++;
+		    if (! $i) $totalarray['totaldurationeffectivefield']=$totalarray['nbfield'];
+		    $totalarray['totaldurationeffective'] += $obj->duration_effective;
+    	}    		
+	    // Calculated progress
+    	if (! empty($arrayfields['t.progress_calculated']['checked']))
+    	{
+			print '<td class="center">';
+        	if ($obj->planned_workload || $obj->duration_effective)
+			{
+				if ($obj->planned_workload) print round(100 * $obj->duration_effective / $obj->planned_workload,2).' %';
+				else print $langs->trans('WorkloadNotDefined');
+			}
+    		print '</td>';
             if (! $i) $totalarray['nbfield']++;
-    		
-    		print "</tr>\n";
-        
-    		//print projectLinesa();
+    	}    		
+	    // Declared progress
+    	if (! empty($arrayfields['t.progress']['checked']))
+    	{
+			print '<td class="center">';
+            if ($obj->progress != '')
+			{
+				print $obj->progress.' %';
+			}
+    		print '</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['p.fk_statut']['checked']))
+		{
+    		$projectstatic->statut = $obj->fk_statut;
+    		print '<td align="right">'.$projectstatic->getLibStatut(5).'</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>\n";
+    
+		//print projectLinesa();
+	}
 
-    	$i++;    
-    }
+	$i++;    
+}
 
-    // Show total line
-    if (isset($totalarray['totaldurationeffectivefield']) || isset($totalarray['totalplannedworkloadfield']))
+// Show total line
+if (isset($totalarray['totaldurationeffectivefield']) || isset($totalarray['totalplannedworkloadfield']))
+{
+    print '<tr class="liste_total">';
+    $i=0;
+    while ($i < $totalarray['nbfield'])
     {
-        print '<tr class="liste_total">';
-        $i=0;
-        while ($i < $totalarray['nbfield'])
+        $i++;
+        if ($i == 1)
         {
-            $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['totalplannedworkloadfield'] == $i) print '<td align="center">'.convertSecondToTime($totalarray['totalplannedworkload'],$plannedworkloadoutputformat).'</td>';
-            elseif ($totalarray['totaldurationeffectivefield'] == $i) print '<td align="center">'.convertSecondToTime($totalarray['totaldurationeffective'],$timespentoutputformat).'</td>';
-            else print '<td></td>';
+            if ($num < $limit) print '<td align="left">'.$langs->trans("Total").'</td>';
+            else print '<td align="left">'.$langs->trans("Totalforthispage").'</td>';
         }
-        print '</tr>';
+        elseif ($totalarray['totalplannedworkloadfield'] == $i) print '<td align="center">'.convertSecondToTime($totalarray['totalplannedworkload'],$plannedworkloadoutputformat).'</td>';
+        elseif ($totalarray['totaldurationeffectivefield'] == $i) print '<td align="center">'.convertSecondToTime($totalarray['totaldurationeffective'],$timespentoutputformat).'</td>';
+        else print '<td></td>';
     }
-    
-    $db->free($resql);
-    
-    $parameters=array('sql' => $sql);
-    $reshook=$hookmanager->executeHooks('printFieldListFooter',$parameters);    // Note that $action and $object may have been modified by hook
-    print $hookmanager->resPrint;
-    
-    print "</table>";
-    
-    print '</form>';
-}
-else
-{
-    dol_print_error($db);
+    print '</tr>';
 }
 
+$db->free($resql);
 
-llxFooter();
+$parameters=array('sql' => $sql);
+$reshook=$hookmanager->executeHooks('printFieldListFooter',$parameters);    // Note that $action and $object may have been modified by hook
+print $hookmanager->resPrint;
+
+print "</table>";
 
+print '</form>';
+
+llxFooter();
 $db->close();
diff --git a/htdocs/societe/list.php b/htdocs/societe/list.php
index 96c527f3976292645f746416e2085e85b5dd2fed..6acae492c33778f9e648937903b0f51bd2500790 100644
--- a/htdocs/societe/list.php
+++ b/htdocs/societe/list.php
@@ -444,7 +444,7 @@ if (! $resql)
 
 $num = $db->num_rows($resql);
 
-if ($num == 1 && ! empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE))
+if ($num == 1 && ! empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $search_all && $action != 'list')
 {
     $obj = $db->fetch_object($resql);
     $id = $obj->rowid;
diff --git a/htdocs/user/index.php b/htdocs/user/index.php
index 459a89e573b0178f2a46eda53cd32537e42c5574..f5d9407d2e362b41b5d777ce6c455ceac18a69e1 100644
--- a/htdocs/user/index.php
+++ b/htdocs/user/index.php
@@ -134,40 +134,46 @@ if ($mode == 'employee') $search_employee=1;
 /*
  * Actions
  */
- 
+
+if (GETPOST('cancel')) { $action='list'; $massaction=''; }
+if (! GETPOST('confirmmassaction') && $massaction != 'presend' && $massaction != 'confirm_presend' && $massaction != 'confirm_createbills') { $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 (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_user="";
-	$search_login="";
-	$search_lastname="";
-	$search_firstname="";
-	$search_gender="";
-	$search_employee="";
-	$search_accountancy_code="";
-	$search_email="";
-	$search_statut="";
-	$search_thirdparty="";
-	$search_supervisor="";
-	$search_datelastlogin="";
-	$search_datepreviouslogin="";
-	$search_date_creation="";
-	$search_date_update="";
-	$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 test are required to be compatible with all browsers
+    {
+    	$search_user="";
+    	$search_login="";
+    	$search_lastname="";
+    	$search_firstname="";
+    	$search_gender="";
+    	$search_employee="";
+    	$search_accountancy_code="";
+    	$search_email="";
+    	$search_statut="";
+    	$search_thirdparty="";
+    	$search_supervisor="";
+    	$search_datelastlogin="";
+    	$search_datepreviouslogin="";
+    	$search_date_creation="";
+    	$search_date_update="";
+    	$search_array_options=array();
+    }
 }
 
 
-
 /*
  * View
  */
 
-llxHeader('',$langs->trans("ListOfUsers"));
 
 $buttonviewhierarchy='<form action="'.DOL_URL_ROOT.'/user/hierarchy.php'.(($search_statut != '' && $search_statut >= 0) ? '?search_statut='.$search_statut : '').'" method="POST"><input type="submit" class="button" style="width:120px" name="viewcal" value="'.dol_escape_htmltag($langs->trans("HierarchicView")).'"></form>';
 
@@ -239,150 +245,363 @@ if ($result)
 $sql.= $db->plimit($limit+1, $offset);
 
 $result = $db->query($sql);
-if ($result)
+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;
-    if ($sall != '') $param.='&sall='.urlencode($sall);
-    if ($search_user != '') $param.="&search_user=".$search_user;
-    if ($search_login != '') $param.="&search_login=".$search_login;
-    if ($search_lastname != '') $param.="&search_lastname=".$search_lastname;
-    if ($search_firstname != '') $param.="&search_firstname=".$search_firstname;
-    if ($search_gender != '') $param.="&search_gender=".$search_gender;
-    if ($search_employee != '') $param.="&search_employee=".$search_employee;
-    if ($search_accountancy_code != '') $param.="&search_accountancy_code=".$search_accountancy_code;
-    if ($search_email != '') $param.="&search_email=".$search_email;
-    if ($search_supervisor > 0) $param.="&search_supervisor=".$search_supervisor;
-    if ($search_statut != '') $param.="&search_statut=".$search_statut;
-    if ($optioncss != '') $param.='&optioncss='.$optioncss;
-    if ($mode != '')      $param.='&mode='.$mode;
-    // 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);
-    } 	
-    
-    $text = $langs->trans("ListOfUsers");
-    
-    print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].'">'."\n";
-    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="sortfield" value="'.$sortfield.'">';
-	print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
-	print '<input type="hidden" name="mode" value="'.$mode.'">';
-	print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
-	
-	print_barre_liste($text, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, "", $num, $nbtotalofrecords, 'title_generic', 0, '', '', $limit);
-
-	if ($sall)
-    {
-        foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val);
-        print $langs->trans("FilterOnInto", $sall) . join(', ',$fieldstosearchall);
-    }
-	
-    $moreforfilter='';
-    
-	$varpage=empty($contextpage)?$_SERVER["PHP_SELF"]:$contextpage;
-	$selectedfields=$form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage);	// This also change content of $arrayfields
+    dol_print_error($db);
+    exit;
+}
+
+$num = $db->num_rows($result);
+
+if ($num == 1 && ! empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $sall)
+{
+    $obj = $db->fetch_object($resql);
+    $id = $obj->rowid;
+    header("Location: ".DOL_URL_ROOT.'/user/card.php?id='.$id);
+    exit;
+}
+
+llxHeader('',$langs->trans("ListOfUsers"));
+
+$param='';
+if (! empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param.='&contextpage='.$contextpage;
+if ($limit > 0 && $limit != $conf->liste_limit) $param.='&limit='.$limit;
+if ($sall != '') $param.='&sall='.urlencode($sall);
+if ($search_user != '') $param.="&search_user=".$search_user;
+if ($search_login != '') $param.="&search_login=".$search_login;
+if ($search_lastname != '') $param.="&search_lastname=".$search_lastname;
+if ($search_firstname != '') $param.="&search_firstname=".$search_firstname;
+if ($search_gender != '') $param.="&search_gender=".$search_gender;
+if ($search_employee != '') $param.="&search_employee=".$search_employee;
+if ($search_accountancy_code != '') $param.="&search_accountancy_code=".$search_accountancy_code;
+if ($search_email != '') $param.="&search_email=".$search_email;
+if ($search_supervisor > 0) $param.="&search_supervisor=".$search_supervisor;
+if ($search_statut != '') $param.="&search_statut=".$search_statut;
+if ($optioncss != '') $param.='&optioncss='.$optioncss;
+if ($mode != '')      $param.='&mode='.$mode;
+// 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);
+} 	
+
+$text = $langs->trans("ListOfUsers");
+
+print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].'">'."\n";
+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="sortfield" value="'.$sortfield.'">';
+print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
+print '<input type="hidden" name="mode" value="'.$mode.'">';
+print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
+
+print_barre_liste($text, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, "", $num, $nbtotalofrecords, 'title_generic', 0, '', '', $limit);
+
+if ($sall)
+{
+    foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val);
+    print $langs->trans("FilterOnInto", $sall) . join(', ',$fieldstosearchall);
+}
+
+$moreforfilter='';
+
+$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":"").'">';
+print '<tr class="liste_titre">';
+if (! empty($arrayfields['u.login']['checked']))          print_liste_field_titre($langs->trans("Login"),$_SERVER['PHP_SELF'],"u.login",$param,"","",$sortfield,$sortorder);
+if (! empty($arrayfields['u.lastname']['checked']))       print_liste_field_titre($langs->trans("Lastname"),$_SERVER['PHP_SELF'],"u.lastname",$param,"","",$sortfield,$sortorder);
+if (! empty($arrayfields['u.firstname']['checked']))      print_liste_field_titre($langs->trans("FirstName"),$_SERVER['PHP_SELF'],"u.firstname",$param,"","",$sortfield,$sortorder);
+if (! empty($arrayfields['u.gender']['checked']))         print_liste_field_titre($langs->trans("Gender"),$_SERVER['PHP_SELF'],"u.gender",$param,"","",$sortfield,$sortorder);
+if (! empty($arrayfields['u.employee']['checked']))       print_liste_field_titre($langs->trans("Employee"),$_SERVER['PHP_SELF'],"u.employee",$param,"","",$sortfield,$sortorder);
+if (! empty($arrayfields['u.accountancy_code']['checked'])) print_liste_field_titre($langs->trans("AccountancyCode"),$_SERVER['PHP_SELF'],"u.accountancy_code",$param,"","",$sortfield,$sortorder);
+if (! empty($arrayfields['u.email']['checked']))          print_liste_field_titre($langs->trans("EMail"),$_SERVER['PHP_SELF'],"u.email",$param,"","",$sortfield,$sortorder);
+if (! empty($arrayfields['u.fk_soc']['checked']))         print_liste_field_titre($langs->trans("Company"),$_SERVER['PHP_SELF'],"u.fk_soc",$param,"","",$sortfield,$sortorder);
+if (! empty($arrayfields['u.entity']['checked']))         print_liste_field_titre($langs->trans("Entity"),$_SERVER['PHP_SELF'],"u.entity",$param,"","",$sortfield,$sortorder);
+if (! empty($arrayfields['u.fk_user']['checked']))        print_liste_field_titre($langs->trans("HierarchicalResponsible"),$_SERVER['PHP_SELF'],"u.fk_user",$param,"","",$sortfield,$sortorder);
+if (! empty($arrayfields['u.datelastlogin']['checked']))  print_liste_field_titre($langs->trans("LastConnexion"),$_SERVER['PHP_SELF'],"u.datelastlogin",$param,"",'align="center"',$sortfield,$sortorder);
+if (! empty($arrayfields['u.datepreviouslogin']['checked'])) print_liste_field_titre($langs->trans("PreviousConnexion"),$_SERVER['PHP_SELF'],"u.datepreviouslogin",$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['u.datec']['checked']))  print_liste_field_titre($langs->trans("DateCreationShort"),$_SERVER["PHP_SELF"],"u.datec","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
+if (! empty($arrayfields['u.tms']['checked']))    print_liste_field_titre($langs->trans("DateModificationShort"),$_SERVER["PHP_SELF"],"u.tms","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
+if (! empty($arrayfields['u.statut']['checked'])) print_liste_field_titre($langs->trans("Status"),$_SERVER["PHP_SELF"],"u.statut","",$param,'align="center"',$sortfield,$sortorder);
+print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"],"",'','','align="right"',$sortfield,$sortorder,'maxwidthsearch ');
+print "</tr>\n";
+
+// Search bar
+print '<tr class="liste_titre">';
+if (! empty($arrayfields['u.login']['checked']))
+{
+    print '<td><input type="text" name="search_login" size="6" value="'.$search_login.'"></td>';
+}
+if (! empty($arrayfields['u.lastname']['checked']))
+{
+    print '<td><input type="text" name="search_lastname" size="6" value="'.$search_lastname.'"></td>';
+}
+if (! empty($arrayfields['u.firstname']['checked']))
+{
+    print '<td><input type="text" name="search_firstname" size="6" value="'.$search_firstname.'"></td>';
+}
+if (! empty($arrayfields['u.gender']['checked']))
+{
+    print '<td>';
+    $arraygender=array('man'=>$langs->trans("Genderman"),'woman'=>$langs->trans("Genderwoman"));
+    print $form->selectarray('search_gender', $arraygender, $search_gender, 1);        
+    print '</td>';
+}
+if (! empty($arrayfields['u.employee']['checked']))
+{
+    print '<td>';
+    print $form->selectyesno('search_employee', $search_employee, 1, false, 1);
+    print '</td>';
+}
+if (! empty($arrayfields['u.accountancy_code']['checked']))
+{
+    print '<td><input type="text" name="search_accountancy_code" size="4" value="'.$search_accountancy_code.'"></td>';
+}
+if (! empty($arrayfields['u.email']['checked']))
+{
+    print '<td><input type="text" name="search_email" size="6" value="'.$search_email.'"></td>';
+}
+if (! empty($arrayfields['u.fk_soc']['checked']))
+{
+    print '<td><input type="text" name="search_thirdparty" size="6" value="'.$search_thirdparty.'"></td>';
+}
+if (! empty($arrayfields['u.entity']['checked']))
+{
+    print '<td></td>';
+}
+if (! empty($arrayfields['u.fk_user']['checked']))
+{
+    print '<td></td>';
+}
+if (! empty($arrayfields['u.datelastlogin']['checked']))
+{
+    print '<td></td>';
+}
+if (! empty($arrayfields['u.datepreviouslogin']['checked']))
+{
+    print '<td></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'])) 
+		{
+            $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['u.datec']['checked']))
+{
+    // Date creation
+    print '<td class="liste_titre">';
+    print '</td>';
+}
+if (! empty($arrayfields['u.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(0);
+print $searchpitco;
+print '</td>';
+
+print "</tr>\n";
+
+$user2=new User($db);
+
+$var=True;
+$i = 0;
+while ($i < min($num,$limit))
+{
+    $obj = $db->fetch_object($result);
+    $var=!$var;
+
+	$userstatic->id=$obj->rowid;
+	$userstatic->ref=$obj->label;
+	$userstatic->login=$obj->login;
+	$userstatic->statut=$obj->statut;
+    $userstatic->email=$obj->email;
+    $userstatic->gender=$obj->gender;
+    $userstatic->societe_id=$obj->fk_soc;
+    $userstatic->firstname=$obj->firstname;
+	$userstatic->lastname=$obj->lastname;
+	$userstatic->employee=$obj->employee;
+	$userstatic->photo=$obj->photo;
     
-    print '<table class="liste '.($moreforfilter?"listwithfilterbefore":"").'">';
-    print '<tr class="liste_titre">';
-    if (! empty($arrayfields['u.login']['checked']))          print_liste_field_titre($langs->trans("Login"),$_SERVER['PHP_SELF'],"u.login",$param,"","",$sortfield,$sortorder);
-    if (! empty($arrayfields['u.lastname']['checked']))       print_liste_field_titre($langs->trans("Lastname"),$_SERVER['PHP_SELF'],"u.lastname",$param,"","",$sortfield,$sortorder);
-    if (! empty($arrayfields['u.firstname']['checked']))      print_liste_field_titre($langs->trans("FirstName"),$_SERVER['PHP_SELF'],"u.firstname",$param,"","",$sortfield,$sortorder);
-    if (! empty($arrayfields['u.gender']['checked']))         print_liste_field_titre($langs->trans("Gender"),$_SERVER['PHP_SELF'],"u.gender",$param,"","",$sortfield,$sortorder);
-    if (! empty($arrayfields['u.employee']['checked']))       print_liste_field_titre($langs->trans("Employee"),$_SERVER['PHP_SELF'],"u.employee",$param,"","",$sortfield,$sortorder);
-    if (! empty($arrayfields['u.accountancy_code']['checked'])) print_liste_field_titre($langs->trans("AccountancyCode"),$_SERVER['PHP_SELF'],"u.accountancy_code",$param,"","",$sortfield,$sortorder);
-    if (! empty($arrayfields['u.email']['checked']))          print_liste_field_titre($langs->trans("EMail"),$_SERVER['PHP_SELF'],"u.email",$param,"","",$sortfield,$sortorder);
-    if (! empty($arrayfields['u.fk_soc']['checked']))         print_liste_field_titre($langs->trans("Company"),$_SERVER['PHP_SELF'],"u.fk_soc",$param,"","",$sortfield,$sortorder);
-    if (! empty($arrayfields['u.entity']['checked']))         print_liste_field_titre($langs->trans("Entity"),$_SERVER['PHP_SELF'],"u.entity",$param,"","",$sortfield,$sortorder);
-    if (! empty($arrayfields['u.fk_user']['checked']))        print_liste_field_titre($langs->trans("HierarchicalResponsible"),$_SERVER['PHP_SELF'],"u.fk_user",$param,"","",$sortfield,$sortorder);
-    if (! empty($arrayfields['u.datelastlogin']['checked']))  print_liste_field_titre($langs->trans("LastConnexion"),$_SERVER['PHP_SELF'],"u.datelastlogin",$param,"",'align="center"',$sortfield,$sortorder);
-    if (! empty($arrayfields['u.datepreviouslogin']['checked'])) print_liste_field_titre($langs->trans("PreviousConnexion"),$_SERVER['PHP_SELF'],"u.datepreviouslogin",$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['u.datec']['checked']))  print_liste_field_titre($langs->trans("DateCreationShort"),$_SERVER["PHP_SELF"],"u.datec","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
-	if (! empty($arrayfields['u.tms']['checked']))    print_liste_field_titre($langs->trans("DateModificationShort"),$_SERVER["PHP_SELF"],"u.tms","",$param,'align="center" class="nowrap"',$sortfield,$sortorder);
-	if (! empty($arrayfields['u.statut']['checked'])) print_liste_field_titre($langs->trans("Status"),$_SERVER["PHP_SELF"],"u.statut","",$param,'align="center"',$sortfield,$sortorder);
-	print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"],"",'','','align="right"',$sortfield,$sortorder,'maxwidthsearch ');
-    print "</tr>\n";
+	$li=$userstatic->getNomUrl(-1,'',0,0,24,1,'login');
 
-    // Search bar
-    print '<tr class="liste_titre">';
+    print "<tr ".$bc[$var].">";
     if (! empty($arrayfields['u.login']['checked']))
-    {
-        print '<td><input type="text" name="search_login" size="6" value="'.$search_login.'"></td>';
-    }
+	{
+	    print '<td>';
+		print $li;
+        if (! empty($conf->multicompany->enabled) && $obj->admin && ! $obj->entity)
+        {
+          	print img_picto($langs->trans("SuperAdministrator"),'redstar');
+        }
+        else if ($obj->admin)
+        {
+        	print img_picto($langs->trans("Administrator"),'star');
+        }
+        print '</td>';
+	}
     if (! empty($arrayfields['u.lastname']['checked']))
-    {
-        print '<td><input type="text" name="search_lastname" size="6" value="'.$search_lastname.'"></td>';
-    }
+	{
+	      print '<td>'.$obj->lastname.'</td>';
+	}
     if (! empty($arrayfields['u.firstname']['checked']))
-    {
-        print '<td><input type="text" name="search_firstname" size="6" value="'.$search_firstname.'"></td>';
-    }
+	{
+	  print '<td>'.$obj->firstname.'</td>';
+	}
     if (! empty($arrayfields['u.gender']['checked']))
-    {
-        print '<td>';
-        $arraygender=array('man'=>$langs->trans("Genderman"),'woman'=>$langs->trans("Genderwoman"));
-        print $form->selectarray('search_gender', $arraygender, $search_gender, 1);        
-        print '</td>';
-    }
+	{
+	  print '<td>';
+	  if ($obj->gender) print $langs->trans("Gender".$obj->gender);
+	  print '</td>';
+	}
     if (! empty($arrayfields['u.employee']['checked']))
-    {
-        print '<td>';
-        print $form->selectyesno('search_employee', $search_employee, 1, false, 1);
-        print '</td>';
-    }
-    if (! empty($arrayfields['u.accountancy_code']['checked']))
-    {
-        print '<td><input type="text" name="search_accountancy_code" size="4" value="'.$search_accountancy_code.'"></td>';
-    }
+	{
+	  print '<td>'.yn($obj->employee).'</td>';
+	}
+	if (! empty($arrayfields['u.accountancy_code']['checked']))
+	{
+	  print '<td>'.$obj->accountancy_code.'</td>';
+	}
     if (! empty($arrayfields['u.email']['checked']))
+	{
+	  print '<td>'.$obj->email.'</td>';
+	}
+	if (! empty($arrayfields['u.fk_soc']['checked']))
+	{
+		print "<td>";
+        if ($obj->fk_soc)
+        {
+            $companystatic->id=$obj->fk_soc;
+            $companystatic->name=$obj->name;
+            $companystatic->canvas=$obj->canvas;
+            print $companystatic->getNomUrl(1);
+        }
+        else if ($obj->ldap_sid)
+        {
+        	print $langs->trans("DomainUser");
+        }
+        else
+       {
+        	print $langs->trans("InternalUser");
+        }
+        print '</td>';
+	}
+    // Multicompany enabled
+    if (! empty($conf->multicompany->enabled) && empty($conf->multicompany->transverse_mode))
     {
-        print '<td><input type="text" name="search_email" size="6" value="'.$search_email.'"></td>';
-    }
-    if (! empty($arrayfields['u.fk_soc']['checked']))
-    {
-        print '<td><input type="text" name="search_thirdparty" size="6" value="'.$search_thirdparty.'"></td>';
-    }
-    if (! empty($arrayfields['u.entity']['checked']))
-    {
-        print '<td></td>';
+        if (! empty($arrayfields['u.entity']['checked']))
+		{
+            print '<td>';
+        	if (! $obj->entity)
+        	{
+        		print $langs->trans("AllEntities");
+        	}
+        	else
+        	{
+        		// $mc is defined in conf.class.php if multicompany enabled.
+        		if (is_object($mc))
+        		{
+        			$mc->getInfo($obj->entity);
+        			print $mc->label;
+        		}
+        	}
+        	print '</td>';
+		}
     }
+    // Supervisor
     if (! empty($arrayfields['u.fk_user']['checked']))
-    {
-        print '<td></td>';
-    }
+	{
+		// Resp
+        print '<td class="nowrap">';
+        if ($obj->login2)
+        {
+	        $user2->id=$obj->id2;
+	        $user2->login=$obj->login2;
+	        $user2->lastname=$obj->lastname2;
+	        $user2->firstname=$obj->firstname2;
+	        $user2->gender=$obj->gender2;
+	        $user2->photo=$obj->photo2;
+	        $user2->admin=$obj->admin2;
+	        $user2->email=$obj->email2;
+	        $user2->societe_id=$obj->fk_soc2;
+	        print $user2->getNomUrl(-1,'',0,0,24,0,'');
+            if (! empty($conf->multicompany->enabled) && $obj->admin2 && ! $obj->entity2)
+            {
+              	print img_picto($langs->trans("SuperAdministrator"),'redstar');
+            }
+            else if ($obj->admin2)
+            {
+            	print img_picto($langs->trans("Administrator"),'star');
+            }
+        }
+        print '</td>';
+	}		
+    
+    // Date last login
     if (! empty($arrayfields['u.datelastlogin']['checked']))
-    {
-        print '<td></td>';
-    }
+	{
+        print '<td class="nowrap" align="center">'.dol_print_date($db->jdate($obj->datelastlogin),"dayhour").'</td>';
+	}
+    // Date previous login
     if (! empty($arrayfields['u.datepreviouslogin']['checked']))
-    {
-        print '<td></td>';
-    }
+	{
+        print '<td class="nowrap" align="center">'.dol_print_date($db->jdate($obj->datepreviouslogin),"dayhour").'</td>';
+	}
+    
 	// Extra fields
 	if (is_array($extrafields->attribute_label) && count($extrafields->attribute_label))
 	{
@@ -390,260 +609,55 @@ if ($result)
 	   {
 			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';
+				$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['u.datec']['checked']))
     {
-        // Date creation
-        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['u.tms']['checked']))
     {
-        // Date modification
-        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['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>';
+	  $userstatic->statut=$obj->statut;
+      print '<td align="center">'.$userstatic->getLibStatut(3).'</td>';
     }
     // Action column
-    print '<td class="liste_titre" align="right">';
-    $searchpitco=$form->showFilterAndCheckAddButtons(0);
-    print $searchpitco;
-    print '</td>';
-	
-    print "</tr>\n";
-
-    $user2=new User($db);
+    print '<td></td>';
 
-    $var=True;
-	$i = 0;
-	while ($i < min($num,$limit))
-    {
-        $obj = $db->fetch_object($result);
-        $var=!$var;
-
-		$userstatic->id=$obj->rowid;
-		$userstatic->ref=$obj->label;
-		$userstatic->login=$obj->login;
-		$userstatic->statut=$obj->statut;
-	    $userstatic->email=$obj->email;
-	    $userstatic->gender=$obj->gender;
-	    $userstatic->societe_id=$obj->fk_soc;
-	    $userstatic->firstname=$obj->firstname;
-		$userstatic->lastname=$obj->lastname;
-		$userstatic->employee=$obj->employee;
-		$userstatic->photo=$obj->photo;
-        
-		$li=$userstatic->getNomUrl(-1,'',0,0,24,1,'login');
-
-        print "<tr ".$bc[$var].">";
-        if (! empty($arrayfields['u.login']['checked']))
-		{
-		    print '<td>';
-    		print $li;
-            if (! empty($conf->multicompany->enabled) && $obj->admin && ! $obj->entity)
-            {
-              	print img_picto($langs->trans("SuperAdministrator"),'redstar');
-            }
-            else if ($obj->admin)
-            {
-            	print img_picto($langs->trans("Administrator"),'star');
-            }
-            print '</td>';
-		}
-        if (! empty($arrayfields['u.lastname']['checked']))
-		{
-		      print '<td>'.$obj->lastname.'</td>';
-		}
-        if (! empty($arrayfields['u.firstname']['checked']))
-		{
-		  print '<td>'.$obj->firstname.'</td>';
-		}
-        if (! empty($arrayfields['u.gender']['checked']))
-		{
-		  print '<td>';
-		  if ($obj->gender) print $langs->trans("Gender".$obj->gender);
-		  print '</td>';
-		}
-        if (! empty($arrayfields['u.employee']['checked']))
-		{
-		  print '<td>'.yn($obj->employee).'</td>';
-		}
-		if (! empty($arrayfields['u.accountancy_code']['checked']))
-		{
-		  print '<td>'.$obj->accountancy_code.'</td>';
-		}
-        if (! empty($arrayfields['u.email']['checked']))
-		{
-		  print '<td>'.$obj->email.'</td>';
-		}
-		if (! empty($arrayfields['u.fk_soc']['checked']))
-		{
-    		print "<td>";
-            if ($obj->fk_soc)
-            {
-                $companystatic->id=$obj->fk_soc;
-                $companystatic->name=$obj->name;
-                $companystatic->canvas=$obj->canvas;
-                print $companystatic->getNomUrl(1);
-            }
-            else if ($obj->ldap_sid)
-            {
-            	print $langs->trans("DomainUser");
-            }
-            else
-           {
-            	print $langs->trans("InternalUser");
-            }
-            print '</td>';
-		}
-        // Multicompany enabled
-        if (! empty($conf->multicompany->enabled) && empty($conf->multicompany->transverse_mode))
-        {
-            if (! empty($arrayfields['u.entity']['checked']))
-    		{
-                print '<td>';
-            	if (! $obj->entity)
-            	{
-            		print $langs->trans("AllEntities");
-            	}
-            	else
-            	{
-            		// $mc is defined in conf.class.php if multicompany enabled.
-            		if (is_object($mc))
-            		{
-            			$mc->getInfo($obj->entity);
-            			print $mc->label;
-            		}
-            	}
-            	print '</td>';
-    		}
-        }
-        // Supervisor
-        if (! empty($arrayfields['u.fk_user']['checked']))
-		{
-    		// Resp
-            print '<td class="nowrap">';
-            if ($obj->login2)
-            {
-    	        $user2->id=$obj->id2;
-    	        $user2->login=$obj->login2;
-    	        $user2->lastname=$obj->lastname2;
-    	        $user2->firstname=$obj->firstname2;
-    	        $user2->gender=$obj->gender2;
-    	        $user2->photo=$obj->photo2;
-    	        $user2->admin=$obj->admin2;
-    	        $user2->email=$obj->email2;
-    	        $user2->societe_id=$obj->fk_soc2;
-    	        print $user2->getNomUrl(-1,'',0,0,24,0,'');
-                if (! empty($conf->multicompany->enabled) && $obj->admin2 && ! $obj->entity2)
-                {
-                  	print img_picto($langs->trans("SuperAdministrator"),'redstar');
-                }
-                else if ($obj->admin2)
-                {
-                	print img_picto($langs->trans("Administrator"),'star');
-                }
-            }
-            print '</td>';
-		}		
-        
-        // Date last login
-        if (! empty($arrayfields['u.datelastlogin']['checked']))
-    	{
-            print '<td class="nowrap" align="center">'.dol_print_date($db->jdate($obj->datelastlogin),"dayhour").'</td>';
-    	}
-        // Date previous login
-        if (! empty($arrayfields['u.datepreviouslogin']['checked']))
-    	{
-            print '<td class="nowrap" align="center">'.dol_print_date($db->jdate($obj->datepreviouslogin),"dayhour").'</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';
-					$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['u.datec']['checked']))
-        {
-            print '<td align="center">';
-            print dol_print_date($db->jdate($obj->date_creation), 'dayhour');
-            print '</td>';
-        }
-        // Date modification
-        if (! empty($arrayfields['u.tms']['checked']))
-        {
-            print '<td align="center">';
-            print dol_print_date($db->jdate($obj->date_update), 'dayhour');
-            print '</td>';
-        }
-        // Status
-        if (! empty($arrayfields['u.statut']['checked']))
-        {
-		  $userstatic->statut=$obj->statut;
-          print '<td align="center">'.$userstatic->getLibStatut(3).'</td>';
-        }
-        // Action column
-        print '<td></td>';
+    print "</tr>\n";
+    $i++;
+}
 
-        print "</tr>\n";
-        $i++;
-    }
+$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;
 
-	$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 "</table>";
+print "</form>\n";
+$db->free($result);
 
-    print "</table>";
-    print "</form>\n";
-    $db->free($result);
-}
-else
-{
-    dol_print_error($db);
-}
 
 llxFooter();
-
 $db->close();