';
}
diff --git a/htdocs/projet/card.php b/htdocs/projet/card.php
index c05cb6948a5..51939d8e9fc 100644
--- a/htdocs/projet/card.php
+++ b/htdocs/projet/card.php
@@ -708,7 +708,7 @@ else
// Define a complementary filter for search of next/prev ref.
if (! $user->rights->projet->all->lire)
{
- $objectsListId = $object->getProjectsAuthorizedForUser($user,$mine,0);
+ $objectsListId = $object->getProjectsAuthorizedForUser($user,0,0);
$object->next_prev_filter=" rowid in (".(count($objectsListId)?join(',',array_keys($objectsListId)):'0').")";
}
print $form->showrefnav($object, 'ref', $linkback, 1, 'ref', 'ref');
diff --git a/htdocs/projet/class/task.class.php b/htdocs/projet/class/task.class.php
index c6c5f65f63d..0b490aff863 100644
--- a/htdocs/projet/class/task.class.php
+++ b/htdocs/projet/class/task.class.php
@@ -557,10 +557,10 @@ class Task extends CommonObject
* @param string $filteronprojstatus Filter on project status
* @param string $morewherefilter Add more filter into where SQL request
* @param string $filteronprojuser Filter on user that is a contact of project
- * @param string $filterontaskuse Filter on user assigned to task
+ * @param string $filterontaskuser Filter on user assigned to task
* @return array Array of tasks
*/
- function getTasksArray($usert=0, $userp=0, $projectid=0, $socid=0, $mode=0, $filteronprojref='', $filteronprojstatus=-1, $morewherefilter='',$filteronprojuser=0,$filterontaskuse=0)
+ function getTasksArray($usert=0, $userp=0, $projectid=0, $socid=0, $mode=0, $filteronprojref='', $filteronprojstatus=-1, $morewherefilter='',$filteronprojuser=0,$filterontaskuser=0)
{
global $conf;
@@ -587,11 +587,11 @@ class Task extends CommonObject
}
else return 'BadValueForParameterMode';
- if ($filteronprojuser)
+ if ($filteronprojuser > 0)
{
// TODO
}
- if ($filterontaskuser)
+ if ($filterontaskuser > 0)
{
// TODO
}
@@ -665,15 +665,16 @@ class Task extends CommonObject
}
/**
- * Return list of roles for a user for each projects or each tasks (or a particular project or task).
+ * Return list of roles for a user for each projects or each tasks (or a particular project or a particular task).
*
- * @param User $userp Return roles on project for this internal user (task id can't be defined)
- * @param User $usert Return roles on task for this internal user
- * @param int $projectid Project id list separated with , to filter on project
- * @param int $taskid Task id to filter on a task
- * @return array Array (projectid => 'list of roles for project' or taskid => 'list of roles for task')
+ * @param User $userp Return roles on project for this internal user. If set, usert and taskid must not be defined.
+ * @param User $usert Return roles on task for this internal user. If set userp must not be defined.
+ * @param int $projectid Project id list separated with , to filter on project
+ * @param int $taskid Task id to filter on a task
+ * @param string $filteronprojstatus Filter on project status if userp is set. Not used if userp not defined.
+ * @return array Array (projectid => 'list of roles for project' or taskid => 'list of roles for task')
*/
- function getUserRolesForProjectsOrTasks($userp,$usert,$projectid='',$taskid=0)
+ function getUserRolesForProjectsOrTasks($userp, $usert, $projectid='', $taskid=0, $filteronprojstatus=-1)
{
$arrayroles = array();
@@ -694,10 +695,12 @@ class Task extends CommonObject
/* Liste des taches et role sur les projets ou taches */
$sql = "SELECT pt.rowid as pid, ec.element_id, ctc.code, ctc.source";
if ($userp) $sql.= " FROM ".MAIN_DB_PREFIX."projet as pt";
- if ($usert) $sql.= " FROM ".MAIN_DB_PREFIX."projet_task as pt";
+ if ($usert) $sql.= " FROM ".MAIN_DB_PREFIX."projet as p, ".MAIN_DB_PREFIX."projet_task as pt";
$sql.= ", ".MAIN_DB_PREFIX."element_contact as ec";
$sql.= ", ".MAIN_DB_PREFIX."c_type_contact as ctc";
$sql.= " WHERE pt.rowid = ec.element_id";
+ if ($userp && $filteronprojstatus > -1) $sql.= " AND pt.fk_statut = ".$filteronprojstatus;
+ if ($usert && $filteronprojstatus > -1) $sql.= " AND pt.fk_projet = p.rowid AND p.fk_statut = ".$filteronprojstatus;
if ($userp) $sql.= " AND ctc.element = 'project'";
if ($usert) $sql.= " AND ctc.element = 'project_task'";
$sql.= " AND ctc.rowid = ec.fk_c_type_contact";
diff --git a/htdocs/projet/contact.php b/htdocs/projet/contact.php
index d20ad16c9fa..f2d44e74dca 100644
--- a/htdocs/projet/contact.php
+++ b/htdocs/projet/contact.php
@@ -161,7 +161,7 @@ if ($id > 0 || ! empty($ref))
// Define a complementary filter for search of next/prev ref.
if (! $user->rights->projet->all->lire)
{
- $objectsListId = $object->getProjectsAuthorizedForUser($user,$mine,0);
+ $objectsListId = $object->getProjectsAuthorizedForUser($user,0,0);
$object->next_prev_filter=" rowid in (".(count($objectsListId)?join(',',array_keys($objectsListId)):'0').")";
}
print $form->showrefnav($object, 'ref', $linkback, 1, 'ref', 'ref', '');
diff --git a/htdocs/projet/document.php b/htdocs/projet/document.php
index 44332ff558c..ce033f0e193 100644
--- a/htdocs/projet/document.php
+++ b/htdocs/projet/document.php
@@ -115,7 +115,7 @@ if ($object->id > 0)
// Define a complementary filter for search of next/prev ref.
if (! $user->rights->projet->all->lire)
{
- $projectsListId = $object->getProjectsAuthorizedForUser($user,$mine,0);
+ $projectsListId = $object->getProjectsAuthorizedForUser($user,0,0);
$object->next_prev_filter=" rowid in (".(count($projectsListId)?join(',',array_keys($projectsListId)):'0').")";
}
print $form->showrefnav($object, 'ref', $linkback, 1, 'ref', 'ref');
diff --git a/htdocs/projet/element.php b/htdocs/projet/element.php
index 6ef8edcc459..ff3e3c32218 100644
--- a/htdocs/projet/element.php
+++ b/htdocs/projet/element.php
@@ -125,7 +125,7 @@ print '
'.$langs->trans("Ref").'
';
// Define a complementary filter for search of next/prev ref.
if (! $user->rights->projet->all->lire)
{
- $projectsListId = $object->getProjectsAuthorizedForUser($user,$mine,0);
+ $projectsListId = $object->getProjectsAuthorizedForUser($user,0,0);
$object->next_prev_filter=" rowid in (".(count($projectsListId)?join(',',array_keys($projectsListId)):'0').")";
}
print $form->showrefnav($object, 'ref', $linkback, 1, 'ref', 'ref');
diff --git a/htdocs/projet/ganttview.php b/htdocs/projet/ganttview.php
index 4bafee55e82..091059d76e3 100644
--- a/htdocs/projet/ganttview.php
+++ b/htdocs/projet/ganttview.php
@@ -109,7 +109,7 @@ if ($id > 0 || ! empty($ref))
// Define a complementary filter for search of next/prev ref.
if (! $user->rights->projet->all->lire)
{
- $projectsListId = $object->getProjectsAuthorizedForUser($user,$mine,0);
+ $projectsListId = $object->getProjectsAuthorizedForUser($user,0,0);
$object->next_prev_filter=" rowid in (".(count($projectsListId)?join(',',array_keys($projectsListId)):'0').")";
}
print $form->showrefnav($object, 'ref', $linkback, 1, 'ref', 'ref', '', $param);
diff --git a/htdocs/projet/list.php b/htdocs/projet/list.php
index a50595db609..3f9aea52444 100644
--- a/htdocs/projet/list.php
+++ b/htdocs/projet/list.php
@@ -60,8 +60,6 @@ $offset = $conf->liste_limit * $page ;
$pageprev = $page - 1;
$pagenext = $page + 1;
-$mine = $_REQUEST['mode']=='mine' ? 1 : 0;
-
$search_all=GETPOST("search_all");
$search_ref=GETPOST("search_ref");
$search_label=GETPOST("search_label");
@@ -75,6 +73,9 @@ $search_user=GETPOST('search_user','int');
$search_sale=GETPOST('search_sale','int');
$optioncss = GETPOST('optioncss','alpha');
+$mine = $_REQUEST['mode']=='mine' ? 1 : 0;
+if ($mine) $search_user = $user->id;
+
$day = GETPOST('day','int');
$month = GETPOST('month','int');
$year = GETPOST('year','int');
@@ -306,7 +307,7 @@ if ($resql)
if (empty($conf->global->PROJECT_LIST_HIDE_STARTDATE)) $colspan++;
- // If the user can view prospects other than his'
+ // If the user can view thirdparties other than his'
if ($user->rights->societe->client->voir || $socid)
{
$langs->load("commercial");
diff --git a/htdocs/projet/note.php b/htdocs/projet/note.php
index fe6137223d5..45c4cffd65b 100644
--- a/htdocs/projet/note.php
+++ b/htdocs/projet/note.php
@@ -88,7 +88,7 @@ if ($id > 0 || ! empty($ref))
// Define a complementary filter for search of next/prev ref.
if (! $user->rights->projet->all->lire)
{
- $projectsListId = $object->getProjectsAuthorizedForUser($user,$mine,0);
+ $projectsListId = $object->getProjectsAuthorizedForUser($user,0,0);
$object->next_prev_filter=" rowid in (".(count($projectsListId)?join(',',array_keys($projectsListId)):'0').")";
}
print $form->showrefnav($object, 'ref', $linkback, 1, 'ref', 'ref');
diff --git a/htdocs/projet/tasks.php b/htdocs/projet/tasks.php
index b73f3456324..63c2bd72f28 100644
--- a/htdocs/projet/tasks.php
+++ b/htdocs/projet/tasks.php
@@ -146,7 +146,7 @@ if ($action == 'createtask' && $user->rights->projet->creer)
}
else if (empty($projectid))
{
- header("Location: ".DOL_URL_ROOT.'/projet/tasks/index.php'.(empty($mode)?'':'?mode='.$mode));
+ header("Location: ".DOL_URL_ROOT.'/projet/tasks/list.php'.(empty($mode)?'':'?mode='.$mode));
exit;
}
$id = $projectid;
@@ -162,7 +162,7 @@ if ($action == 'createtask' && $user->rights->projet->creer)
else if (empty($id))
{
// We go back on task list
- header("Location: ".DOL_URL_ROOT.'/projet/tasks/index.php'.(empty($mode)?'':'?mode='.$mode));
+ header("Location: ".DOL_URL_ROOT.'/projet/tasks/list.php'.(empty($mode)?'':'?mode='.$mode));
exit;
}
}
@@ -215,7 +215,7 @@ if ($id > 0 || ! empty($ref))
// Define a complementary filter for search of next/prev ref.
if (! $user->rights->projet->all->lire)
{
- $projectsListId = $object->getProjectsAuthorizedForUser($user,$mine,0);
+ $projectsListId = $object->getProjectsAuthorizedForUser($user,0,0);
$object->next_prev_filter=" rowid in (".(count($projectsListId)?join(',',array_keys($projectsListId)):'0').")";
}
print $form->showrefnav($object, 'ref', $linkback, 1, 'ref', 'ref', '', $param);
diff --git a/htdocs/projet/tasks/contact.php b/htdocs/projet/tasks/contact.php
index 59dab34b33e..787bc8e120a 100644
--- a/htdocs/projet/tasks/contact.php
+++ b/htdocs/projet/tasks/contact.php
@@ -173,6 +173,8 @@ if ($id > 0 || ! empty($ref))
{
if ($object->fetch($id, $ref) > 0)
{
+ $id = $object->id; // So when doing a search from ref, id is also set correctly.
+
$result=$projectstatic->fetch($object->fk_project);
if (! empty($projectstatic->socid)) $projectstatic->fetch_thirdparty();
diff --git a/htdocs/projet/tasks/document.php b/htdocs/projet/tasks/document.php
index 1afc949cfa0..97a09ad1f87 100644
--- a/htdocs/projet/tasks/document.php
+++ b/htdocs/projet/tasks/document.php
@@ -143,7 +143,7 @@ if ($object->id > 0)
// Define a complementary filter for search of next/prev ref.
if (! $user->rights->projet->all->lire)
{
- $projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,$mine,0);
+ $projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,0,0);
$projectstatic->next_prev_filter=" rowid in (".(count($projectsListId)?join(',',array_keys($projectsListId)):'0').")";
}
print $form->showrefnav($projectstatic,'project_ref','',1,'ref','ref','',$param.'&withproject=1');
@@ -203,7 +203,7 @@ if ($object->id > 0)
print '
';
if (empty($withproject) || empty($projectstatic->id))
{
- $projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,$mine,1);
+ $projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,0,1);
$object->next_prev_filter=" fk_projet in (".$projectsListId.")";
}
else $object->next_prev_filter=" fk_projet = ".$projectstatic->id;
diff --git a/htdocs/projet/tasks/index.php b/htdocs/projet/tasks/list.php
similarity index 84%
rename from htdocs/projet/tasks/index.php
rename to htdocs/projet/tasks/list.php
index cd8e3af37bd..e3540afc1aa 100644
--- a/htdocs/projet/tasks/index.php
+++ b/htdocs/projet/tasks/list.php
@@ -1,6 +1,6 @@
- * Copyright (C) 2006-2014 Laurent Destailleur
+ * Copyright (C) 2006-2015 Laurent Destailleur
* Copyright (C) 2006-2010 Regis Houssin
*
* This program is free software; you can redistribute it and/or modify
@@ -18,7 +18,7 @@
*/
/**
- * \file htdocs/projet/tasks/index.php
+ * \file htdocs/projet/tasks/list.php
* \ingroup project
* \brief List all task of a project
*/
@@ -43,6 +43,9 @@ $search_task_label=GETPOST('search_task_label');
$search_project_user=GETPOST('search_project_user');
$search_task_user=GETPOST('search_task_user');
+$mine = $_REQUEST['mode']=='mine' ? 1 : 0;
+if ($mine) $search_task_user = $user->id;
+
// Security check
$socid=0;
if ($user->societe_id > 0) $socid = $user->societe_id;
@@ -54,8 +57,6 @@ $page = GETPOST("page");
$page = is_numeric($page) ? $page : 0;
$page = $page == -1 ? 0 : $page;
-$mine = $_REQUEST['mode']=='mine' ? 1 : 0;
-
// Purge criteria
if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter.x") || GETPOST("button_removefilter")) // Both test are required to be compatible with all browsers
{
@@ -64,6 +65,8 @@ if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter.x") || GETP
$search_status="";
$search_task_ref="";
$search_task_label="";
+ $search_task_user=-1;
+ $search_project_user=-1;
}
if (empty($search_status) && $search_status == '') $search_status=1;
@@ -88,6 +91,10 @@ $fieldstosearchall = array(
$form=new Form($db);
$projectstatic = new Project($db);
$taskstatic = new Task($db);
+$puser=new User($db);
+$tuser=new User($db);
+if ($search_project_user > 0) $puser->fetch($search_project_user);
+if ($search_task_user > 0) $tuser->fetch($search_task_user);
$title=$langs->trans("Activities");
if ($mine) $title=$langs->trans("MyActivities");
@@ -112,6 +119,7 @@ else
// Get list of project id allowed to user (in a string list separated by coma)
$projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,$mine,1,$socid);
+//var_dump($projectsListId);
// 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).
@@ -119,9 +127,9 @@ $morewherefilter='';
if ($search_all) $morewherefilter.=natural_search(array_keys($fieldstosearchall), $search_all);
if ($search_task_ref) $morewherefilter.=natural_search('t.ref', $search_task_ref);
if ($search_task_label) $morewherefilter.=natural_search('t.label', $search_task_label);
+
$tasksarray=$taskstatic->getTasksArray(0, 0, $projectstatic->id, $socid, 0, $search_project, $search_status, $morewherefilter, $search_project_user, $search_task_user);
-// We load also tasks limited to a particular user
-$tasksrole=($mine ? $taskstatic->getUserRolesForProjectsOrTasks(0,$user,$projectstatic->id,0) : '');
+$tasksrole=$taskstatic->getUserRolesForProjectsOrTasks(0, ($tuser->id?$tuser:null), $projectstatic->id, 0, $search_status); // We load also tasks limited to a particular user
print '