From 9eb92b17eca9962f0e6051c8ba31f596ebdff792 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur <eldy@destailleur.fr> Date: Wed, 15 Feb 2012 23:08:20 +0100 Subject: [PATCH] New: Increase usability of module project. --- ChangeLog | 1 + htdocs/core/class/html.form.class.php | 30 +-- htdocs/core/lib/project.lib.php | 271 ++++++++++++++------------ htdocs/projet/activity/list.php | 21 +- htdocs/projet/class/task.class.php | 4 +- htdocs/projet/ganttchart.php | 2 +- htdocs/projet/ganttview.php | 122 ++++++------ htdocs/projet/note.php | 19 +- htdocs/projet/tasks.php | 116 ++++++----- htdocs/projet/tasks/contact.php | 96 +++++++-- htdocs/projet/tasks/document.php | 158 ++++++++++----- htdocs/projet/tasks/index.php | 23 ++- htdocs/projet/tasks/note.php | 115 ++++++++--- htdocs/projet/tasks/task.php | 151 ++++++++++---- htdocs/projet/tasks/time.php | 109 ++++++++--- htdocs/theme/eldy/style.css.php | 10 + 16 files changed, 811 insertions(+), 437 deletions(-) diff --git a/ChangeLog b/ChangeLog index e7f69509f37..e3948a13427 100644 --- a/ChangeLog +++ b/ChangeLog @@ -49,6 +49,7 @@ For users: - New: Default output charset are utf8 into backup tool. - New: Extra fields support int type. - New: Add brazilian states. +- New: Increase usability of module project. - New: Automtic list of documents in ECM module is ok for customers, suppliers invoice, orders, customers orders, proposals and social contributions. - Fix: Can use POS module with several concurrent users. diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index b9ef43a31ba..ffd89d84d55 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -3246,6 +3246,7 @@ class Form $base=DOL_URL_ROOT.'/core/'; $retstring.=' onClick="showDP(\''.$base.'\',\''.$prefix.'\',\''.$langs->trans("FormatDateShortJava").'\',\''.$langs->defaultlang.'\');">'.img_object($langs->trans("SelectDate"),'calendarday','class="datecallink"').'</button>'; } + else $retstring.='<button id="'.$prefix.'Button" type="button" class="dpInvisibleButtons">'.img_object($langs->trans("Disabled"),'calendarday','class="datecallink"').'</button>'; $retstring.='<input type="hidden" id="'.$prefix.'day" name="'.$prefix.'day" value="'.$sday.'">'."\n"; $retstring.='<input type="hidden" id="'.$prefix.'month" name="'.$prefix.'month" value="'.$smonth.'">'."\n"; @@ -3628,21 +3629,21 @@ class Form * Return a HTML area with the reference of object and a navigation bar for a business object * To add a particular filter on select, you must set $object->next_prev_filter to SQL criteria. * - * @param object Object to show - * @param paramid Name of parameter to use to name the id into the URL link - * @param morehtml More html content to output just before the nav bar - * @param shownav Show Condition (navigation is shown if value is 1) - * @param fieldid Nom du champ en base a utiliser pour select next et previous - * @param fieldref Nom du champ objet ref (object->ref) a utiliser pour select next et previous - * @param morehtmlref Code html supplementaire a afficher apres ref - * @param moreparam More param to add in nav link url. - * @return string Portion HTML avec ref + boutons nav + * @param Object $object Object to show + * @param int $paramid Name of parameter to use to name the id into the URL link + * @param string $morehtml More html content to output just before the nav bar + * @param int $shownav Show Condition (navigation is shown if value is 1) + * @param int $fieldid Nom du champ en base a utiliser pour select next et previous + * @param string $fieldref Nom du champ objet ref (object->ref) a utiliser pour select next et previous + * @param string $morehtmlref Code html supplementaire a afficher apres ref + * @param string $moreparam More param to add in nav link url. + * @return tring Portion HTML avec ref + boutons nav */ function showrefnav($object,$paramid,$morehtml='',$shownav=1,$fieldid='rowid',$fieldref='ref',$morehtmlref='',$moreparam='') { $ret=''; - //print "$paramid,$morehtml,$shownav,$fieldid,$fieldref,$morehtmlref,$moreparam"; + //print "paramid=$paramid,morehtml=$morehtml,shownav=$shownav,$fieldid,$fieldref,$morehtmlref,$moreparam"; $object->load_previous_next_ref((isset($object->next_prev_filter)?$object->next_prev_filter:''),$fieldid); $previous_ref = $object->ref_previous?'<a href="'.$_SERVER["PHP_SELF"].'?'.$paramid.'='.urlencode($object->ref_previous).$moreparam.'">'.img_previous().'</a>':''; $next_ref = $object->ref_next?'<a href="'.$_SERVER["PHP_SELF"].'?'.$paramid.'='.urlencode($object->ref_next).$moreparam.'">'.img_next().'</a>':''; @@ -3653,14 +3654,17 @@ class Form } $ret.=$object->$fieldref; - if ($morehtmlref) { + if ($morehtmlref) + { $ret.=' '.$morehtmlref; } - if ($morehtml) { + if ($morehtml) + { $ret.='</td><td class="nobordernopadding" align="right">'.$morehtml; } - if ($shownav && ($previous_ref || $next_ref)) { + if ($shownav && ($previous_ref || $next_ref)) + { $ret.='</td><td class="nobordernopadding" align="center" width="20">'.$previous_ref.'</td>'; $ret.='<td class="nobordernopadding" align="center" width="20">'.$next_ref; } diff --git a/htdocs/core/lib/project.lib.php b/htdocs/core/lib/project.lib.php index 913b1cfefc2..c99bc19d97a 100644 --- a/htdocs/core/lib/project.lib.php +++ b/htdocs/core/lib/project.lib.php @@ -111,17 +111,17 @@ function task_prepare_head($object) $h = 0; $head = array(); - $head[$h][0] = DOL_URL_ROOT.'/projet/tasks/task.php?id='.$object->id; + $head[$h][0] = DOL_URL_ROOT.'/projet/tasks/task.php?id='.$object->id.(GETPOST('withproject')?'&withproject=1':'');; $head[$h][1] = $langs->trans("Card"); $head[$h][2] = 'task'; $h++; - $head[$h][0] = DOL_URL_ROOT.'/projet/tasks/contact.php?id='.$object->id; + $head[$h][0] = DOL_URL_ROOT.'/projet/tasks/contact.php?id='.$object->id.(GETPOST('withproject')?'&withproject=1':'');; $head[$h][1] = $langs->trans("TaskRessourceLinks"); $head[$h][2] = 'contact'; $h++; - $head[$h][0] = DOL_URL_ROOT.'/projet/tasks/time.php?id='.$object->id; + $head[$h][0] = DOL_URL_ROOT.'/projet/tasks/time.php?id='.$object->id.(GETPOST('withproject')?'&withproject=1':'');; $head[$h][1] = $langs->trans("TimeSpent"); $head[$h][2] = 'time'; $h++; @@ -132,7 +132,7 @@ function task_prepare_head($object) // $this->tabs = array('entity:-tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to remove a tab complete_head_from_modules($conf,$langs,$object,$head,$h,'task'); - $head[$h][0] = DOL_URL_ROOT.'/projet/tasks/document.php?id='.$object->id; + $head[$h][0] = DOL_URL_ROOT.'/projet/tasks/document.php?id='.$object->id.(GETPOST('withproject')?'&withproject=1':'');; /*$filesdir = $conf->projet->dir_output . "/" . dol_sanitizeFileName($object->ref); include_once(DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'); $listoffiles=dol_dir_list($filesdir,'files',1); @@ -141,7 +141,7 @@ function task_prepare_head($object) $head[$h][2] = 'document'; $h++; - $head[$h][0] = DOL_URL_ROOT.'/projet/tasks/note.php?id='.$object->id; + $head[$h][0] = DOL_URL_ROOT.'/projet/tasks/note.php?id='.$object->id.(GETPOST('withproject')?'&withproject=1':'');; $head[$h][1] = $langs->trans('Notes'); $head[$h][2] = 'note'; $h++; @@ -255,118 +255,6 @@ function select_projects($socid=-1, $selected='', $htmlname='projectid', $maxlen } -/** - * 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 - * @return $inc - */ -function projectLinesb(&$inc, $parent, $lines, &$level, &$projectsrole, &$tasksrole, $mytask=0) -{ - global $user, $bc, $langs; - global $form, $projectstatic, $taskstatic; - - $lastprojectid=0; - - $var=true; - - $numlines=count($lines); - for ($i = 0 ; $i < $numlines ; $i++) - { - if ($parent == 0) $level = 0; - - if ($lines[$i]->fk_parent == $parent) - { - // Break on a new project - if ($parent == 0 && $lines[$i]->fk_project != $lastprojectid) - { - $var = !$var; - $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++) - { - print " "; - } - print $lines[$i]->label; - print "</td>\n"; - - // Time spent - print '<td align="right">'; - if ($lines[$i]->duration) print convertSecondToTime($lines[$i]->duration,'all'); - 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 '<td nowrap="nowrap">'; - print $form->select_date('',$lines[$i]->id,'','','',"addtime",1,0,1,$disabledtask); - print ' '; - print $form->select_duration($lines[$i]->id,'',$disabledtask); - print ' <input type="submit" class="button"'.($disabledtask?' disabled="disabled"':'').' value="'.$langs->trans("Add").'">'; - if ($disabledtask) print '('.$langs->trans("TaskIsNotAffectedToYou").')'; - if ((! $lines[$i]->public) && $disabledproject) print '('.$langs->trans("YouAreNotContactOfProject").')'; - print '</td>'; - print "<td> "; - print '</td>'; - - print "</tr>\n"; - $inc++; - $level++; - if ($lines[$i]->id) projectLinesb($inc, $lines[$i]->id, $lines, $level, $projectsrole, $tasksrole, $mytask); - $level--; - } - else - { - //$level--; - } - } - - return $inc; -} - - /** * Show task lines with a particular parent * @@ -379,7 +267,7 @@ function projectLinesb(&$inc, $parent, $lines, &$level, &$projectsrole, &$tasksr * @param int &$taskrole Array of roles of user for each tasks * @param int $projectsListId List of id of project allowed to user (separated with comma) */ -function projectLines(&$inc, $parent, &$lines, &$level, $var, $showproject, &$taskrole, $projectsListId='') +function projectLinesa(&$inc, $parent, &$lines, &$level, $var, $showproject, &$taskrole, $projectsListId='') { global $user, $bc, $langs; global $projectstatic, $taskstatic; @@ -463,14 +351,14 @@ function projectLines(&$inc, $parent, &$lines, &$level, $var, $showproject, &$ta $taskstatic->id=$lines[$i]->id; $taskstatic->ref=$lines[$i]->id; $taskstatic->label=($taskrole[$lines[$i]->id]?$langs->trans("YourRole").': '.$taskrole[$lines[$i]->id]:''); - print $taskstatic->getNomUrl(1); + print $taskstatic->getNomUrl(1,($showproject?'':'withproject')); } print '</td>'; // Title of task print "<td>"; if ($showlineingray) print '<i>'; - else print '<a href="'.DOL_URL_ROOT.'/projet/tasks/task.php?id='.$lines[$i]->id.'">'; + else print '<a href="'.DOL_URL_ROOT.'/projet/tasks/task.php?id='.$lines[$i]->id.($showproject?'':'&withproject=1').'">'; for ($k = 0 ; $k < $level ; $k++) { print " "; @@ -480,6 +368,16 @@ function projectLines(&$inc, $parent, &$lines, &$level, $var, $showproject, &$ta else print '</a>'; print "</td>\n"; + // Date start + print '<td align="center">'; + print dol_print_date($lines[$i]->date_start,'day'); + print '</td>'; + + // Date end + print '<td align="center">'; + print dol_print_date($lines[$i]->date_end,'day'); + print '</td>'; + // Progress print '<td align="right">'; print $lines[$i]->progress.' %'; @@ -488,7 +386,7 @@ function projectLines(&$inc, $parent, &$lines, &$level, $var, $showproject, &$ta // Time spent print '<td align="right">'; if ($showlineingray) print '<i>'; - else print '<a href="'.DOL_URL_ROOT.'/projet/tasks/time.php?id='.$lines[$i]->id.'">'; + else print '<a href="'.DOL_URL_ROOT.'/projet/tasks/time.php?id='.$lines[$i]->id.($showproject?'':'&withproject=1').'">'; if ($lines[$i]->duration) print convertSecondToTime($lines[$i]->duration,'all'); else print '--:--'; if ($showlineingray) print '</i>'; @@ -500,7 +398,7 @@ function projectLines(&$inc, $parent, &$lines, &$level, $var, $showproject, &$ta if (! $showlineingray) $inc++; $level++; - if ($lines[$i]->id) projectLines($inc, $lines[$i]->id, $lines, $level, $var, $showproject, $taskrole, $projectsListId); + if ($lines[$i]->id) projectLinesa($inc, $lines[$i]->id, $lines, $level, $var, $showproject, $taskrole, $projectsListId); $level--; $total += $lines[$i]->duration; } @@ -517,6 +415,8 @@ function projectLines(&$inc, $parent, &$lines, &$level, $var, $showproject, &$ta if ($showproject) print '<td></td>'; print '<td></td>'; print '<td></td>'; + print '<td></td>'; + print '<td></td>'; print '<td align="right" nowrap="nowrap" class="liste_total">'.convertSecondToTime($total).'</td></tr>'; } @@ -524,6 +424,133 @@ function projectLines(&$inc, $parent, &$lines, &$level, $var, $showproject, &$ta } +/** + * 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 + * @return $inc + */ +function projectLinesb(&$inc, $parent, $lines, &$level, &$projectsrole, &$tasksrole, $mytask=0) +{ + global $user, $bc, $langs; + global $form, $projectstatic, $taskstatic; + + $lastprojectid=0; + + $var=true; + + $numlines=count($lines); + for ($i = 0 ; $i < $numlines ; $i++) + { + if ($parent == 0) $level = 0; + + if ($lines[$i]->fk_parent == $parent) + { + // Break on a new project + if ($parent == 0 && $lines[$i]->fk_project != $lastprojectid) + { + $var = !$var; + $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++) + { + print " "; + } + print $lines[$i]->label; + print "</td>\n"; + + // Date start + print '<td align="center">'; + print dol_print_date($lines[$i]->date_start,'day'); + print '</td>'; + + // Date end + print '<td align="center">'; + print dol_print_date($lines[$i]->date_end,'day'); + print '</td>'; + + // Progress + print '<td align="right">'; + print $lines[$i]->progress.' %'; + print '</td>'; + + // Time spent + print '<td align="right">'; + if ($lines[$i]->duration) print convertSecondToTime($lines[$i]->duration,'all'); + 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 '<td nowrap="nowrap">'; + $s =$form->select_date('',$lines[$i]->id,'','','',"addtime",1,0,1,$disabledtask); + $s.=' '; + $s.=$form->select_duration($lines[$i]->id,'',$disabledtask); + $s.=' <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); + $level--; + } + else + { + //$level--; + } + } + + return $inc; +} + + /** * Search in task lines with a particular parent if there is a task for a particular user (in taskrole) * diff --git a/htdocs/projet/activity/list.php b/htdocs/projet/activity/list.php index 3c42525e20c..254beb16949 100644 --- a/htdocs/projet/activity/list.php +++ b/htdocs/projet/activity/list.php @@ -1,6 +1,6 @@ <?php /* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org> - * Copyright (C) 2004-2010 Laurent Destailleur <eldy@users.sourceforge.net> + * Copyright (C) 2004-2012 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2005-2010 Regis Houssin <regis@dolibarr.fr> * Copyright (C) 2010 François Legastelois <flegastelois@teclib.com> * @@ -32,7 +32,9 @@ require_once(DOL_DOCUMENT_ROOT."/core/lib/date.lib.php"); $langs->load('projects'); +$action=GETPOST('action'); $mode=GETPOST("mode"); +$id=GETPOST('id'); $mine=0; if ($mode == 'mine') $mine=1; @@ -50,7 +52,7 @@ $result = restrictedArea($user, 'projet', $projectid); * Actions */ -if ($_POST["action"] == 'addtime' && $user->rights->projet->creer) +if ($action == 'addtime' && $user->rights->projet->creer) { $task = new Task($db); @@ -83,7 +85,7 @@ if ($_POST["action"] == 'addtime' && $user->rights->projet->creer) $task->addTimeSpent($user); // header to avoid submit twice on back - header('Location: '.$_SERVER["PHP_SELF"].'?id='.$projectid); + header('Location: '.$_SERVER["PHP_SELF"].'?id='.$projectid.($mode?'&mode='.$mode:'')); exit; } else @@ -110,9 +112,9 @@ llxHeader("",$title,""); //$projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,$mine,1); $projectsListId = $projectstatic->getProjectsAuthorizedForUser($user,0,1); // Return all project i have permission on. I want my tasks and some of my task may be on a public projet that is not my project -if ($_GET["id"]) +if ($id) { - $project->fetch($_GET["id"]); + $project->fetch($id); $project->societe->fetch($project->societe->id); } @@ -133,21 +135,24 @@ dol_htmloutput_mesg($mesg); print '<form name="addtime" method="POST" action="'.$_SERVER["PHP_SELF"].'?id='.$project->id.'">'; print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; print '<input type="hidden" name="action" value="addtime">'; +print '<input type="hidden" name="mode" value="'.$mode.'">'; print '<table class="noborder" width="100%">'; print '<tr class="liste_titre">'; print '<td>'.$langs->trans("Project").'</td>'; print '<td>'.$langs->trans("RefTask").'</td>'; print '<td>'.$langs->trans("LabelTask").'</td>'; +print '<td align="center">'.$langs->trans("DateStart").'</td>'; +print '<td align="center">'.$langs->trans("DateEnd").'</td>'; +print '<td align="right">'.$langs->trans("Progress").'</td>'; print '<td align="right">'.$langs->trans("TimeSpent").'</td>'; print '<td colspan="2">'.$langs->trans("AddDuration").'</td>'; print "</tr>\n"; projectLinesb($j, 0, $tasksarray, $level, $projectsrole, $tasksrole, $mine); -print '</form>'; - print "</table>"; -print '</div>'; +print '</form>'; + llxFooter(); diff --git a/htdocs/projet/class/task.class.php b/htdocs/projet/class/task.class.php index 317b9cab694..86419a9926f 100644 --- a/htdocs/projet/class/task.class.php +++ b/htdocs/projet/class/task.class.php @@ -421,7 +421,7 @@ class Task extends CommonObject $result=''; - $lien = '<a href="'.DOL_URL_ROOT.'/projet/tasks/task.php?id='.$this->id.'">'; + $lien = '<a href="'.DOL_URL_ROOT.'/projet/tasks/task.php?id='.$this->id.($option=='withproject'?'&withproject=1':'').'">'; $lienfin='</a>'; $picto='projecttask'; @@ -784,7 +784,7 @@ class Task extends CommonObject function updateTimeSpent($user, $notrigger=0) { global $conf,$langs; - + $error=0; $ret = 0; diff --git a/htdocs/projet/ganttchart.php b/htdocs/projet/ganttchart.php index 2b112faa8ef..20617b9f1f6 100644 --- a/htdocs/projet/ganttchart.php +++ b/htdocs/projet/ganttchart.php @@ -144,7 +144,7 @@ function constructGanttLine($tarr,$task,$project_dependencies,$level=0,$project_ // Define percent $percent = $task['task_percent_complete']?$task['task_percent_complete']:0; // Link - $link=DOL_URL_ROOT.'/projet/tasks/task.php?id='.$task["task_id"]; + $link=DOL_URL_ROOT.'/projet/tasks/task.php?withproject=1&id='.$task["task_id"]; // Name $name=$task['task_name']; for($i=0; $i < $level; $i++) { $name=' '.$name; } diff --git a/htdocs/projet/ganttview.php b/htdocs/projet/ganttview.php index bcb5f12024e..b22deee7ff7 100644 --- a/htdocs/projet/ganttview.php +++ b/htdocs/projet/ganttview.php @@ -1,6 +1,6 @@ <?php /* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org> - * Copyright (C) 2004-2010 Laurent Destailleur <eldy@users.sourceforge.net> + * Copyright (C) 2004-2012 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2005-2010 Regis Houssin <regis@dolibarr.fr> * * This program is free software; you can redistribute it and/or modify @@ -40,8 +40,6 @@ $socid=0; if ($user->societe_id > 0) $socid=$user->societe_id; $result = restrictedArea($user, 'projet', $id); -$userAccess=0; - $langs->load("users"); $langs->load("projects"); @@ -50,11 +48,20 @@ $langs->load("projects"); * Actions */ +// None + /* * View */ +$form=new Form($db); +$formother=new FormOther($db); +$userstatic=new User($db); +$companystatic=new Societe($db); +$task = new Task($db); +$object = new Project($db); + $arrayofcss=array('/includes/jsgantt/jsgantt.css'); if (! empty($conf->use_javascript_ajax)) @@ -65,104 +72,95 @@ if (! empty($conf->use_javascript_ajax)) ); } -$form=new Form($db); -$formother=new FormOther($db); - $help_url="EN:Module_Projects|FR:Module_Projets|ES:Módulo_Proyectos"; llxHeader("",$langs->trans("Tasks"),$help_url,'',0,0,$arrayofjs,$arrayofcss); -$task = new Task($db); - if ($id > 0 || ! empty($ref)) { - $project = new Project($db); - $project->fetch($id,$ref); - if ($project->societe->id > 0) $result=$project->societe->fetch($project->societe->id); + $object->fetch($id,$ref); + if ($object->societe->id > 0) $result=$object->societe->fetch($object->societe->id); // To verify role of users - $userAccess = $project->restrictedProjectArea($user,'read'); -} + //$userAccess = $object->restrictedProjectArea($user,'read'); + $userWrite = $object->restrictedProjectArea($user,'write'); + //$userDelete = $object->restrictedProjectArea($user,'delete'); + //print "userAccess=".$userAccess." userWrite=".$userWrite." userDelete=".$userDelete; + $tab='gantt'; -$userstatic=new User($db); -$companystatic=new Societe($db); - -$tab='gantt'; + $head=project_prepare_head($object); + dol_fiche_head($head, $tab, $langs->trans("Project"),0,($object->public?'projectpub':'project')); -$head=project_prepare_head($project); -dol_fiche_head($head, $tab, $langs->trans("Project"),0,($project->public?'projectpub':'project')); + $param=($_REQUEST["mode"]=='mine'?'&mode=mine':''); -$param=($_REQUEST["mode"]=='mine'?'&mode=mine':''); + print '<table class="border" width="100%">'; -print '<table class="border" width="100%">'; + // Ref + print '<tr><td width="30%">'; + print $langs->trans("Ref"); + print '</td><td>'; + // Define a complementary filter for search of next/prev ref. + $objectsListId = $object->getProjectsAuthorizedForUser($user,$mine,1); + $object->next_prev_filter=" rowid in (".$objectsListId.")"; + print $form->showrefnav($object,'ref','',1,'ref','ref','',$param); + print '</td></tr>'; -// Ref -print '<tr><td width="30%">'; -print $langs->trans("Ref"); -print '</td><td>'; -// Define a complementary filter for search of next/prev ref. -$projectsListId = $project->getProjectsAuthorizedForUser($user,$mine,1); -$project->next_prev_filter=" rowid in (".$projectsListId.")"; -print $form->showrefnav($project,'ref','',1,'ref','ref','',$param); -print '</td></tr>'; + print '<tr><td>'.$langs->trans("Label").'</td><td>'.$object->title.'</td></tr>'; -print '<tr><td>'.$langs->trans("Label").'</td><td>'.$project->title.'</td></tr>'; + print '<tr><td>'.$langs->trans("Company").'</td><td>'; + if (! empty($object->societe->id)) print $object->societe->getNomUrl(1); + else print ' '; + print '</td>'; + print '</tr>'; -print '<tr><td>'.$langs->trans("Company").'</td><td>'; -if (! empty($project->societe->id)) print $project->societe->getNomUrl(1); -else print ' '; -print '</td>'; -print '</tr>'; + // Visibility + print '<tr><td>'.$langs->trans("Visibility").'</td><td>'; + if ($object->public) print $langs->trans('SharedProject'); + else print $langs->trans('PrivateProject'); + print '</td></tr>'; -// Visibility -print '<tr><td>'.$langs->trans("Visibility").'</td><td>'; -if ($project->public) print $langs->trans('SharedProject'); -else print $langs->trans('PrivateProject'); -print '</td></tr>'; + // Statut + print '<tr><td>'.$langs->trans("Status").'</td><td>'.$object->getLibStatut(4).'</td></tr>'; -// Statut -print '<tr><td>'.$langs->trans("Status").'</td><td>'.$project->getLibStatut(4).'</td></tr>'; + print '</table>'; -print '</table>'; - -print '</div>'; + print '</div>'; +} /* * Actions */ -/* print '<div class="tabsAction">'; if ($user->rights->projet->all->creer || $user->rights->projet->creer) { - if ($project->public || $userAccess) - { - print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$project->id.'&action=create'.$param.'">'.$langs->trans('AddTask').'</a>'; - } - else - { - print '<a class="butActionRefused" href="#" title="'.$langs->trans("NotOwnerOfProject").'">'.$langs->trans('AddTask').'</a>'; - } + if ($object->public || $userWrite > 0) + { + print '<a class="butAction" href="'.DOL_URL_ROOT.'/projet/tasks.php?id='.$object->id.'&action=create'.$param.'&tab=gantt&backtopage='.urlencode($_SERVER['PHP_SELF'].'?id='.$object->id).'">'.$langs->trans('AddTask').'</a>'; + } + else + { + print '<a class="butActionRefused" href="#" title="'.$langs->trans("NotOwnerOfProject").'">'.$langs->trans('AddTask').'</a>'; + } } else { - print '<a class="butActionRefused" href="#" title="'.$langs->trans("NoPermission").'">'.$langs->trans('AddTask').'</a>'; + print '<a class="butActionRefused" href="#" title="'.$langs->trans("NoPermission").'">'.$langs->trans('AddTask').'</a>'; } print '</div>'; print '<br>'; -*/ // Get list of tasks in tasksarray and taskarrayfiltered // We need all tasks (even not limited to a user because a task to user // can have a parent that is not affected to him). -$tasksarray=$task->getTasksArray(0, 0, $project->id, $socid, 0); +$tasksarray=$task->getTasksArray(0, 0, $object->id, $socid, 0); // We load also tasks limited to a particular user -//$tasksrole=($_REQUEST["mode"]=='mine' ? $task->getUserRolesForProjectsOrTasks(0,$user,$project->id,0) : ''); +//$tasksrole=($_REQUEST["mode"]=='mine' ? $task->getUserRolesForProjectsOrTasks(0,$user,$object->id,0) : ''); //var_dump($tasksarray); //var_dump($tasksrole); @@ -177,7 +175,6 @@ if (count($tasksarray)>0) $array_contacts=array(); $tasks=array(); $project_dependencies=array(); - $project_id=$project->id; $taskcursor=0; foreach($tasksarray as $key => $val) { @@ -221,7 +218,7 @@ if (count($tasksarray)>0) $i++; } } - if ($s) $tasks[$taskcursor]['task_resources']='<a href="'.DOL_URL_ROOT.'/projet/tasks/contact.php?id='.$val->id.'" title="'.dol_escape_htmltag($s).'">'.$langs->trans("List").'</a>'; + if ($s) $tasks[$taskcursor]['task_resources']='<a href="'.DOL_URL_ROOT.'/projet/tasks/contact.php?id='.$val->id.'&withproject=1" title="'.dol_escape_htmltag($s).'">'.$langs->trans("List").'</a>'; //print "xxx".$val->id.$tasks[$taskcursor]['task_resources']; $taskcursor++; } @@ -246,7 +243,8 @@ else print $langs->trans("NoTasks"); } -$db->close(); llxFooter(); + +$db->close(); ?> diff --git a/htdocs/projet/note.php b/htdocs/projet/note.php index 6d193e771eb..dc7a81e7774 100644 --- a/htdocs/projet/note.php +++ b/htdocs/projet/note.php @@ -27,7 +27,9 @@ require_once(DOL_DOCUMENT_ROOT."/core/lib/project.lib.php"); $langs->load('projects'); -$id = isset($_GET["id"])?$_GET["id"]:''; +$action=GETPOST('action'); +$id = GETPOST('id'); +$ref= GETPOST('ref'); $mine = $_REQUEST['mode']=='mine' ? 1 : 0; //if (! $user->rights->projet->all->lire) $mine=1; // Special for projects @@ -43,7 +45,7 @@ $result = restrictedArea($user, 'projet', $id); /* Actions */ /******************************************************************************/ -if ($_POST["action"] == 'update_public' && $user->rights->projet->creer) +if ($action == 'update_public' && $user->rights->projet->creer) { $project = new Project($db); $project->fetch($_GET['id']); @@ -62,7 +64,7 @@ if ($_POST["action"] == 'update_public' && $user->rights->projet->creer) } } -if ($_POST['action'] == 'update_private' && $user->rights->projet->creer) +if ($action == 'update_private' && $user->rights->projet->creer) { $project = new Project($db); $project->fetch($_GET['id']); @@ -86,22 +88,19 @@ if ($_POST['action'] == 'update_private' && $user->rights->projet->creer) * View */ -llxHeader(); +$help_url="EN:Module_Projects|FR:Module_Projets|ES:Módulo_Proyectos"; +llxHeader("",$langs->trans("Tasks"),$help_url); $form = new Form($db); - $userstatic=new User($db); +$project = new Project($db); +$now=dol_now(); -$id = $_GET['id']; -$ref= $_GET['ref']; if ($id > 0 || ! empty($ref)) { if ($mesg) print $mesg; - $now=gmmktime(); - - $project = new Project($db); if ($project->fetch($id, $ref)) { diff --git a/htdocs/projet/tasks.php b/htdocs/projet/tasks.php index cf59a29846a..c05bac91f4e 100644 --- a/htdocs/projet/tasks.php +++ b/htdocs/projet/tasks.php @@ -111,21 +111,26 @@ if ($action == 'createtask' && $user->rights->projet->creer) if (! $error) { - if (empty($projectid)) + if (GETPOST('backtopage')) { - Header("Location: ".DOL_URL_ROOT.'/projet/tasks/index.php'.(empty($mode)?'':'?mode='.$mode)); + Header("Location: ".GETPOST('backtopage')); exit; } - else + else if (empty($projectid)) { - Header("Location: ".DOL_URL_ROOT.'/projet/tasks/task.php?id='.$taskid); + Header("Location: ".DOL_URL_ROOT.'/projet/tasks/index.php'.(empty($mode)?'':'?mode='.$mode)); exit; } } } else { - if (empty($id)) + if (GETPOST('backtopage')) + { + Header("Location: ".GETPOST('backtopage')); + exit; + } + else if (empty($id)) { // We go back on task list Header("Location: ".DOL_URL_ROOT.'/projet/tasks/index.php'.(empty($mode)?'':'?mode='.$mode)); @@ -141,6 +146,7 @@ if ($action == 'createtask' && $user->rights->projet->creer) $form=new Form($db); $formother=new FormOther($db); $taskstatic = new Task($db); +$userstatic=new User($db); $help_url="EN:Module_Projects|FR:Module_Projets|ES:Módulo_Proyectos"; llxHeader("",$langs->trans("Tasks"),$help_url); @@ -155,10 +161,57 @@ if ($id > 0 || ! empty($ref)) $userWrite = $object->restrictedProjectArea($user,'write'); //$userDelete = $object->restrictedProjectArea($user,'delete'); //print "userAccess=".$userAccess." userWrite=".$userWrite." userDelete=".$userDelete; + + + $tab=GETPOST('tab')?GETPOST('tab'):'tasks'; + + $head=project_prepare_head($object); + dol_fiche_head($head, $tab, $langs->trans("Project"),0,($object->public?'projectpub':'project')); + + $param=($mode=='mine'?'&mode=mine':''); + + print '<table class="border" width="100%">'; + + // Ref + print '<tr><td width="30%">'; + print $langs->trans("Ref"); + print '</td><td>'; + // Define a complementary filter for search of next/prev ref. + if (! $user->rights->projet->all->lire) + { + $projectsListId = $object->getProjectsAuthorizedForUser($user,$mine,0); + $object->next_prev_filter=" rowid in (".(count($projectsListId)?join(',',array_keys($projectsListId)):'0').")"; + } + print $form->showrefnav($object,'ref','',1,'ref','ref','',$param); + print '</td></tr>'; + + print '<tr><td>'.$langs->trans("Label").'</td><td>'.$object->title.'</td></tr>'; + + print '<tr><td>'.$langs->trans("Company").'</td><td>'; + if (! empty($object->societe->id)) print $object->societe->getNomUrl(1); + else print ' '; + print '</td>'; + print '</tr>'; + + // Visibility + print '<tr><td>'.$langs->trans("Visibility").'</td><td>'; + if ($object->public) print $langs->trans('SharedProject'); + else print $langs->trans('PrivateProject'); + print '</td></tr>'; + + // Statut + print '<tr><td>'.$langs->trans("Status").'</td><td>'.$object->getLibStatut(4).'</td></tr>'; + + print '</table>'; + + dol_fiche_end(); } -if ($action == 'create' && $user->rights->projet->creer && (empty($object->societe->id) || $userAccess > 0)) + +if ($action == 'create' && $user->rights->projet->creer && (empty($object->societe->id) || $userWrite > 0)) { + if ($id > 0 || ! empty($ref)) print '<br>'; + print_fiche_titre($langs->trans("NewTask")); dol_htmloutput_errors($mesg); @@ -166,6 +219,7 @@ if ($action == 'create' && $user->rights->projet->creer && (empty($object->socie print '<form action="'.$_SERVER['PHP_SELF'].'" method="POST">'; print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; print '<input type="hidden" name="action" value="createtask">'; + print '<input type="hidden" name="backtopage" value="'.GETPOST('backtopage').'">'; if (! empty($object->id)) print '<input type="hidden" name="id" value="'.$object->id.'">'; if (! empty($mode)) print '<input type="hidden" name="mode" value="'.$mode.'">'; @@ -221,50 +275,6 @@ else /* * Fiche projet en mode visu */ - $userstatic=new User($db); - - $tab='tasks'; - - $head=project_prepare_head($object); - dol_fiche_head($head, $tab, $langs->trans("Project"),0,($object->public?'projectpub':'project')); - - $param=($mode=='mine'?'&mode=mine':''); - - print '<table class="border" width="100%">'; - - // Ref - print '<tr><td width="30%">'; - print $langs->trans("Ref"); - print '</td><td>'; - // Define a complementary filter for search of next/prev ref. - if (! $user->rights->projet->all->lire) - { - $projectsListId = $object->getProjectsAuthorizedForUser($user,$mine,0); - $object->next_prev_filter=" rowid in (".(count($projectsListId)?join(',',array_keys($projectsListId)):'0').")"; - } - print $form->showrefnav($object,'ref','',1,'ref','ref','',$param); - print '</td></tr>'; - - print '<tr><td>'.$langs->trans("Label").'</td><td>'.$object->title.'</td></tr>'; - - print '<tr><td>'.$langs->trans("Company").'</td><td>'; - if (! empty($object->societe->id)) print $object->societe->getNomUrl(1); - else print ' '; - print '</td>'; - print '</tr>'; - - // Visibility - print '<tr><td>'.$langs->trans("Visibility").'</td><td>'; - if ($object->public) print $langs->trans('SharedProject'); - else print $langs->trans('PrivateProject'); - print '</td></tr>'; - - // Statut - print '<tr><td>'.$langs->trans("Status").'</td><td>'.$object->getLibStatut(4).'</td></tr>'; - - print '</table>'; - - print '</div>'; /* * Actions @@ -275,7 +285,7 @@ else { if ($object->public || $userWrite > 0) { - print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&action=create'.$param.'">'.$langs->trans('AddTask').'</a>'; + print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&action=create'.$param.'&backtopage='.urlencode($_SERVER['PHP_SELF'].'?id='.$object->id).'">'.$langs->trans('AddTask').'</a>'; } else { @@ -322,6 +332,8 @@ else // print '<td>'.$langs->trans("Project").'</td>'; print '<td width="80">'.$langs->trans("RefTask").'</td>'; print '<td>'.$langs->trans("LabelTask").'</td>'; + print '<td align="center">'.$langs->trans("DateStart").'</td>'; + print '<td align="center">'.$langs->trans("DateEnd").'</td>'; print '<td align="right">'.$langs->trans("Progress").'</td>'; print '<td align="right">'.$langs->trans("TimeSpent").'</td>'; print "</tr>\n"; @@ -329,7 +341,7 @@ else { // Show all lines in taskarray (recursive function to go down on tree) $j=0; - $nboftaskshown=projectLines($j, 0, $tasksarray, $level, true, 0, $tasksrole); + $nboftaskshown=projectLinesa($j, 0, $tasksarray, $level, true, 0, $tasksrole); } else { diff --git a/htdocs/projet/tasks/contact.php b/htdocs/projet/tasks/contact.php index 26934f1c767..bda55f209cf 100644 --- a/htdocs/projet/tasks/contact.php +++ b/htdocs/projet/tasks/contact.php @@ -34,6 +34,9 @@ $langs->load("projects"); $langs->load("companies"); $taskid = isset($_GET["id"])?$_GET["id"]:''; +$id = GETPOST('id'); +$ref= GETPOST('ref'); +$action=GETPOST('action'); // Security check $socid=0; @@ -47,7 +50,7 @@ if (!$user->rights->projet->lire) accessforbidden(); */ // Add new contact -if ($_POST["action"] == 'addcontact' && $user->rights->projet->creer) +if ($action == 'addcontact' && $user->rights->projet->creer) { $result = 0; @@ -79,7 +82,7 @@ if ($_POST["action"] == 'addcontact' && $user->rights->projet->creer) } // bascule du statut d'un contact -if ($_GET["action"] == 'swapstatut' && $user->rights->projet->creer) +if ($action == 'swapstatut' && $user->rights->projet->creer) { $task = new Task($db); if ($task->fetch($taskid)) @@ -93,7 +96,7 @@ if ($_GET["action"] == 'swapstatut' && $user->rights->projet->creer) } // Efface un contact -if ($_GET["action"] == 'deleteline' && $user->rights->projet->creer) +if ($action == 'deleteline' && $user->rights->projet->creer) { $task = new Task($db); $task->fetch($taskid); @@ -122,6 +125,7 @@ $formcompany = new FormCompany($db); $contactstatic = new Contact($db); $userstatic = new User($db); $project = new Project($db); +$task = new Task($db); /* *************************************************************************** */ @@ -129,23 +133,70 @@ $project = new Project($db); /* Mode vue et edition */ /* */ /* *************************************************************************** */ -dol_htmloutput_mesg($mesg); -$id = $_GET['id']; -$ref= $_GET['ref']; if ($id > 0 || ! empty($ref)) { - $task = new Task($db); - - if ( $task->fetch($id,$ref) > 0) + if ($task->fetch($id,$ref) > 0) { $result=$project->fetch($task->fk_project); if (! empty($project->socid)) $project->societe->fetch($project->socid); + $userWrite = $project->restrictedProjectArea($user,'write'); + + if (GETPOST('withproject')) + { + // Tabs for project + $tab='tasks'; + $head=project_prepare_head($project); + dol_fiche_head($head, $tab, $langs->trans("Project"),0,($project->public?'projectpub':'project')); + + $param=($mode=='mine'?'&mode=mine':''); + + print '<table class="border" width="100%">'; + + // Ref + print '<tr><td width="30%">'; + print $langs->trans("Ref"); + print '</td><td>'; + // Define a complementary filter for search of next/prev ref. + if (! $user->rights->projet->all->lire) + { + $projectsListId = $project->getProjectsAuthorizedForUser($user,$mine,0); + $project->next_prev_filter=" rowid in (".(count($projectsListId)?join(',',array_keys($projectsListId)):'0').")"; + } + print $form->showrefnav($project,'ref','',1,'ref','ref','',$param); + print '</td></tr>'; + + print '<tr><td>'.$langs->trans("Label").'</td><td>'.$project->title.'</td></tr>'; + + print '<tr><td>'.$langs->trans("Company").'</td><td>'; + if (! empty($project->societe->id)) print $project->societe->getNomUrl(1); + else print ' '; + print '</td>'; + print '</tr>'; + + // Visibility + print '<tr><td>'.$langs->trans("Visibility").'</td><td>'; + if ($project->public) print $langs->trans('SharedProject'); + else print $langs->trans('PrivateProject'); + print '</td></tr>'; + + // Statut + print '<tr><td>'.$langs->trans("Status").'</td><td>'.$project->getLibStatut(4).'</td></tr>'; + + print '</table>'; + + dol_fiche_end(); + + print '<br>'; + } + // To verify role of users - //$userAccess = $projectstatic->restrictedProjectArea($user); // We allow task affected to user even if a not allowed project + //$userAccess = $project->restrictedProjectArea($user); // We allow task affected to user even if a not allowed project //$arrayofuseridoftask=$task->getListContactId('internal'); + dol_htmloutput_mesg($mesg); + $head = task_prepare_head($task); dol_fiche_head($head, 'contact', $langs->trans("Task"), 0, 'projecttask'); @@ -155,20 +206,25 @@ if ($id > 0 || ! empty($ref)) */ print '<table class="border" width="100%">'; - //$linkback="<a href=\"".$_SERVER["PHP_SELF"]."?page=$page&socid=$socid&viewstatut=$viewstatut&sortfield=$sortfield&$sortorder\">".$langs->trans("BackToList")."</a>"; + $param=(GETPOST('withproject')?'&withproject=1':''); + $linkback=GETPOST('withproject')?'<a href="'.DOL_URL_ROOT.'/projet/tasks.php?id='.$project->id.'">'.$langs->trans("BackToList").'</a>':''; // Ref print '<tr><td width="30%">'.$langs->trans('Ref').'</td><td colspan="3">'; - $projectsListId = $project->getProjectsAuthorizedForUser($user,$mine,1); - $task->next_prev_filter=" fk_projet in (".$projectsListId.")"; - print $form->showrefnav($task,'id','',1,'rowid','ref','',''); + if (! GETPOST('withproject') || empty($project->id)) + { + $projectsListId = $project->getProjectsAuthorizedForUser($user,$mine,1); + $task->next_prev_filter=" fk_projet in (".$projectsListId.")"; + } + else $task->next_prev_filter=" fk_projet = ".$project->id; + print $form->showrefnav($task,'id',$linkback,1,'rowid','ref','',$param); print '</td></tr>'; // Label print '<tr><td>'.$langs->trans("Label").'</td><td>'.$task->label.'</td></tr>'; // Project - print '<tr><td>'.$langs->trans("Project").'</td><td>'; + /*print '<tr><td>'.$langs->trans("Project").'</td><td>'; print $project->getNomUrl(1); print '</td></tr>'; @@ -178,10 +234,11 @@ if ($id > 0 || ! empty($ref)) if ($project->societe->id > 0) print $project->societe->getNomUrl(1); else print ' '; print '</td></tr>'; + */ print "</table>"; - print '</div>'; + dol_fiche_end(); /* * Lignes de contacts @@ -192,7 +249,7 @@ if ($id > 0 || ! empty($ref)) * Ajouter une ligne de contact * Non affiche en mode modification de ligne */ - if ($_GET["action"] != 'editline' && $user->rights->projet->creer) + if ($action != 'editline' && $user->rights->projet->creer) { print '<tr class="liste_titre">'; print '<td>'.$langs->trans("Source").'</td>'; @@ -271,8 +328,6 @@ if ($id > 0 || ! empty($ref)) print "</form>"; } - - print '<tr><td colspan="6"> </td></tr>'; } // Liste des contacts lies @@ -376,7 +431,8 @@ if ($id > 0 || ! empty($ref)) } } -$db->close(); llxFooter(); + +$db->close(); ?> diff --git a/htdocs/projet/tasks/document.php b/htdocs/projet/tasks/document.php index c7c39012110..c589b17bc9d 100644 --- a/htdocs/projet/tasks/document.php +++ b/htdocs/projet/tasks/document.php @@ -124,81 +124,143 @@ if ($action=='delete') $form = new Form($db); $project = new Project($db); +$task = new Task($db); llxHeader('',$langs->trans('Project')); if ($id > 0 || ! empty($ref)) { - $project = new Project($db); - $project->fetch($task->fk_project); + if ($task->fetch($id,$ref) >= 0) + { + $result=$project->fetch($task->fk_project); + if (! empty($project->socid)) $project->societe->fetch($project->socid); - // To verify role of users - //$userAccess = $projectstatic->restrictedProjectArea($user); // We allow task affected to user even if a not allowed project - //$arrayofuseridoftask=$task->getListContactId('internal'); + $userWrite = $project->restrictedProjectArea($user,'write'); - $head = task_prepare_head($task); - dol_fiche_head($head, 'document', $langs->trans("Task"), 0, 'projecttask'); + if (GETPOST('withproject')) + { + // Tabs for project + $tab='tasks'; + $head=project_prepare_head($project); + dol_fiche_head($head, $tab, $langs->trans("Project"),0,($project->public?'projectpub':'project')); + + $param=($mode=='mine'?'&mode=mine':''); + + print '<table class="border" width="100%">'; + + // Ref + print '<tr><td width="30%">'; + print $langs->trans("Ref"); + print '</td><td>'; + // Define a complementary filter for search of next/prev ref. + if (! $user->rights->projet->all->lire) + { + $projectsListId = $project->getProjectsAuthorizedForUser($user,$mine,0); + $project->next_prev_filter=" rowid in (".(count($projectsListId)?join(',',array_keys($projectsListId)):'0').")"; + } + print $form->showrefnav($project,'ref','',1,'ref','ref','',$param); + print '</td></tr>'; + + print '<tr><td>'.$langs->trans("Label").'</td><td>'.$project->title.'</td></tr>'; + + print '<tr><td>'.$langs->trans("Company").'</td><td>'; + if (! empty($project->societe->id)) print $project->societe->getNomUrl(1); + else print ' '; + print '</td>'; + print '</tr>'; + + // Visibility + print '<tr><td>'.$langs->trans("Visibility").'</td><td>'; + if ($project->public) print $langs->trans('SharedProject'); + else print $langs->trans('PrivateProject'); + print '</td></tr>'; + + // Statut + print '<tr><td>'.$langs->trans("Status").'</td><td>'.$project->getLibStatut(4).'</td></tr>'; + + print '</table>'; + + dol_fiche_end(); + + print '<br>'; + } - // Files list constructor - $filearray=dol_dir_list($upload_dir,"files",0,'','\.meta$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1); - $totalsize=0; - foreach($filearray as $key => $file) - { - $totalsize+=$file['size']; - } + $head = task_prepare_head($task); + dol_fiche_head($head, 'document', $langs->trans("Task"), 0, 'projecttask'); - print '<table class="border" width="100%">'; + $param=(GETPOST('withproject')?'&withproject=1':''); + $linkback=GETPOST('withproject')?'<a href="'.DOL_URL_ROOT.'/projet/tasks.php?id='.$project->id.'">'.$langs->trans("BackToList").'</a>':''; - // Ref - print '<tr><td width="30%">'; - print $langs->trans("Ref"); - print '</td><td colspan="3">'; - $projectsListId = $project->getProjectsAuthorizedForUser($user,$mine,1); - $task->next_prev_filter=" fk_projet in (".$projectsListId.")"; - print $form->showrefnav($task,'id','',1,'rowid','ref','',''); - print '</td>'; - print '</tr>'; + // Files list constructor + $filearray=dol_dir_list($upload_dir,"files",0,'','\.meta$',$sortfield,(strtolower($sortorder)=='desc'?SORT_DESC:SORT_ASC),1); + $totalsize=0; + foreach($filearray as $key => $file) + { + $totalsize+=$file['size']; + } - // Label - print '<tr><td>'.$langs->trans("Label").'</td><td colspan="3">'.$task->label.'</td></tr>'; + print '<table class="border" width="100%">'; - // Project - print '<tr><td>'.$langs->trans("Project").'</td><td colspan="3">'; - print $projectstatic->getNomUrl(1); - print '</td></tr>'; + // Ref + print '<tr><td width="30%">'; + print $langs->trans("Ref"); + print '</td><td colspan="3">'; + if (! GETPOST('withproject') || empty($project->id)) + { + $projectsListId = $project->getProjectsAuthorizedForUser($user,$mine,1); + $task->next_prev_filter=" fk_projet in (".$projectsListId.")"; + } + else $task->next_prev_filter=" fk_projet = ".$project->id; + print $form->showrefnav($task,'id',$linkback,1,'rowid','ref','',$param); + print '</td>'; + print '</tr>'; - // Third party - print '<td>'.$langs->trans("Company").'</td><td colspan="3">'; - if ($projectstatic->societe->id) print $projectstatic->societe->getNomUrl(1); - else print ' '; - print '</td></tr>'; + // Label + print '<tr><td>'.$langs->trans("Label").'</td><td colspan="3">'.$task->label.'</td></tr>'; - // Files infos - print '<tr><td>'.$langs->trans("NbOfAttachedFiles").'</td><td colspan="3">'.count($filearray).'</td></tr>'; - print '<tr><td>'.$langs->trans("TotalSizeOfAttachedFiles").'</td><td colspan="3">'.$totalsize.' '.$langs->trans("bytes").'</td></tr>'; + // Project + /*print '<tr><td>'.$langs->trans("Project").'</td><td colspan="3">'; + print $projectstatic->getNomUrl(1); + print '</td></tr>'; - print "</table>\n"; - print "</div>\n"; + // Third party + print '<td>'.$langs->trans("Company").'</td><td colspan="3">'; + if ($projectstatic->societe->id) print $projectstatic->societe->getNomUrl(1); + else print ' '; + print '</td></tr>'; + */ - if ($mesg) { print $mesg."<br>"; } + // Files infos + print '<tr><td>'.$langs->trans("NbOfAttachedFiles").'</td><td colspan="3">'.count($filearray).'</td></tr>'; + print '<tr><td>'.$langs->trans("TotalSizeOfAttachedFiles").'</td><td colspan="3">'.$totalsize.' '.$langs->trans("bytes").'</td></tr>'; + print "</table>\n"; - // Affiche formulaire upload - $formfile=new FormFile($db); - $formfile->form_attach_new_file(DOL_URL_ROOT.'/projet/tasks/document.php?id='.$task->id,'',0,0,$user->rights->projet->creer); + dol_fiche_end(); + print '<br>'; - // List of document - $param='&id='.$task->id; - $formfile->list_of_documents($filearray,$task,'projet',$param,0,dol_sanitizeFileName($project->ref).'/'.dol_sanitizeFileName($task->ref).'/'); + dol_htmloutput_mesg($mesg); + + // Affiche formulaire upload + $formfile=new FormFile($db); + $formfile->form_attach_new_file(DOL_URL_ROOT.'/projet/tasks/document.php?id='.$task->id,'',0,0,$user->rights->projet->creer); + + + // List of document + $param='&id='.$task->id; + $formfile->list_of_documents($filearray,$task,'projet',$param,0,dol_sanitizeFileName($project->ref).'/'.dol_sanitizeFileName($task->ref).'/'); + } } else { Header('Location: index.php'); + exit; } -$db->close(); llxFooter(); + +$db->close(); ?> diff --git a/htdocs/projet/tasks/index.php b/htdocs/projet/tasks/index.php index 2fe13451bed..406eae738a5 100644 --- a/htdocs/projet/tasks/index.php +++ b/htdocs/projet/tasks/index.php @@ -1,6 +1,6 @@ <?php /* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org> - * Copyright (C) 2006-2010 Laurent Destailleur <eldy@users.sourceforge.net> + * Copyright (C) 2006-2012 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2006-2010 Regis Houssin <regis@dolibarr.fr> * * This program is free software; you can redistribute it and/or modify @@ -32,6 +32,8 @@ require_once(DOL_DOCUMENT_ROOT."/core/lib/date.lib.php"); $langs->load('projects'); $langs->load('users'); +$id=GETPOST('id'); + // Security check $socid=0; if ($user->societe_id > 0) $socid = $user->societe_id; @@ -50,18 +52,18 @@ $mine = $_REQUEST['mode']=='mine' ? 1 : 0; * View */ +$form=new Form($db); +$projectstatic = new Project($db); +$taskstatic = new Task($db); + $title=$langs->trans("Activities"); if ($mine) $title=$langs->trans("MyActivities"); llxHeader("",$title,"Projet"); -$form=new Form($db); -$projectstatic = new Project($db); -$taskstatic = new Task($db); - -if ($_GET["id"]) +if ($id) { - $projectstatic->fetch($_GET["id"]); + $projectstatic->fetch($id); $projectstatic->societe->fetch($projectstatic->societe->id); } @@ -89,12 +91,14 @@ print '<tr class="liste_titre">'; print '<td>'.$langs->trans("Project").'</td>'; print '<td width="80">'.$langs->trans("RefTask").'</td>'; print '<td>'.$langs->trans("LabelTask").'</td>'; +print '<td align="center">'.$langs->trans("DateStart").'</td>'; +print '<td align="center">'.$langs->trans("DateEnd").'</td>'; print '<td align="right">'.$langs->trans("Progress").'</td>'; print '<td align="right">'.$langs->trans("TimeSpent").'</td>'; print "</tr>\n"; // Show all lines in taskarray (recursive function to go down on tree) $j=0; $level=0; -$nboftaskshown=projectLines($j, 0, $tasksarray, $level, true, 1, $tasksrole, $projectsListId); +$nboftaskshown=projectLinesa($j, 0, $tasksarray, $level, true, 1, $tasksrole, $projectsListId); print "</table>"; print '</div>'; @@ -109,7 +113,8 @@ if ($user->rights->projet->creer) print '</div>'; } -$db->close(); llxFooter(); + +$db->close(); ?> diff --git a/htdocs/projet/tasks/note.php b/htdocs/projet/tasks/note.php index f1283d50c1a..787b4edd78b 100644 --- a/htdocs/projet/tasks/note.php +++ b/htdocs/projet/tasks/note.php @@ -28,7 +28,11 @@ require_once(DOL_DOCUMENT_ROOT."/core/lib/project.lib.php"); $langs->load('projects'); -$id = isset($_GET["id"])?$_GET["id"]:''; +$action=GETPOST('action'); +$mine = $_REQUEST['mode']=='mine' ? 1 : 0; +//if (! $user->rights->projet->all->lire) $mine=1; // Special for projects +$id = GETPOST('id'); +$ref= GETPOST('ref'); // Security check $socid=0; @@ -42,10 +46,10 @@ if (!$user->rights->projet->lire) accessforbidden(); /* Actions */ /******************************************************************************/ -if ($_POST["action"] == 'update_public' && $user->rights->projet->creer) +if ($action == 'update_public' && $user->rights->projet->creer) { $task = new Task($db); - $task->fetch($_GET['id']); + $task->fetch($id); $db->begin(); @@ -61,10 +65,10 @@ if ($_POST["action"] == 'update_public' && $user->rights->projet->creer) } } -if ($_POST['action'] == 'update_private' && $user->rights->projet->creer) +if ($action == 'update_private' && $user->rights->projet->creer) { $task = new Task($db); - $task->fetch($_GET['id']); + $task->fetch($id); $db->begin(); @@ -89,60 +93,108 @@ llxHeader(); $form = new Form($db); $project = new Project($db); +$task = new Task($db); +$userstatic = new User($db); + +$now=dol_now(); -$id = $_GET['id']; -$ref= $_GET['ref']; if ($id > 0 || ! empty($ref)) { - if ($mesg) print $mesg; - - $now=gmmktime(); - - $task = new Task($db); - $projectstatic = new Project($db); - $userstatic = new User($db); - - if ($task->fetch($id, $ref)) + if ($task->fetch($id, $ref) > 0) { - $result=$projectstatic->fetch($task->fk_project); - if (! empty($projectstatic->socid)) $projectstatic->societe->fetch($projectstatic->socid); + $result=$project->fetch($task->fk_project); + if (! empty($project->socid)) $project->societe->fetch($project->socid); + + $userWrite = $project->restrictedProjectArea($user,'write'); - // To verify role of users - //$userAccess = $projectstatic->restrictedProjectArea($user); // We allow task affected to user even if a not allowed project - //$arrayofuseridoftask=$task->getListContactId('internal'); + if (GETPOST('withproject')) + { + // Tabs for project + $tab='tasks'; + $head=project_prepare_head($project); + dol_fiche_head($head, $tab, $langs->trans("Project"),0,($project->public?'projectpub':'project')); + + $param=($mode=='mine'?'&mode=mine':''); + + print '<table class="border" width="100%">'; + + // Ref + print '<tr><td width="30%">'; + print $langs->trans("Ref"); + print '</td><td>'; + // Define a complementary filter for search of next/prev ref. + if (! $user->rights->projet->all->lire) + { + $projectsListId = $project->getProjectsAuthorizedForUser($user,$mine,0); + $project->next_prev_filter=" rowid in (".(count($projectsListId)?join(',',array_keys($projectsListId)):'0').")"; + } + print $form->showrefnav($project,'ref','',1,'ref','ref','',$param); + print '</td></tr>'; + + // Project + print '<tr><td>'.$langs->trans("Label").'</td><td>'.$project->title.'</td></tr>'; + + // Company + print '<tr><td>'.$langs->trans("Company").'</td><td>'; + if (! empty($project->societe->id)) print $project->societe->getNomUrl(1); + else print ' '; + print '</td>'; + print '</tr>'; + + // Visibility + print '<tr><td>'.$langs->trans("Visibility").'</td><td>'; + if ($project->public) print $langs->trans('SharedProject'); + else print $langs->trans('PrivateProject'); + print '</td></tr>'; + + // Statut + print '<tr><td>'.$langs->trans("Status").'</td><td>'.$project->getLibStatut(4).'</td></tr>'; + + print '</table>'; + + dol_fiche_end(); + + print '<br>'; + } $head = task_prepare_head($task); dol_fiche_head($head, 'note', $langs->trans('Task'), 0, 'projecttask'); print '<table class="border" width="100%">'; - //$linkback="<a href=\"".$_SERVER["PHP_SELF"]."?page=$page&socid=$socid&viewstatut=$viewstatut&sortfield=$sortfield&$sortorder\">".$langs->trans("BackToList")."</a>"; + $param=(GETPOST('withproject')?'&withproject=1':''); + $linkback=GETPOST('withproject')?'<a href="'.DOL_URL_ROOT.'/projet/tasks.php?id='.$project->id.'">'.$langs->trans("BackToList").'</a>':''; // Ref print '<tr><td width="30%">'.$langs->trans("Ref").'</td><td>'; - $projectsListId = $project->getProjectsAuthorizedForUser($user,$mine,1); - $task->next_prev_filter=" fk_projet in (".$projectsListId.")"; - print $form->showrefnav($task,'id','',1,'rowid','ref','',''); + if (! GETPOST('withproject') || empty($project->id)) + { + $projectsListId = $project->getProjectsAuthorizedForUser($user,$mine,1); + $task->next_prev_filter=" fk_projet in (".$projectsListId.")"; + } + else $task->next_prev_filter=" fk_projet = ".$project->id; + print $form->showrefnav($task,'id',$linkback,1,'rowid','ref','',$param); print '</td></tr>'; // Label print '<tr><td>'.$langs->trans("Label").'</td><td>'.$task->label.'</td></tr>'; // Project - print '<tr><td>'.$langs->trans("Project").'</td><td colspan="3">'; - print $projectstatic->getNomUrl(1); + /*print '<tr><td>'.$langs->trans("Project").'</td><td colspan="3">'; + print $project->getNomUrl(1); print '</td></tr>'; // Third party print '<tr><td>'.$langs->trans("Company").'</td><td>'; - if ($projectstatic->societe->id > 0) print $projectstatic->societe->getNomUrl(1); + if ($project->societe->id > 0) print $project->societe->getNomUrl(1); else print' '; print '</td></tr>'; + */ // Note publique print '<tr><td valign="top">'.$langs->trans("NotePublic").'</td>'; print '<td valign="top" colspan="3">'; - if ($_GET["action"] == 'edit') + if ($action == 'edit') { print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'?id='.$task->id.'">'; print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; @@ -180,7 +232,7 @@ if ($id > 0 || ! empty($ref)) print "</table>"; - print '</div>'; + dol_fiche_end(); /* * Actions @@ -199,7 +251,8 @@ if ($id > 0 || ! empty($ref)) print '</div>'; } } -$db->close(); llxFooter(); + +$db->close(); ?> diff --git a/htdocs/projet/tasks/task.php b/htdocs/projet/tasks/task.php index 05172008ddf..746b821cafb 100644 --- a/htdocs/projet/tasks/task.php +++ b/htdocs/projet/tasks/task.php @@ -31,6 +31,10 @@ require_once(DOL_DOCUMENT_ROOT."/core/class/html.formother.class.php"); $taskid = GETPOST("id"); $taskref = GETPOST("ref"); +$id = GETPOST('id'); +$ref= GETPOST('ref'); +$action=GETPOST('action'); +$withproject=GETPOST('withproject'); // Security check $socid=0; @@ -42,7 +46,7 @@ if (!$user->rights->projet->lire) accessforbidden(); * Actions */ -if ($_POST["action"] == 'update' && ! $_POST["cancel"] && $user->rights->projet->creer) +if ($action == 'update' && ! $_POST["cancel"] && $user->rights->projet->creer) { $error=0; @@ -54,7 +58,7 @@ if ($_POST["action"] == 'update' && ! $_POST["cancel"] && $user->rights->projet- if (! $error) { $task = new Task($db); - $task->fetch($_POST["id"]); + $task->fetch($id); $tmparray=explode('_',$_POST['task_parent']); $task_parent=$tmparray[1]; @@ -74,14 +78,14 @@ if ($_POST["action"] == 'update' && ! $_POST["cancel"] && $user->rights->projet- else { $taskid=$_POST["id"]; - $_GET['action']='edit'; + $action='edit'; } } -if ($_POST["action"] == 'confirm_delete' && $_POST["confirm"] == "yes" && $user->rights->projet->supprimer) +if ($action == 'confirm_delete' && $_POST["confirm"] == "yes" && $user->rights->projet->supprimer) { $task = new Task($db); - if ($task->fetch($_GET["id"]) >= 0 ) + if ($task->fetch($id) >= 0 ) { $projet = new Project($db); $result=$projet->fetch($task->fk_projet); @@ -114,32 +118,104 @@ llxHeader("",$langs->trans("Task")); $form = new Form($db); $formother = new FormOther($db); $project = new Project($db); +$task = new Task($db); if ($taskid) { - $task = new Task($db); - $projectstatic = new Project($db); - - if ($task->fetch($taskid) >= 0 ) + if ($task->fetch($taskid) > 0) { - $result=$projectstatic->fetch($task->fk_project); - if (! empty($projectstatic->socid)) $projectstatic->societe->fetch($projectstatic->socid); + $result=$project->fetch($task->fk_project); + if (! empty($project->socid)) $project->societe->fetch($project->socid); + + $userWrite = $project->restrictedProjectArea($user,'write'); + + if (GETPOST('withproject')) + { + // Tabs for project + $tab='tasks'; + $head=project_prepare_head($project); + dol_fiche_head($head, $tab, $langs->trans("Project"),0,($project->public?'projectpub':'project')); + + $param=($mode=='mine'?'&mode=mine':''); + + print '<table class="border" width="100%">'; + + // Ref + print '<tr><td width="30%">'; + print $langs->trans("Ref"); + print '</td><td>'; + // Define a complementary filter for search of next/prev ref. + if (! $user->rights->projet->all->lire) + { + $projectsListId = $project->getProjectsAuthorizedForUser($user,$mine,0); + $project->next_prev_filter=" rowid in (".(count($projectsListId)?join(',',array_keys($projectsListId)):'0').")"; + } + print $form->showrefnav($project,'ref','',1,'ref','ref','',$param); + print '</td></tr>'; + + print '<tr><td>'.$langs->trans("Label").'</td><td>'.$project->title.'</td></tr>'; + + print '<tr><td>'.$langs->trans("Company").'</td><td>'; + if (! empty($project->societe->id)) print $project->societe->getNomUrl(1); + else print ' '; + print '</td>'; + print '</tr>'; + + // Visibility + print '<tr><td>'.$langs->trans("Visibility").'</td><td>'; + if ($project->public) print $langs->trans('SharedProject'); + else print $langs->trans('PrivateProject'); + print '</td></tr>'; + + // Statut + print '<tr><td>'.$langs->trans("Status").'</td><td>'.$project->getLibStatut(4).'</td></tr>'; + + print '</table>'; + + dol_fiche_end(); + + print '<br>'; + } + + /* + * Actions + */ + /*print '<div class="tabsAction">'; + + if ($user->rights->projet->all->creer || $user->rights->projet->creer) + { + if ($project->public || $userWrite > 0) + { + print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&action=create'.$param.'">'.$langs->trans('AddTask').'</a>'; + } + else + { + print '<a class="butActionRefused" href="#" title="'.$langs->trans("NotOwnerOfProject").'">'.$langs->trans('AddTask').'</a>'; + } + } + else + { + print '<a class="butActionRefused" href="#" title="'.$langs->trans("NoPermission").'">'.$langs->trans('AddTask').'</a>'; + } + + print '</div>'; + */ // To verify role of users - //$userAccess = $projectstatic->restrictedProjectArea($user); // We allow task affected to user even if a not allowed project + //$userAccess = $project->restrictedProjectArea($user); // We allow task affected to user even if a not allowed project //$arrayofuseridoftask=$task->getListContactId('internal'); dol_htmloutput_mesg($mesg); $head=task_prepare_head($task); - dol_fiche_head($head, 'task', $langs->trans("Task"),0,'projecttask'); - if ($_GET["action"] == 'edit' && $user->rights->projet->creer) + if ($action == 'edit' && $user->rights->projet->creer) { print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">'; print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; print '<input type="hidden" name="action" value="update">'; + print '<input type="hidden" name="withproject" value="'.$withproject.'">'; print '<input type="hidden" name="id" value="'.$task->id.'">'; print '<table class="border" width="100%">'; @@ -153,19 +229,20 @@ if ($taskid) print '<td><input size="30" name="label" value="'.$task->label.'"></td></tr>'; // Project - print '<tr><td>'.$langs->trans("Project").'</td><td colspan="3">'; - print $projectstatic->getNomUrl(1); + /*print '<tr><td>'.$langs->trans("Project").'</td><td colspan="3">'; + print $project->getNomUrl(1); print '</td></tr>'; // Third party print '<td>'.$langs->trans("Company").'</td><td colspan="3">'; - if ($projectstatic->societe->id) print $projectstatic->societe->getNomUrl(1); + if ($project->societe->id) print $project->societe->getNomUrl(1); else print ' '; print '</td></tr>'; + */ // Task parent print '<tr><td>'.$langs->trans("ChildOfTask").'</td><td>'; - print $formother->selectProjectTasks($task->fk_task_parent,$projectstatic->id, 'task_parent', $user->admin?0:1, 0); + print $formother->selectProjectTasks($task->fk_task_parent,$project->id, 'task_parent', $user->admin?0:1, 0); print '</td></tr>'; // Date start @@ -190,7 +267,7 @@ if ($taskid) print '</td></tr>'; print '</table>'; - + print '<center><br>'; print '<input type="submit" class="button" name="update" value="'.$langs->trans("Modify").'"> '; print '<input type="submit" class="button" name="cancel" value="'.$langs->trans("Cancel").'">'; @@ -203,10 +280,12 @@ if ($taskid) /* * Fiche tache en mode visu */ + $param=(GETPOST('withproject')?'&withproject=1':''); + $linkback=GETPOST('withproject')?'<a href="'.DOL_URL_ROOT.'/projet/tasks.php?id='.$project->id.'">'.$langs->trans("BackToList").'</a>':''; - if ($_GET["action"] == 'delete') + if ($action == 'delete') { - $ret=$form->form_confirm($_SERVER["PHP_SELF"]."?id=".$_GET["id"],$langs->trans("DeleteATask"),$langs->trans("ConfirmDeleteATask"),"confirm_delete"); + $ret=$form->form_confirm($_SERVER["PHP_SELF"]."?id=".$_GET["id"].'&withproject='.$withproject,$langs->trans("DeleteATask"),$langs->trans("ConfirmDeleteATask"),"confirm_delete"); if ($ret == 'html') print '<br>'; } @@ -216,9 +295,13 @@ if ($taskid) print '<tr><td width="30%">'; print $langs->trans("Ref"); print '</td><td colspan="3">'; - $projectsListId = $project->getProjectsAuthorizedForUser($user,$mine,1); - $task->next_prev_filter=" fk_projet in (".$projectsListId.")"; - print $form->showrefnav($task,'id','',1,'rowid','ref','',''); + if (! GETPOST('withproject') || empty($project->id)) + { + $projectsListId = $project->getProjectsAuthorizedForUser($user,$mine,1); + $task->next_prev_filter=" fk_projet in (".$projectsListId.")"; + } + else $task->next_prev_filter=" fk_projet = ".$project->id; + print $form->showrefnav($task,'id',$linkback,1,'rowid','ref','',$param); print '</td>'; print '</tr>'; @@ -226,15 +309,16 @@ if ($taskid) print '<tr><td>'.$langs->trans("Label").'</td><td colspan="3">'.$task->label.'</td></tr>'; // Project - print '<tr><td>'.$langs->trans("Project").'</td><td colspan="3">'; - print $projectstatic->getNomUrl(1); + /*print '<tr><td>'.$langs->trans("Project").'</td><td colspan="3">'; + print $project->getNomUrl(1); print '</td></tr>'; // Third party print '<td>'.$langs->trans("Company").'</td><td colspan="3">'; - if ($projectstatic->societe->id) print $projectstatic->societe->getNomUrl(1); + if ($project->societe->id) print $project->societe->getNomUrl(1); else print ' '; print '</td></tr>'; + */ // Date start print '<tr><td>'.$langs->trans("DateStart").'</td><td colspan="3">'; @@ -257,12 +341,12 @@ if ($taskid) print '</td></tr>'; print '</table>'; - + } dol_fiche_end(); - - + + if ($_GET["action"] != 'edit') { /* @@ -273,7 +357,7 @@ if ($taskid) // Modify if ($user->rights->projet->creer) { - print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$task->id.'&action=edit">'.$langs->trans('Modify').'</a>'; + print '<a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$task->id.'&action=edit&withproject='.$withproject.'">'.$langs->trans('Modify').'</a>'; } else { @@ -283,7 +367,7 @@ if ($taskid) // Delete if ($user->rights->projet->supprimer && ! $task->hasChildren()) { - print '<a class="butActionDelete" href="'.$_SERVER['PHP_SELF'].'?id='.$task->id.'&action=delete">'.$langs->trans('Delete').'</a>'; + print '<a class="butActionDelete" href="'.$_SERVER['PHP_SELF'].'?id='.$task->id.'&action=delete&withproject='.$withproject.'">'.$langs->trans('Delete').'</a>'; } else { @@ -295,7 +379,8 @@ if ($taskid) } } -$db->close(); llxFooter(); + +$db->close(); ?> diff --git a/htdocs/projet/tasks/time.php b/htdocs/projet/tasks/time.php index 97255aab5ab..a3ee4c6abf2 100644 --- a/htdocs/projet/tasks/time.php +++ b/htdocs/projet/tasks/time.php @@ -1,6 +1,6 @@ <?php /* Copyright (C) 2005 Rodolphe Quiedeville <rodolphe@quiedeville.org> - * Copyright (C) 2006-2010 Laurent Destailleur <eldy@users.sourceforge.net> + * Copyright (C) 2006-2012 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2010 Regis Houssin <regis@dolibarr.fr> * Copyright (C) 2011 Juanjo Menent <jmenent@2byte.es> * @@ -32,6 +32,11 @@ require_once(DOL_DOCUMENT_ROOT."/core/lib/date.lib.php"); $langs->load('projects'); +$taskid = isset($_GET["id"])?$_GET["id"]:''; +$id = GETPOST('id'); +$ref= GETPOST('ref'); +$action=GETPOST('action'); + // Security check $socid=0; if ($user->societe_id > 0) $socid = $user->societe_id; @@ -41,7 +46,7 @@ if (!$user->rights->projet->lire) accessforbidden(); /* * Actions */ -if ($_POST["action"] == 'addtimespent' && $user->rights->projet->creer) +if ($action == 'addtimespent' && $user->rights->projet->creer) { $error=0; @@ -83,7 +88,7 @@ if ($_POST["action"] == 'addtimespent' && $user->rights->projet->creer) } } -if ($_POST["action"] == 'updateline' && ! $_POST["cancel"] && $user->rights->projet->creer) +if ($action == 'updateline' && ! $_POST["cancel"] && $user->rights->projet->creer) { $error=0; @@ -122,7 +127,7 @@ if ($_POST["action"] == 'updateline' && ! $_POST["cancel"] && $user->rights->pro } } -if ($_REQUEST["action"] == 'confirm_delete' && $_REQUEST["confirm"] == "yes" && $user->rights->projet->creer) +if ($action == 'confirm_delete' && $_REQUEST["confirm"] == "yes" && $user->rights->projet->creer) { $task = new Task($db); $task->fetchTimeSpent($_GET['lineid']); @@ -141,37 +146,80 @@ if ($_REQUEST["action"] == 'confirm_delete' && $_REQUEST["confirm"] == "yes" && * View */ -$project=new Project($db); +$form = new Form($db); +$project = new Project($db); +$task = new Task($db); llxHeader("",$langs->trans("Task")); $form = new Form($db); -if ($_GET["id"] > 0) +if ($id > 0 || ! empty($ref)) { /* * Fiche projet en mode visu */ - $task = new Task($db); - $projectstatic = new Project($db); - $userstatic = new User($db); - - if ($task->fetch($_GET["id"]) >= 0 ) + if ($task->fetch($id,$ref) >= 0) { - $result=$projectstatic->fetch($task->fk_project); - if (! empty($projectstatic->socid)) $projectstatic->societe->fetch($projectstatic->socid); + $result=$project->fetch($task->fk_project); + if (! empty($project->socid)) $project->societe->fetch($project->socid); - // To get role of users - //$userAccess = $projectstatic->restrictedProjectArea($user); // We allow task affected to user even if a not allowed project - //$arrayofuseridoftask=$task->getListContactId('internal'); + $userWrite = $project->restrictedProjectArea($user,'write'); - $head=task_prepare_head($task); + if (GETPOST('withproject')) + { + // Tabs for project + $tab='tasks'; + $head=project_prepare_head($project); + dol_fiche_head($head, $tab, $langs->trans("Project"),0,($project->public?'projectpub':'project')); + + $param=($mode=='mine'?'&mode=mine':''); + + print '<table class="border" width="100%">'; + + // Ref + print '<tr><td width="30%">'; + print $langs->trans("Ref"); + print '</td><td>'; + // Define a complementary filter for search of next/prev ref. + if (! $user->rights->projet->all->lire) + { + $projectsListId = $project->getProjectsAuthorizedForUser($user,$mine,0); + $project->next_prev_filter=" rowid in (".(count($projectsListId)?join(',',array_keys($projectsListId)):'0').")"; + } + print $form->showrefnav($project,'ref','',1,'ref','ref','',$param); + print '</td></tr>'; + + print '<tr><td>'.$langs->trans("Label").'</td><td>'.$project->title.'</td></tr>'; + + print '<tr><td>'.$langs->trans("Company").'</td><td>'; + if (! empty($project->societe->id)) print $project->societe->getNomUrl(1); + else print ' '; + print '</td>'; + print '</tr>'; + + // Visibility + print '<tr><td>'.$langs->trans("Visibility").'</td><td>'; + if ($project->public) print $langs->trans('SharedProject'); + else print $langs->trans('PrivateProject'); + print '</td></tr>'; + + // Statut + print '<tr><td>'.$langs->trans("Status").'</td><td>'.$project->getLibStatut(4).'</td></tr>'; + + print '</table>'; + + dol_fiche_end(); + + print '<br>'; + } + $head=task_prepare_head($task); dol_fiche_head($head, 'time', $langs->trans("Task"),0,'projecttask'); - if ($mesg) print $mesg.'<br>'; + dol_htmloutput_mesg($mesg); - if ($_GET["action"] == 'deleteline') + if ($action == 'deleteline') { $ret=$form->form_confirm($_SERVER["PHP_SELF"]."?id=".$_GET["id"].'&lineid='.$_GET["lineid"],$langs->trans("DeleteATimeSpent"),$langs->trans("ConfirmDeleteATimeSpent"),"confirm_delete",'','',1); if ($ret == 'html') print '<br>'; @@ -179,32 +227,41 @@ if ($_GET["id"] > 0) print '<table class="border" width="100%">'; + $param=(GETPOST('withproject')?'&withproject=1':''); + $linkback=GETPOST('withproject')?'<a href="'.DOL_URL_ROOT.'/projet/tasks.php?id='.$project->id.'">'.$langs->trans("BackToList").'</a>':''; + // Ref print '<tr><td width="30%">'; print $langs->trans("Ref"); print '</td><td colspan="3">'; - $projectsListId = $project->getProjectsAuthorizedForUser($user,$mine,1); - $task->next_prev_filter=" fk_projet in (".$projectsListId.")"; - print $form->showrefnav($task,'id','',1,'rowid','ref','',''); + if (! GETPOST('withproject') || empty($project->id)) + { + $projectsListId = $project->getProjectsAuthorizedForUser($user,$mine,1); + $task->next_prev_filter=" fk_projet in (".$projectsListId.")"; + } + else $task->next_prev_filter=" fk_projet = ".$project->id; + print $form->showrefnav($task,'id',$linkback,1,'rowid','ref','',$param); print '</td></tr>'; // Label print '<tr><td>'.$langs->trans("Label").'</td><td colspan="3">'.$task->label.'</td></tr>'; // Project - print '<tr><td>'.$langs->trans("Project").'</td><td>'; - print $projectstatic->getNomUrl(1); + /*print '<tr><td>'.$langs->trans("Project").'</td><td>'; + print $project->getNomUrl(1); print '</td></tr>'; // Third party print '<td>'.$langs->trans("Company").'</td><td>'; - if ($projectstatic->societe->id) print $projectstatic->societe->getNomUrl(1); + if ($project->societe->id) print $project->societe->getNomUrl(1); else print ' '; print '</td></tr>'; + */ print '</table>'; - print '</div>'; + dol_fiche_end(); + /* * Add time spent diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index e58fccc8b57..6bdac2a1f45 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -2285,6 +2285,16 @@ a.cke_dialog_ui_button height: 72px !important; } + +/* ============================================================================== */ +/* JSGantt */ +/* ============================================================================== */ + +div.scroll2 { + width: 582px !important; +} + + <?php if (is_object($db)) $db->close(); ?> -- GitLab