From b7cb2e6b9d1d0add949f82814e50e90f19467227 Mon Sep 17 00:00:00 2001
From: Laurent Destailleur <ldestailleur@teclib.com>
Date: Thu, 7 Aug 2014 11:48:19 +0200
Subject: [PATCH] Fix: visible task into area "time" for "My task" must limit
 task to tasks i am assigned to.

---
 htdocs/core/lib/project.lib.php | 200 ++++++++++++++++----------------
 htdocs/projet/activity/list.php |  18 ++-
 2 files changed, 115 insertions(+), 103 deletions(-)

diff --git a/htdocs/core/lib/project.lib.php b/htdocs/core/lib/project.lib.php
index e4ecb884a1c..ce345a44a68 100644
--- a/htdocs/core/lib/project.lib.php
+++ b/htdocs/core/lib/project.lib.php
@@ -443,16 +443,17 @@ function projectLinesa(&$inc, $parent, &$lines, &$level, $var, $showproject, &$t
 /**
  * Output a task line
  *
- * @param	string	   	&$inc			?
- * @param   string		$parent			?
- * @param   Object		$lines			?
- * @param   int			&$level			?
- * @param   string		&$projectsrole	?
- * @param   string		&$tasksrole		?
- * @param   int			$mytask			0 or 1 to enable only if task is a task i am affected to
+ * @param	string	   	&$inc					?
+ * @param   string		$parent					?
+ * @param   Object		$lines					?
+ * @param   int			&$level					?
+ * @param   string		&$projectsrole			?
+ * @param   string		&$tasksrole				?
+ * @param	string		$mine					Show only task lines I am assigned to
+ * @param   int			$restricteditformytask	0=No restriction, 1=Enable add time only if task is a task i am affected to
  * @return  $inc
  */
-function projectLinesb(&$inc, $parent, $lines, &$level, &$projectsrole, &$tasksrole, $mytask=0)
+function projectLinesb(&$inc, $parent, $lines, &$level, &$projectsrole, &$tasksrole, $mine, $restricteditformytask=0)
 {
 	global $user, $bc, $langs;
 	global $form, $projectstatic, $taskstatic;
@@ -475,99 +476,104 @@ function projectLinesb(&$inc, $parent, $lines, &$level, &$projectsrole, &$tasksr
 				$lastprojectid=$lines[$i]->fk_project;
 			}
 
-			print "<tr ".$bc[$var].">\n";
-
-			// Project
-			print "<td>";
-			$projectstatic->id=$lines[$i]->fk_project;
-			$projectstatic->ref=$lines[$i]->projectref;
-			$projectstatic->public=$lines[$i]->public;
-			$projectstatic->label=$langs->transnoentitiesnoconv("YourRole").': '.$projectsrole[$lines[$i]->fk_project];
-			print $projectstatic->getNomUrl(1);
-			print "</td>";
-
-			// Ref
-			print '<td>';
-			$taskstatic->id=$lines[$i]->id;
-			$taskstatic->ref=$lines[$i]->id;
-			print $taskstatic->getNomUrl(1);
-			print '</td>';
-
-			// Label task
-			print "<td>";
-			for ($k = 0 ; $k < $level ; $k++)
+			// If we want all or we have a role on task, we show it
+			if (empty($mine) || ! empty($tasksrole[$lines[$i]->id]))
 			{
-				print "&nbsp;&nbsp;&nbsp;";
-			}
-			$taskstatic->id=$lines[$i]->id;
-			$taskstatic->ref=$lines[$i]->label;
-			print $taskstatic->getNomUrl(0);
-			print "</td>\n";
-
-			// Date start
-			print '<td align="center">';
-			print dol_print_date($lines[$i]->date_start,'dayhour');
-			print '</td>';
-
-			// Date end
-			print '<td align="center">';
-			print dol_print_date($lines[$i]->date_end,'dayhour');
-			print '</td>';
-
-			// Planned Workload
-			print '<td align="right">';
-			if ($lines[$i]->planned_workload) print convertSecondToTime($lines[$i]->planned_workload,'allhourmin');
-			else print '--:--';
-			print '</td>';
-
-			// Progress declared %
-			print '<td align="right">';
-			print $lines[$i]->progress.' %';
-			print '</td>';
-
-			// Time spent
-			print '<td align="right">';
-			if ($lines[$i]->duration)
-			{
-				print '<a href="'.DOL_URL_ROOT.'/projet/tasks/time.php?id='.$lines[$i]->id.'">';
-				print convertSecondToTime($lines[$i]->duration,'allhourmin');
-				print '</a>';
-			}
-			else print '--:--';
-			print "</td>\n";
-
-			$disabledproject=1;$disabledtask=1;
-			//print "x".$lines[$i]->fk_project;
-			//var_dump($lines[$i]);
-			//var_dump($projectsrole[$lines[$i]->fk_project]);
-			// If at least one role for project
-			if ($lines[$i]->public || ! empty($projectsrole[$lines[$i]->fk_project]) || $user->rights->projet->all->creer)
-			{
-				$disabledproject=0;
-				$disabledtask=0;
-			}
-			// If mytask and no role on task
-			if ($mytask && empty($tasksrole[$lines[$i]->id]))
-			{
-				$disabledtask=1;
+				print "<tr ".$bc[$var].">\n";
+	
+				// Project
+				print "<td>";
+				$projectstatic->id=$lines[$i]->fk_project;
+				$projectstatic->ref=$lines[$i]->projectref;
+				$projectstatic->public=$lines[$i]->public;
+				$projectstatic->label=$langs->transnoentitiesnoconv("YourRole").': '.$projectsrole[$lines[$i]->fk_project];
+				print $projectstatic->getNomUrl(1);
+				print "</td>";
+	
+				// Ref
+				print '<td>';
+				$taskstatic->id=$lines[$i]->id;
+				$taskstatic->ref=$lines[$i]->id;
+				print $taskstatic->getNomUrl(1);
+				print '</td>';
+	
+				// Label task
+				print "<td>";
+				for ($k = 0 ; $k < $level ; $k++)
+				{
+					print "&nbsp;&nbsp;&nbsp;";
+				}
+				$taskstatic->id=$lines[$i]->id;
+				$taskstatic->ref=$lines[$i]->label;
+				print $taskstatic->getNomUrl(0);
+				print "</td>\n";
+	
+				// Date start
+				print '<td align="center">';
+				print dol_print_date($lines[$i]->date_start,'dayhour');
+				print '</td>';
+	
+				// Date end
+				print '<td align="center">';
+				print dol_print_date($lines[$i]->date_end,'dayhour');
+				print '</td>';
+	
+				// Planned Workload
+				print '<td align="right">';
+				if ($lines[$i]->planned_workload) print convertSecondToTime($lines[$i]->planned_workload,'allhourmin');
+				else print '--:--';
+				print '</td>';
+	
+				// Progress declared %
+				print '<td align="right">';
+				print $lines[$i]->progress.' %';
+				print '</td>';
+	
+				// Time spent
+				print '<td align="right">';
+				if ($lines[$i]->duration)
+				{
+					print '<a href="'.DOL_URL_ROOT.'/projet/tasks/time.php?id='.$lines[$i]->id.'">';
+					print convertSecondToTime($lines[$i]->duration,'allhourmin');
+					print '</a>';
+				}
+				else print '--:--';
+				print "</td>\n";
+	
+				$disabledproject=1;$disabledtask=1;
+				//print "x".$lines[$i]->fk_project;
+				//var_dump($lines[$i]);
+				//var_dump($projectsrole[$lines[$i]->fk_project]);
+				// If at least one role for project
+				if ($lines[$i]->public || ! empty($projectsrole[$lines[$i]->fk_project]) || $user->rights->projet->all->creer)
+				{
+					$disabledproject=0;
+					$disabledtask=0;
+				}
+				// If $restricteditformytask is on and I have no role on task, i disable edit
+				if ($restricteditformytask && empty($tasksrole[$lines[$i]->id]))
+				{
+					$disabledtask=1;
+				}
+	
+				print '<td class="nowrap">';
+				$s =$form->select_date('',$lines[$i]->id,'','','',"addtime",1,0,1,$disabledtask);
+				$s.='&nbsp;&nbsp;&nbsp;';
+				$s.=$form->select_duration($lines[$i]->id,'',$disabledtask,'text');
+				$s.='&nbsp;<input type="submit" class="button"'.($disabledtask?' disabled="disabled"':'').' value="'.$langs->trans("Add").'">';
+				print $s;
+				print '</td>';
+				print '<td align="right">';
+				if ((! $lines[$i]->public) && $disabledproject) print $form->textwithpicto('',$langs->trans("YouAreNotContactOfProject"));
+				else if ($disabledtask) print $form->textwithpicto('',$langs->trans("TaskIsNotAffectedToYou"));
+				print '</td>';
+	
+				print "</tr>\n";
 			}
-
-			print '<td class="nowrap">';
-			$s =$form->select_date('',$lines[$i]->id,'','','',"addtime",1,0,1,$disabledtask);
-			$s.='&nbsp;&nbsp;&nbsp;';
-			$s.=$form->select_duration($lines[$i]->id,'',$disabledtask,'text');
-			$s.='&nbsp;<input type="submit" class="button"'.($disabledtask?' disabled="disabled"':'').' value="'.$langs->trans("Add").'">';
-			print $s;
-			print '</td>';
-			print '<td align="right">';
-			if ((! $lines[$i]->public) && $disabledproject) print $form->textwithpicto('',$langs->trans("YouAreNotContactOfProject"));
-			else if ($disabledtask) print $form->textwithpicto('',$langs->trans("TaskIsNotAffectedToYou"));
-			print '</td>';
-
-			print "</tr>\n";
+			
 			$inc++;
 			$level++;
-			if ($lines[$i]->id) projectLinesb($inc, $lines[$i]->id, $lines, $level, $projectsrole, $tasksrole, $mytask);
+			if ($lines[$i]->id) projectLinesb($inc, $lines[$i]->id, $lines, $level, $projectsrole, $tasksrole, $mine, $restricteditformytask);
 			$level--;
 		}
 		else
diff --git a/htdocs/projet/activity/list.php b/htdocs/projet/activity/list.php
index 719d178d0ce..9eebe84bb87 100644
--- a/htdocs/projet/activity/list.php
+++ b/htdocs/projet/activity/list.php
@@ -133,11 +133,14 @@ llxHeader("",$title,"");
 print_barre_liste($title, $page, $_SERVER["PHP_SELF"], "", $sortfield, $sortorder, "", $num);
 
 // Filter on user
-dol_fiche_head('');
-print '<table class="border" width="100%"><tr><td width="25%">'.$langs->trans("User").'</td>';
-print '<td>'.$user->getLoginUrl(1).'</td>';
-print '</tr></table>';
-dol_fiche_end();
+/*	dol_fiche_head('');
+	print '<table class="border" width="100%"><tr><td width="25%">'.$langs->trans("User").'</td>';
+	print '<td>';
+	if ($mine) print $user->getLoginUrl(1);
+	print '</td>';
+	print '</tr></table>';
+	dol_fiche_end();
+*/
 
 print '<form name="addtime" method="POST" action="'.$_SERVER["PHP_SELF"].'?id='.$project->id.'">';
 print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">';
@@ -157,9 +160,12 @@ print '<td align="right">'.$langs->trans("TimeSpent").'</td>';
 print '<td colspan="2">'.$langs->trans("AddDuration").'</td>';
 print "</tr>\n";
 
+// By default, we can edit only tasks we are assigned to
+$restricteditformytask=(empty($conf->global->PROJECT_TIME_ON_ALL_TASKS_MY_PROJECTS)?1:0);	 
+
 if (count($tasksarray) > 0)
 {
-	projectLinesb($j, 0, $tasksarray, $level, $projectsrole, $tasksrole, $mine);
+	projectLinesb($j, 0, $tasksarray, $level, $projectsrole, $tasksrole, $mine, $restricteditformytask);
 }
 else
 {
-- 
GitLab