diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 36487801ad01c810f07e939f1d828d740402e016..dc4e8c9e081f37d0cb249c6946df8b493e79050d 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -4957,9 +4957,10 @@ function dol_getmypid() * If param $numeric is 0, can contains several keywords separated with a space, like "keyword1 keyword2" = We want record field like keyword1 and field like keyword2 * If param $numeric is 1, can contains an operator <>= like "<10" or ">=100.5 < 1000" * @param integer $numeric 0=value is list of keywords, 1=value is a numeric test + * @param integer $nofinaland Do now output the final 'AND' * @return string $res The statement to append to the SQL query */ -function natural_search($fields, $value, $numeric=0) +function natural_search($fields, $value, $numeric=0, $nofinaland) { global $db,$langs; @@ -5014,7 +5015,7 @@ function natural_search($fields, $value, $numeric=0) if ($newres) $res = $res . ($res ? ' AND ' : '') . ($i2 > 1 ? '(' : '') .$newres . ($i2 > 1 ? ')' : ''); $j++; } - $res = " AND (" . $res . ")"; + $res = ($nofinaland?"":" AND ")."(" . $res . ")"; //print 'xx'.$res.'yy'; return $res; } diff --git a/htdocs/projet/class/task.class.php b/htdocs/projet/class/task.class.php index 3fb2586625e6914ebbd3bdb64f87d0129b4ff72c..81625730950f4af06e95f0cf6e7058b8fdcdd4ac 100644 --- a/htdocs/projet/class/task.class.php +++ b/htdocs/projet/class/task.class.php @@ -561,9 +561,10 @@ class Task extends CommonObject * @param int $mode 0=Return list of tasks and their projects, 1=Return projects and tasks if exists * @param string $filteronprojref Filter on project ref * @param string $filteronprojstatus Filter on project status + * @param string $morewherefilter Add more filter into where SQL request * @return array Array of tasks */ - function getTasksArray($usert=0, $userp=0, $projectid=0, $socid=0, $mode=0, $filteronprojref='', $filteronprojstatus=-1) + function getTasksArray($usert=0, $userp=0, $projectid=0, $socid=0, $mode=0, $filteronprojref='', $filteronprojstatus=-1, $morewherefilter='') { global $conf; @@ -573,8 +574,8 @@ class Task extends CommonObject // List of tasks (does not care about permissions. Filtering will be done later) $sql = "SELECT p.rowid as projectid, p.ref, p.title as plabel, p.public, p.fk_statut,"; - $sql.= " t.rowid as taskid, t.label, t.description, t.fk_task_parent, t.duration_effective, t.progress,"; - $sql.= " t.dateo as date_start, t.datee as date_end, t.planned_workload, t.ref as ref_task,t.rang"; + $sql.= " t.rowid as taskid, t.ref as taskref, t.label, t.description, t.fk_task_parent, t.duration_effective, t.progress,"; + $sql.= " t.dateo as date_start, t.datee as date_end, t.planned_workload, t.rang"; if ($mode == 0) { $sql.= " FROM ".MAIN_DB_PREFIX."projet as p"; @@ -594,6 +595,7 @@ class Task extends CommonObject } if ($filteronprojref) $sql.= " AND p.ref LIKE '%".$filteronprojref."%'"; if ($filteronprojstatus > -1) $sql.= " AND p.fk_statut = ".$filteronprojstatus; + if ($morewherefilter) $sql.=" AND (".$morewherefilter.")"; $sql.= " ORDER BY p.ref, t.rang, t.dateo"; //print $sql;exit; @@ -629,7 +631,7 @@ class Task extends CommonObject { $tasks[$i] = new Task($this->db); $tasks[$i]->id = $obj->taskid; - $tasks[$i]->ref = $obj->ref_task; + $tasks[$i]->ref = $obj->taskref; $tasks[$i]->fk_project = $obj->projectid; $tasks[$i]->projectref = $obj->ref; $tasks[$i]->projectlabel = $obj->plabel; diff --git a/htdocs/projet/tasks/index.php b/htdocs/projet/tasks/index.php index eec483907b01803ac54bdd7bd790166791f83310..c9e30d30f7d989e3f19fd0fcbf52a7b02cf76d1f 100644 --- a/htdocs/projet/tasks/index.php +++ b/htdocs/projet/tasks/index.php @@ -36,6 +36,8 @@ $id=GETPOST('id','int'); $search_project=GETPOST('search_project'); if (! isset($_GET['search_status']) && ! isset($_POST['search_status'])) $search_status=1; else $search_status=GETPOST('search_status'); +$search_task_ref=GETPOST('search_task_ref'); +$search_task_label=GETPOST('search_task_label'); // Security check @@ -56,9 +58,19 @@ if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both { $search_project=""; $search_status=""; + $search_task_ref=""; + $search_task_label=""; } if (empty($search_status)) $search_status=1; + +/* + * Actions + */ + +// None + + /* * View */ @@ -93,7 +105,10 @@ $projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,$mine,1,$so // Get list of tasks in tasksarray and taskarrayfiltered // We need all tasks (even not limited to a user because a task assigned to a user can have a parent that is not assigned to him and we need such parents). -$tasksarray=$taskstatic->getTasksArray(0, 0, $projectstatic->id, $socid, 0, $search_project, $search_status); +$morewherefilter=''; +if ($search_task_ref) $morewherefilter.=natural_search('t.ref', $search_task_ref, 0, 1); +if ($search_task_label) $morewherefilter.=natural_search('t.label', $search_task_label, 0, 1); +$tasksarray=$taskstatic->getTasksArray(0, 0, $projectstatic->id, $socid, 0, $search_project, $search_status, $morewherefilter); // We load also tasks limited to a particular user $tasksrole=($mine ? $taskstatic->getUserRolesForProjectsOrTasks(0,$user,$projectstatic->id,0) : ''); @@ -126,7 +141,13 @@ $listofstatus=array(-1=>' '); foreach($projectstatic->statuts_short as $key => $val) $listofstatus[$key]=$langs->trans($val); print $form->selectarray('search_status', $listofstatus, $search_status); print '</td>'; -print '<td class="liste_titre" colspan="7">'; +print '<td class="liste_titre">'; +print '<input type="text" class="flat" name="search_task_ref" value="'.$search_task_ref.'" size="4">'; +print '</td>'; +print '<td class="liste_titre">'; +print '<input type="text" class="flat" name="search_task_label" value="'.$search_task_label.'" size="8">'; +print '</td>'; +print '<td class="liste_titre" colspan="5">'; print ' '; print '<td class="liste_titre nowrap" align="right">'; print '<input type="image" class="liste_titre" name="button_search" src="'.img_picto($langs->trans("Search"),'search.png','','',1).'" value="'.dol_escape_htmltag($langs->trans("Search")).'" title="'.dol_escape_htmltag($langs->trans("Search")).'">';