diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index c9ec77c76dec57964d8900f5e0203c47bb4d1b79..4e17c62d3f5281e6f679bd5bde566288e6749a0c 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -264,6 +264,8 @@ function GETPOST($paramname, $check='', $method=0, $filter=NULL, $options=NULL) { global $mysoc,$user,$conf; + if (empty($paramname)) return 'BadFirstParameterForGETPOST'; + if (empty($method)) $out = isset($_GET[$paramname])?$_GET[$paramname]:(isset($_POST[$paramname])?$_POST[$paramname]:''); elseif ($method==1) $out = isset($_GET[$paramname])?$_GET[$paramname]:''; elseif ($method==2) $out = isset($_POST[$paramname])?$_POST[$paramname]:''; @@ -279,11 +281,11 @@ function GETPOST($paramname, $check='', $method=0, $filter=NULL, $options=NULL) $relativepathstring = preg_replace('/^\//', '', $relativepathstring); // Management of default values - if (! isset($_GET['sortfield']) && ! empty($conf->global->MAIN_ENABLE_DEFAULT_VALUES)) // If we did a click on a field to sort, we do no apply default values. Same if option MAIN_DISABLE_DEFAULT_VALUES is on + if (! isset($_GET['sortfield']) && ! empty($conf->global->MAIN_ENABLE_DEFAULT_VALUES)) // If we did a click on a field to sort, we do no apply default values. Same if option MAIN_ENABLE_DEFAULT_VALUES is not set { - if (! empty($_GET['action']) && $_GET['action'] == 'create' && ! empty($paramname) && ! isset($_GET[$paramname]) && ! isset($_POST[$paramname])) + if (! empty($_GET['action']) && $_GET['action'] == 'create' && ! isset($_GET[$paramname]) && ! isset($_POST[$paramname])) { - if (! empty($user->default_values)) // $user->default_values defined from menu default values, and values loaded not at first + if (! empty($user->default_values)) // $user->default_values defined from menu default values { //var_dump($user->default_values[$relativepathstring]['createform']); if (isset($user->default_values[$relativepathstring]['createform'][$paramname])) $out = $user->default_values[$relativepathstring]['createform'][$paramname]; @@ -328,11 +330,34 @@ function GETPOST($paramname, $check='', $method=0, $filter=NULL, $options=NULL) } } } + + // Retrieve values into restore_lastsearch_values + if ($_GET['restore_lastsearch_values']) // Keep $_GET here + { + if (! empty($_SESSION['lastsearch_values_'.$relativepathstring])) + { + $tmp=json_decode($_SESSION['lastsearch_values_'.$relativepathstring], true); + if (is_array($tmp)) + { + foreach($tmp as $key => $val) + { + if ($key == $paramname) + { + $out=$val; + break; + } + } + } + } + } + } if (empty($check) && ! empty($conf->global->MAIN_FEATURES_LEVEL) && $conf->global->MAIN_FEATURES_LEVEL >= 2) { dol_syslog("Deprecated use of GETPOST, called with 1st param = ".$paramname." and 2nd param not defined, when calling page ".$_SERVER["PHP_SELF"], LOG_WARNING); + // Enable this line to know who call the GETPOST with empty $check parameter. + //var_dump(debug_backtrace()[0]); } if (! empty($check)) @@ -423,14 +448,23 @@ function GETPOST($paramname, $check='', $method=0, $filter=NULL, $options=NULL) } } + // Code for search criteria persistence. // Save data into session if key start with 'search_' or is 'smonth', 'syear', 'month', 'year' if (empty($method) || $method == 3 || $method == 4) { //if (preg_match('/^search_/', $paramname) || in_array($paramname, array('sortorder', 'sortfield", 'smonth', 'syear', 'month', 'year'))) if (preg_match('/^search_/', $paramname) || in_array($paramname, array('sortorder','sortfield'))) { + //var_dump($user->default_values[$relativepathstring]);exit; //if ($paramname == 'sortorder') var_dump($paramname.' - '.$out); - $user->lastsearch_values_tmp[$relativepathstring][$paramname]=$out; + + // We save search key only if: + // - not empty, or + // - if value is empty and a default value exists that is not empty (it means we did a filter to an empty value when default was not). + if (! empty($out) || ! empty($user->default_values[$relativepathstring][$paramname])) + { + $user->lastsearch_values_tmp[$relativepathstring][$paramname]=$out; + } } } diff --git a/htdocs/core/menus/standard/auguria.lib.php b/htdocs/core/menus/standard/auguria.lib.php index 7272eb000d4f547d9a1772c671fd6cafecde5442..3cc9c569120c22f9d51e9800b21de251b7b2a87d 100644 --- a/htdocs/core/menus/standard/auguria.lib.php +++ b/htdocs/core/menus/standard/auguria.lib.php @@ -103,6 +103,14 @@ function print_auguria_menu($db,$atarget,$type_user,&$tabMenu,&$menu,$noout=0,$m $url=preg_replace('/__USERID__/',$user->id,$url); $shorturl=preg_replace('/__USERID__/',$user->id,$shorturl); + // TODO Find a generic solution + if (preg_match('/search_project_user=__search_project_user__/', $shorturl)) + { + $search_project_user = GETPOST('search_project_user','int'); + if ($search_project_user) $shorturl=preg_replace('/search_project_user=__search_project_user__/', 'search_project_user='.$search_project_user, $shorturl); + else $shorturl=preg_replace('/search_project_user=__search_project_user__/', '', $shorturl); + } + // Define the class (top menu selected or not) if (! empty($_SESSION['idmenu']) && $newTabMenu[$i]['rowid'] == $_SESSION['idmenu']) $classname='class="tmenusel"'; else if (! empty($_SESSION["mainmenu"]) && $newTabMenu[$i]['mainmenu'] == $_SESSION["mainmenu"]) $classname='class="tmenusel"'; diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 4aa5064977deb106259dea9bd66327f6a881149a..521fd6831f21893d3e43129d96a69950ff08d18f 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -1299,11 +1299,13 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu if (! empty($conf->projet->enabled)) { $langs->load("projects"); - + + $search_project_user = GETPOST('search_project_user','int'); + // Project affected to user - $newmenu->add("/projet/index.php?leftmenu=projects&search_project_user=".GETPOST('search_project_user'), $langs->trans("Projects"), 0, $user->rights->projet->lire, '', $mainmenu, 'projects'); - $newmenu->add("/projet/card.php?leftmenu=projects&action=create&search_project_user=".GETPOST('search_project_user'), $langs->trans("NewProject"), 1, $user->rights->projet->creer); - $newmenu->add("/projet/list.php?leftmenu=projects&search_project_user=".GETPOST('search_project_user')."&search_status=99", $langs->trans("List"), 1, $user->rights->projet->lire); + $newmenu->add("/projet/index.php?leftmenu=projects".($search_project_user?'&search_project_user='.$search_project_user:''), $langs->trans("Projects"), 0, $user->rights->projet->lire, '', $mainmenu, 'projects'); + $newmenu->add("/projet/card.php?leftmenu=projects&action=create".($search_project_user?'&search_project_user='.$search_project_user:''), $langs->trans("NewProject"), 1, $user->rights->projet->creer); + $newmenu->add("/projet/list.php?leftmenu=projects".($search_project_user?'&search_project_user='.$search_project_user:'')."&search_status=99", $langs->trans("List"), 1, $user->rights->projet->lire); // All project i have permission on /* @@ -1316,10 +1318,10 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu if (empty($conf->global->PROJECT_HIDE_TASKS)) { // Project affected to user - $newmenu->add("/projet/activity/index.php?leftmenu=tasks&search_project_user=".GETPOST('search_project_user'), $langs->trans("Activities"), 0, $user->rights->projet->lire); + $newmenu->add("/projet/activity/index.php?leftmenu=tasks".($search_project_user?'&search_project_user='.$search_project_user:''), $langs->trans("Activities"), 0, $user->rights->projet->lire); $newmenu->add("/projet/tasks.php?leftmenu=tasks&action=create", $langs->trans("NewTask"), 1, $user->rights->projet->creer); - $newmenu->add("/projet/tasks/list.php?leftmenu=tasks&search_project_user=".GETPOST('search_project_user'), $langs->trans("List"), 1, $user->rights->projet->lire); - $newmenu->add("/projet/activity/perweek.php?leftmenu=tasks&search_project_user=".GETPOST('search_project_user'), $langs->trans("NewTimeSpent"), 1, $user->rights->projet->lire); + $newmenu->add("/projet/tasks/list.php?leftmenu=tasks".($search_project_user?'&search_project_user='.$search_project_user:''), $langs->trans("List"), 1, $user->rights->projet->lire); + $newmenu->add("/projet/activity/perweek.php?leftmenu=tasks".($search_project_user?'&search_project_user='.$search_project_user:''), $langs->trans("NewTimeSpent"), 1, $user->rights->projet->lire); // All project i have permission on /*$newmenu->add("/projet/activity/index.php", $langs->trans("Activities"), 0, $user->rights->projet->lire && $user->rights->projet->lire); diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index d632e91d5379cf7659291c9bf3f8d8a3f41bf460..73f0a8154136a4b8f680b0edbc40acdc7d4d9cd1 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -646,6 +646,7 @@ if (! defined('NOLOGIN')) // Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array $hookmanager->initHooks(array('main')); + // Code for search criteria persistence. if (! empty($_GET['save_lastsearch_values'])) // Keep $_GET here { $relativepathstring = preg_replace('/\?.*$/','',$_SERVER["HTTP_REFERER"]); @@ -1886,6 +1887,7 @@ if (! function_exists("llxFooter")) // Global html output events ($mesgs, $errors, $warnings) dol_htmloutput_events(); + // Code for search criteria persistence. // Save $user->lastsearch_values if defined (define on list pages when a form field search_xxx exists) if (is_object($user) && ! empty($user->lastsearch_values_tmp) && is_array($user->lastsearch_values_tmp)) { @@ -1897,7 +1899,7 @@ if (! function_exists("llxFooter")) { if (empty($val['sortfield'])) unset($val['sortfield']); if (empty($val['sortorder'])) unset($val['sortorder']); - dol_syslog('Save lastsearch_values_tmp_'.$key.'='.json_encode($val, 0, 1)); + dol_syslog('Save lastsearch_values_tmp_'.$key.'='.json_encode($val, 0, 1)." (systematic recording of last search criteria)"); $_SESSION['lastsearch_values_tmp_'.$key]=json_encode($val); unset($_SESSION['lastsearch_values_'.$key]); } diff --git a/htdocs/projet/card.php b/htdocs/projet/card.php index 47d0f1c3148073a19c163c89f1b38e6a36ab2d13..f6355ec556698199563d3d394a1a50d04a2e14df 100644 --- a/htdocs/projet/card.php +++ b/htdocs/projet/card.php @@ -837,7 +837,7 @@ elseif ($object->id > 0) { // Project card - $linkback = '<a href="'.DOL_URL_ROOT.'/projet/list.php">'.$langs->trans("BackToList").'</a>'; + $linkback = '<a href="'.DOL_URL_ROOT.'/projet/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>'; $morehtmlref='<div class="refidno">'; // Title diff --git a/htdocs/projet/contact.php b/htdocs/projet/contact.php index e843d4951e4f146cda9674ad6aceb8042641d037..72b82ac2bb0c8273273685677a09c60bcd7bf7fa 100644 --- a/htdocs/projet/contact.php +++ b/htdocs/projet/contact.php @@ -151,7 +151,7 @@ if ($id > 0 || ! empty($ref)) // Project card - $linkback = '<a href="'.DOL_URL_ROOT.'/projet/list.php">'.$langs->trans("BackToList").'</a>'; + $linkback = '<a href="'.DOL_URL_ROOT.'/projet/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>'; $morehtmlref='<div class="refidno">'; // Title diff --git a/htdocs/projet/document.php b/htdocs/projet/document.php index 2d5a6cd71d028aa6d8bbf74e80a8f56ee030d892..21dd30f560c55dedf7075cafe75f6eae58d71471 100644 --- a/htdocs/projet/document.php +++ b/htdocs/projet/document.php @@ -109,7 +109,7 @@ if ($object->id > 0) // Project card - $linkback = '<a href="'.DOL_URL_ROOT.'/projet/list.php">'.$langs->trans("BackToList").'</a>'; + $linkback = '<a href="'.DOL_URL_ROOT.'/projet/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>'; $morehtmlref='<div class="refidno">'; // Title diff --git a/htdocs/projet/element.php b/htdocs/projet/element.php index 8aebe756d70934d1e4888a89f794208de7d994d0..f745c71d76152be58860241602bc77ba72fb7260 100644 --- a/htdocs/projet/element.php +++ b/htdocs/projet/element.php @@ -128,7 +128,7 @@ dol_fiche_head($head, 'element', $langs->trans("Project"), -1, ($object->public? // Project card -$linkback = '<a href="'.DOL_URL_ROOT.'/projet/list.php">'.$langs->trans("BackToList").'</a>'; +$linkback = '<a href="'.DOL_URL_ROOT.'/projet/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>'; $morehtmlref='<div class="refidno">'; // Title diff --git a/htdocs/projet/ganttview.php b/htdocs/projet/ganttview.php index 36fbfccca775e95a85467ede4656b2a4e582bca7..7ec9dcf1a4b2585d29795d920e712fa049da54bd 100644 --- a/htdocs/projet/ganttview.php +++ b/htdocs/projet/ganttview.php @@ -102,7 +102,7 @@ if ($id > 0 || ! empty($ref)) // Project card - $linkback = '<a href="'.DOL_URL_ROOT.'/projet/list.php">'.$langs->trans("BackToList").'</a>'; + $linkback = '<a href="'.DOL_URL_ROOT.'/projet/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>'; $morehtmlref='<div class="refidno">'; // Title diff --git a/htdocs/projet/index.php b/htdocs/projet/index.php index 8295e106be99eb940e0c63a76b09a0565a9a4280..c7f0181dbf5c18831ecac931644a6281be652848 100644 --- a/htdocs/projet/index.php +++ b/htdocs/projet/index.php @@ -33,7 +33,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; $langs->load("projects"); $langs->load("companies"); -$mine = GETPOST('mode')=='mine' ? 1 : 0; +$mine = GETPOST('mode','aZ09')=='mine' ? 1 : 0; $search_project_user = GETPOST('search_project_user','int'); // Security check diff --git a/htdocs/projet/info.php b/htdocs/projet/info.php index 3206fd51244ed76dacab3c827bfae6f554bb847d..74015626b9ecc017bd94333ae6a89a052d0d103a 100644 --- a/htdocs/projet/info.php +++ b/htdocs/projet/info.php @@ -112,7 +112,7 @@ dol_fiche_head($head, 'agenda', $langs->trans("Project"), -1, ($object->public?' // Project card -$linkback = '<a href="'.DOL_URL_ROOT.'/projet/list.php">'.$langs->trans("BackToList").'</a>'; +$linkback = '<a href="'.DOL_URL_ROOT.'/projet/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>'; $morehtmlref='<div class="refidno">'; // Title diff --git a/htdocs/projet/note.php b/htdocs/projet/note.php index 9a73e4816666476d7b6163980dcce86560f62822..88217fbfb1c480cebcd22641357f69e122141d0b 100644 --- a/htdocs/projet/note.php +++ b/htdocs/projet/note.php @@ -30,7 +30,7 @@ $langs->load('projects'); $action=GETPOST('action','aZ09'); $id = GETPOST('id','int'); -$ref= GETPOST('ref'); +$ref= GETPOST('ref','alpha'); $mine = $_REQUEST['mode']=='mine' ? 1 : 0; //if (! $user->rights->projet->all->lire) $mine=1; // Special for projects @@ -82,7 +82,7 @@ if ($id > 0 || ! empty($ref)) // Project card - $linkback = '<a href="'.DOL_URL_ROOT.'/projet/list.php">'.$langs->trans("BackToList").'</a>'; + $linkback = '<a href="'.DOL_URL_ROOT.'/projet/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>'; $morehtmlref='<div class="refidno">'; // Title diff --git a/htdocs/projet/tasks.php b/htdocs/projet/tasks.php index e8a949f3191e1c082c0c89d152dc80a7b83918a6..85fa0f640e9cece845dcb09f3e4176e3e4f28c1d 100644 --- a/htdocs/projet/tasks.php +++ b/htdocs/projet/tasks.php @@ -225,7 +225,7 @@ if ($id > 0 || ! empty($ref)) // Project card - $linkback = '<a href="'.DOL_URL_ROOT.'/projet/list.php">'.$langs->trans("BackToList").'</a>'; + $linkback = '<a href="'.DOL_URL_ROOT.'/projet/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>'; $morehtmlref='<div class="refidno">'; // Title