From 526ea743e060c7a7ba865d37c8a29ecc6d61dfc2 Mon Sep 17 00:00:00 2001
From: Laurent Destailleur <eldy@destailleur.fr>
Date: Sat, 27 Feb 2016 17:56:59 +0100
Subject: [PATCH] Fix: the view my task must show only task you are assigned to

---
 htdocs/projet/activity/index.php | 63 ++++++++++++++++++++++++++------
 1 file changed, 52 insertions(+), 11 deletions(-)

diff --git a/htdocs/projet/activity/index.php b/htdocs/projet/activity/index.php
index 39f728263ad..7d87dbae298 100644
--- a/htdocs/projet/activity/index.php
+++ b/htdocs/projet/activity/index.php
@@ -49,6 +49,7 @@ $now = dol_now();
 
 $projectstatic=new Project($db);
 $projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,0,1);  // Return all projects I have permission on because I want my tasks and some of my task may be on a public projet that is not my project
+$taskstatic=new Task($db);
 $tasktmp=new Task($db);
 
 $title=$langs->trans("Activities");
@@ -125,7 +126,7 @@ if ( $resql )
 		$projectstatic->title=$row->title;
 		print $projectstatic->getNomUrl(1, '', 1);
 		print '</td>';
-		print '<td align="right">'.convertSecondToTime($row->nb).'</td>';
+		print '<td align="right">'.convertSecondToTime($row->nb, 'allhourmin').'</td>';
 		print "</tr>\n";
 		$total += $row->nb;
 	}
@@ -138,7 +139,7 @@ else
 }
 print '<tr class="liste_total">';
 print '<td>'.$langs->trans('Total').'</td>';
-print '<td align="right">'.convertSecondToTime($total).'</td>';
+print '<td align="right">'.convertSecondToTime($total, 'allhourmin').'</td>';
 print "</tr>\n";
 print "</table>";
 
@@ -181,7 +182,7 @@ if ($db->type != 'pgsql')
 			$projectstatic->title=$row->title;
 			print $projectstatic->getNomUrl(1, '', 1);
 			print '</td>';
-			print '<td align="right">'.convertSecondToTime($row->nb).'</td>';
+			print '<td align="right">'.convertSecondToTime($row->nb, 'allhourmin').'</td>';
 			print "</tr>\n";
 			$total += $row->nb;
 		}
@@ -194,7 +195,7 @@ if ($db->type != 'pgsql')
 	}
 	print '<tr class="liste_total">';
 	print '<td>'.$langs->trans('Total').'</td>';
-	print '<td align="right">'.convertSecondToTime($total).'</td>';
+	print '<td align="right">'.convertSecondToTime($total, 'allhourmin').'</td>';
 	print "</tr>\n";
 	print "</table>";
 }
@@ -240,7 +241,7 @@ if ( $resql )
 		$projectstatic->title=$row->title;
 		print $projectstatic->getNomUrl(1, '', 1);
 		print '</td>';
-		print '<td align="right">'.convertSecondToTime($row->nb).'</td>';
+		print '<td align="right">'.convertSecondToTime($row->nb, 'allhourmin').'</td>';
 		print "</tr>\n";
 		$total += $row->nb;
 	}
@@ -253,7 +254,7 @@ else
 }
 print '<tr class="liste_total">';
 print '<td>'.$langs->trans('Total').'</td>';
-print '<td align="right">'.convertSecondToTime($total).'</td>';
+print '<td align="right">'.convertSecondToTime($total, 'allhourmin').'</td>';
 print "</tr>\n";
 print "</table><br>";
 
@@ -292,7 +293,7 @@ if ( $resql )
 		$projectstatic->title=$row->title;
 		print $projectstatic->getNomUrl(1, '', 1);
 		print '</td>';
-		print '<td align="right">'.convertSecondToTime($row->nb).'</td>';
+		print '<td align="right">'.convertSecondToTime($row->nb, 'allhourmin').'</td>';
 		print "</tr>\n";
 		$var=!$var;
 	}
@@ -304,7 +305,7 @@ else
 }
 print '<tr class="liste_total">';
 print '<td>'.$langs->trans('Total').'</td>';
-print '<td align="right">'.convertSecondToTime($total).'</td>';
+print '<td align="right">'.convertSecondToTime($total, 'allhourmin').'</td>';
 print "</tr>\n";
 print "</table>";
 
@@ -342,7 +343,7 @@ if (! empty($conf->global->PROJECT_TASK_TIME_YEAR))
 			$projectstatic->title=$row->title;
 			print $projectstatic->getNomUrl(1, '', 1);
 			print '</td>';
-			print '<td align="right">'.convertSecondToTime($row->nb).'</td>';
+			print '<td align="right">'.convertSecondToTime($row->nb, 'allhourmin').'</td>';
 			print "</tr>\n";
 			$var=!$var;
 		}
@@ -354,7 +355,7 @@ if (! empty($conf->global->PROJECT_TASK_TIME_YEAR))
 	}
 	print '<tr class="liste_total">';
 	print '<td>'.$langs->trans('Total').'</td>';
-	print '<td align="right">'.convertSecondToTime($total).'</td>';
+	print '<td align="right">'.convertSecondToTime($total, 'allhourmin').'</td>';
 	print "</tr>\n";
 	print "</table>";
 }
@@ -366,6 +367,38 @@ print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';
 
 if (empty($conf->global->PROJECT_HIDE_TASKS))
 {
+    // Get id of types of contacts for projects (This list never contains a lot of elements)
+    $listofprojectcontacttype=array();
+    $sql = "SELECT ctc.rowid, ctc.code FROM ".MAIN_DB_PREFIX."c_type_contact as ctc";
+    $sql.= " WHERE ctc.element = '" . $projectstatic->element . "'";
+    $sql.= " AND ctc.source = 'internal'";
+    $resql = $db->query($sql);
+    if ($resql)
+    {
+        while($obj = $db->fetch_object($resql))
+        {
+            $listofprojectcontacttype[$obj->rowid]=$obj->code;
+        }
+    }
+    else dol_print_error($db);
+    if (count($listofprojectcontacttype) == 0) $listofprojectcontacttype[0]='0';    // To avoid sql syntax error if not found
+    // Get id of types of contacts for tasks (This list never contains a lot of elements)
+    $listoftaskcontacttype=array();
+    $sql = "SELECT ctc.rowid, ctc.code FROM ".MAIN_DB_PREFIX."c_type_contact as ctc";
+    $sql.= " WHERE ctc.element = '" . $taskstatic->element . "'";
+    $sql.= " AND ctc.source = 'internal'";
+    $resql = $db->query($sql);
+    if ($resql)
+    {
+        while($obj = $db->fetch_object($resql))
+        {
+            $listoftaskcontacttype[$obj->rowid]=$obj->code;
+        }
+    }
+    else dol_print_error($db);
+    if (count($listoftaskcontacttype) == 0) $listoftaskcontacttype[0]='0';         // To avoid sql syntax error if not found
+    
+
 	// Tasks for all resources of all opened projects and time spent for each task/resource
 
 	$max = (empty($conf->global->PROJECT_LIMIT_TASK_PROJECT_AREA)?1000:$conf->global->PROJECT_LIMIT_TASK_PROJECT_AREA);
@@ -376,8 +409,16 @@ if (empty($conf->global->PROJECT_HIDE_TASKS))
 	$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."projet_task as t on t.fk_projet = p.rowid";
 	$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."projet_task_time as tasktime on tasktime.fk_task = t.rowid";
 	$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."user as u on tasktime.fk_user = u.rowid";
+	if ($mine)
+	{
+	    $sql.= ", " . MAIN_DB_PREFIX . "element_contact as ect";
+	}
 	$sql.= " WHERE p.entity = ".$conf->entity;
-	if ($mine || empty($user->rights->projet->all->lire)) $sql.= " AND p.rowid IN (".$projectsListId.")";
+	if ($mine || empty($user->rights->projet->all->lire)) $sql.= " AND p.rowid IN (".$projectsListId.")";  // project i have permission on
+	if ($mine)     // this may duplicate record if we are contact twice
+	{
+        $sql.= " AND ect.fk_c_type_contact IN (".join(',',array_keys($listoftaskcontacttype)).") AND ect.element_id = t.rowid AND ect.fk_socpeople = ".$user->id;
+	}
 	if ($socid)	$sql.= "  AND (p.fk_soc IS NULL OR p.fk_soc = 0 OR p.fk_soc = ".$socid.")";
 	$sql.= " AND p.fk_statut=1";
 	$sql.= " GROUP BY p.ref, p.title, p.rowid, t.label, t.rowid, t.planned_workload, t.duration_effective, t.progress, t.dateo, t.datee";
-- 
GitLab