2006-09-23 02:27:47 +02:00
< ? php
2013-11-05 11:17:54 +01:00
/* Copyright ( C ) 2006 - 2013 Laurent Destailleur < eldy @ users . sourceforge . net >
2012-12-30 15:13:49 +01:00
* Copyright ( C ) 2010 Regis Houssin < regis . houssin @ capnetworks . com >
2013-11-05 11:17:54 +01:00
* Copyright ( C ) 2011 Juanjo Menent < jmenent @ 2 byte . es >
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < http :// www . gnu . org / licenses />.
* or see http :// www . gnu . org /
*/
2006-09-23 02:27:47 +02:00
/**
2011-10-24 12:59:44 +02:00
* \file htdocs / core / lib / project . lib . php
2010-11-11 13:21:15 +01:00
* \brief Functions used by project module
* \ingroup project
2013-11-05 11:17:54 +01:00
*/
2012-08-22 23:11:24 +02:00
require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php' ;
2010-06-01 17:33:27 +02:00
2010-11-11 13:21:15 +01:00
2012-02-04 10:48:47 +01:00
/**
* Prepare array with list of tabs
*
* @ param Object $object Object related to tabs
* @ return array Array of tabs to shoc
*/
2010-01-12 19:02:23 +01:00
function project_prepare_head ( $object )
2006-09-23 02:27:47 +02:00
{
2013-04-12 11:09:53 +02:00
global $langs , $conf , $user ;
$h = 0 ;
$head = array ();
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/projet/fiche.php?id=' . $object -> id ;
$head [ $h ][ 1 ] = $langs -> trans ( " Project " );
$head [ $h ][ 2 ] = 'project' ;
$h ++ ;
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/projet/contact.php?id=' . $object -> id ;
$head [ $h ][ 1 ] = $langs -> trans ( " ProjectContact " );
$head [ $h ][ 2 ] = 'contact' ;
$h ++ ;
if ( ! empty ( $conf -> fournisseur -> enabled ) || ! empty ( $conf -> propal -> enabled ) || ! empty ( $conf -> commande -> enabled )
2013-05-14 20:30:18 +02:00
|| ! empty ( $conf -> facture -> enabled ) || ! empty ( $conf -> contrat -> enabled )
|| ! empty ( $conf -> ficheinter -> enabled ) || ! empty ( $conf -> agenda -> enabled ) || ! empty ( $conf -> deplacement -> enabled ))
2013-04-12 11:09:53 +02:00
{
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/projet/element.php?id=' . $object -> id ;
2013-06-25 15:00:10 +02:00
$head [ $h ][ 1 ] = $langs -> trans ( " ProjectReferers " );
2013-04-12 11:09:53 +02:00
$head [ $h ][ 2 ] = 'element' ;
$h ++ ;
}
// Show more tabs from modules
// Entries must be declared in modules descriptor with line
// $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab
// $this->tabs = array('entity:-tabname); to remove a tab
complete_head_from_modules ( $conf , $langs , $object , $head , $h , 'project' );
2013-07-20 10:54:38 +02:00
if ( empty ( $conf -> global -> MAIN_DISABLE_NOTES_TAB ))
{
$nbNote = 0 ;
if ( ! empty ( $object -> note_private )) $nbNote ++ ;
if ( ! empty ( $object -> note_public )) $nbNote ++ ;
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/projet/note.php?id=' . $object -> id ;
$head [ $h ][ 1 ] = $langs -> trans ( 'Notes' );
if ( $nbNote > 0 ) $head [ $h ][ 1 ] .= ' (' . $nbNote . ')' ;
$head [ $h ][ 2 ] = 'notes' ;
$h ++ ;
}
2013-10-30 11:57:32 +01:00
2013-07-20 10:54:38 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php' ;
$upload_dir = $conf -> projet -> dir_output . " / " . dol_sanitizeFileName ( $object -> ref );
$nbFiles = count ( dol_dir_list ( $upload_dir , 'files' ));
2013-04-12 11:09:53 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/projet/document.php?id=' . $object -> id ;
$head [ $h ][ 1 ] = $langs -> trans ( 'Documents' );
2013-07-20 10:54:38 +02:00
if ( $nbFiles > 0 ) $head [ $h ][ 1 ] .= ' (' . $nbFiles . ')' ;
2013-04-12 11:09:53 +02:00
$head [ $h ][ 2 ] = 'document' ;
$h ++ ;
2013-10-30 11:57:32 +01:00
2013-04-12 11:09:53 +02:00
// Then tab for sub level of projet, i mean tasks
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/projet/tasks.php?id=' . $object -> id ;
$head [ $h ][ 1 ] = $langs -> trans ( " Tasks " );
$head [ $h ][ 2 ] = 'tasks' ;
$h ++ ;
/* Now this is a filter in the Task tab .
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/projet/tasks.php?id=' . $object -> id . '&mode=mine' ;
$head [ $h ][ 1 ] = $langs -> trans ( " MyTasks " );
$head [ $h ][ 2 ] = 'mytasks' ;
$h ++ ;
*/
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/projet/ganttview.php?id=' . $object -> id ;
$head [ $h ][ 1 ] = $langs -> trans ( " Gantt " );
$head [ $h ][ 2 ] = 'gantt' ;
$h ++ ;
complete_head_from_modules ( $conf , $langs , $object , $head , $h , 'project' , 'remove' );
return $head ;
2006-09-23 02:27:47 +02:00
}
2008-01-11 11:25:26 +01:00
/**
2012-02-04 10:48:47 +01:00
* Prepare array with list of tabs
*
* @ param Object $object Object related to tabs
* @ return array Array of tabs to shoc
2009-01-15 00:36:51 +01:00
*/
function task_prepare_head ( $object )
{
2013-04-12 11:09:53 +02:00
global $langs , $conf , $user ;
$h = 0 ;
$head = array ();
$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_task' ;
$h ++ ;
$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 ] = 'task_contact' ;
$h ++ ;
$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 ] = 'task_time' ;
$h ++ ;
// Show more tabs from modules
// Entries must be declared in modules descriptor with line
// $this->tabs = array('entity:+tabname:Title:@mymodule:/mymodule/mypage.php?id=__ID__'); to add new tab
// $this->tabs = array('entity:-tabname); to remove a tab
complete_head_from_modules ( $conf , $langs , $object , $head , $h , 'task' );
2014-05-10 16:43:47 +02:00
if ( empty ( $conf -> global -> MAIN_DISABLE_NOTES_TAB ))
{
$nbNote = 0 ;
if ( ! empty ( $object -> note_private )) $nbNote ++ ;
if ( ! empty ( $object -> note_public )) $nbNote ++ ;
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/projet/tasks/note.php?id=' . $object -> id . ( GETPOST ( 'withproject' ) ? '&withproject=1' : '' );;
$head [ $h ][ 1 ] = $langs -> trans ( 'Notes' );
if ( $nbNote > 0 ) $head [ $h ][ 1 ] .= ' (' . $nbNote . ')' ;
$head [ $h ][ 2 ] = 'task_notes' ;
$h ++ ;
}
2013-04-12 11:09:53 +02:00
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/projet/tasks/document.php?id=' . $object -> id . ( GETPOST ( 'withproject' ) ? '&withproject=1' : '' );;
2014-05-10 16:43:47 +02:00
$filesdir = $conf -> projet -> dir_output . " / " . dol_sanitizeFileName ( $object -> project -> ref ) . '/' . dol_sanitizeFileName ( $object -> ref );
include_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php' ;
$listoffiles = dol_dir_list ( $filesdir , 'files' , 1 , '' , 'thumbs' );
$head [ $h ][ 1 ] = ( count ( $listoffiles ) ? $langs -> trans ( 'DocumentsNb' , count ( $listoffiles )) : $langs -> trans ( 'Documents' ));
2013-04-12 11:09:53 +02:00
$head [ $h ][ 2 ] = 'task_document' ;
$h ++ ;
complete_head_from_modules ( $conf , $langs , $object , $head , $h , 'task' , 'remove' );
return $head ;
}
/**
* Prepare array with list of tabs
*
* @ return array Array of tabs to shoc
*/
function project_admin_prepare_head ()
{
global $langs , $conf , $user ;
$h = 0 ;
$head = array ();
$h = 0 ;
$head [ $h ][ 0 ] = DOL_URL_ROOT . " /projet/admin/project.php " ;
$head [ $h ][ 1 ] = $langs -> trans ( " Projects " );
$head [ $h ][ 2 ] = 'project' ;
$h ++ ;
complete_head_from_modules ( $conf , $langs , $object , $head , $h , 'project_admin' );
$head [ $h ][ 0 ] = DOL_URL_ROOT . " /projet/admin/project_extrafields.php " ;
$head [ $h ][ 1 ] = $langs -> trans ( " ExtraFieldsProject " );
$head [ $h ][ 2 ] = 'attributes' ;
$h ++ ;
$head [ $h ][ 0 ] = DOL_URL_ROOT . '/projet/admin/project_task_extrafields.php' ;
$head [ $h ][ 1 ] = $langs -> trans ( " ExtraFieldsProjectTask " );
$head [ $h ][ 2 ] = 'attributes_task' ;
$h ++ ;
complete_head_from_modules ( $conf , $langs , $object , $head , $h , 'project_admin' , 'remove' );
return $head ;
2009-01-15 00:36:51 +01:00
}
/**
2009-07-28 02:52:34 +02:00
* Show task lines with a particular parent
2011-12-04 15:26:32 +01:00
*
2012-02-04 14:39:47 +01:00
* @ param string & $inc Counter that count number of lines legitimate to show ( for return )
* @ param int $parent Id of parent task to start
* @ param array & $lines Array of all tasks
* @ param int & $level Level of task
* @ param string $var Color
* @ param int $showproject Show project columns
* @ param int & $taskrole Array of roles of user for each tasks
2014-01-06 13:02:20 +01:00
* @ param int $projectsListId List of id of project allowed to user ( string separated with comma )
2012-09-07 00:14:50 +02:00
* @ param int $addordertick Add a tick to move task
2012-03-18 19:23:01 +01:00
* @ return void
2009-01-15 00:36:51 +01:00
*/
2012-09-07 00:14:50 +02:00
function projectLinesa ( & $inc , $parent , & $lines , & $level , $var , $showproject , & $taskrole , $projectsListId = '' , $addordertick = 0 )
2009-01-15 00:36:51 +01:00
{
2013-04-12 11:09:53 +02:00
global $user , $bc , $langs ;
2011-12-05 19:03:36 +01:00
global $projectstatic , $taskstatic ;
2012-02-04 14:39:47 +01:00
2013-04-12 11:09:53 +02:00
$lastprojectid = 0 ;
$projectsArrayId = explode ( ',' , $projectsListId );
$numlines = count ( $lines );
$total = 0 ;
for ( $i = 0 ; $i < $numlines ; $i ++ )
{
if ( $parent == 0 ) $level = 0 ;
// Process line
// print "i:".$i."-".$lines[$i]->fk_project.'<br>';
if ( $lines [ $i ] -> fk_parent == $parent )
{
// Show task line.
$showline = 1 ;
$showlineingray = 0 ;
// If there is filters to use
if ( is_array ( $taskrole ))
{
// If task not legitimate to show, search if a legitimate task exists later in tree
if ( ! isset ( $taskrole [ $lines [ $i ] -> id ]) && $lines [ $i ] -> id != $lines [ $i ] -> fk_parent )
{
// So search if task has a subtask legitimate to show
$foundtaskforuserdeeper = 0 ;
searchTaskInChild ( $foundtaskforuserdeeper , $lines [ $i ] -> id , $lines , $taskrole );
//print '$foundtaskforuserpeeper='.$foundtaskforuserdeeper.'<br>';
if ( $foundtaskforuserdeeper > 0 )
{
$showlineingray = 1 ; // We will show line but in gray
}
else
{
$showline = 0 ; // No reason to show line
}
}
}
2014-01-06 12:42:50 +01:00
else
{
// Caller did not ask to filter on tasks of a specific user (this probably means he want also tasks of all users, into public project
// or into all other projects if user has permission to).
2014-01-06 13:02:20 +01:00
if ( empty ( $user -> rights -> projet -> all -> lire ))
2014-01-06 12:42:50 +01:00
{
// User is not allowed on this project and project is not public, so we hide line
if ( ! in_array ( $lines [ $i ] -> fk_project , $projectsArrayId ))
{
2014-01-06 13:02:20 +01:00
// Note that having a user assigned to a task into a project user has no permission on, should not be possible
// because assignement on task can be done only on contact of project.
2014-03-11 20:53:47 +01:00
// If assignement was done and after, was removed from contact of project, then we can hide the line.
$showline = 0 ;
2014-01-06 12:42:50 +01:00
}
}
}
2013-04-12 11:09:53 +02:00
if ( $showline )
{
// Break on a new project
if ( $parent == 0 && $lines [ $i ] -> fk_project != $lastprojectid )
{
$var = ! $var ;
$lastprojectid = $lines [ $i ] -> fk_project ;
}
print '<tr ' . $bc [ $var ] . ' id="row-' . $lines [ $i ] -> id . '">' . " \n " ;
if ( $showproject )
{
print " <td> " ;
//var_dump($taskrole);
if ( $showlineingray ) print '<i>' ;
$projectstatic -> id = $lines [ $i ] -> fk_project ;
$projectstatic -> ref = $lines [ $i ] -> projectref ;
$projectstatic -> public = $lines [ $i ] -> public ;
if ( $lines [ $i ] -> public || in_array ( $lines [ $i ] -> fk_project , $projectsArrayId )) print $projectstatic -> getNomUrl ( 1 );
else print $projectstatic -> getNomUrl ( 1 , 'nolink' );
if ( $showlineingray ) print '</i>' ;
print " </td> " ;
}
// Ref of task
print '<td>' ;
if ( $showlineingray )
{
2013-07-18 10:24:45 +02:00
print '<i>' . img_object ( '' , 'projecttask' ) . ' ' . $lines [ $i ] -> ref . '</i>' ;
2013-04-12 11:09:53 +02:00
}
else
{
$taskstatic -> id = $lines [ $i ] -> id ;
2013-07-18 10:24:45 +02:00
$taskstatic -> ref = $lines [ $i ] -> ref ;
2013-04-12 11:09:53 +02:00
$taskstatic -> label = ( $taskrole [ $lines [ $i ] -> id ] ? $langs -> trans ( " YourRole " ) . ': ' . $taskrole [ $lines [ $i ] -> id ] : '' );
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 . ( $showproject ? '' : '&withproject=1' ) . '">' ;
for ( $k = 0 ; $k < $level ; $k ++ )
{
print " " ;
}
print $lines [ $i ] -> label ;
if ( $showlineingray ) print '</i>' ;
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>' ;
2013-10-30 21:44:04 +01:00
// Planned Workload (in working hours)
2013-05-14 20:30:18 +02:00
print '<td align="center">' ;
2013-10-30 21:44:04 +01:00
$fullhour = convertSecondToTime ( $lines [ $i ] -> planned_workload , 'allhourmin' );
$workingdelay = convertSecondToTime ( $lines [ $i ] -> planned_workload , 'all' , 86400 , 7 ); // TODO Replace 86400 and 7 to take account working hours per day and working day per weeks
if ( $lines [ $i ] -> planned_workload )
{
print $fullhour ;
// TODO Add delay taking account of working hours per day and working day per week
//if ($workingdelay != $fullhour) print '<br>('.$workingdelay.')';
}
//else print '--:--';
2013-05-14 20:30:18 +02:00
print '</td>' ;
2013-05-13 17:08:36 +02:00
2013-10-30 21:44:04 +01:00
// Progress declared
2013-04-12 11:09:53 +02:00
print '<td align="right">' ;
print $lines [ $i ] -> progress . ' %' ;
print '</td>' ;
// 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 . ( $showproject ? '' : '&withproject=1' ) . '">' ;
2013-10-30 21:44:04 +01:00
if ( $lines [ $i ] -> duration ) print convertSecondToTime ( $lines [ $i ] -> duration , 'allhourmin' );
2013-04-12 11:09:53 +02:00
else print '--:--' ;
if ( $showlineingray ) print '</i>' ;
else print '</a>' ;
print '</td>' ;
2013-10-30 21:44:04 +01:00
// Progress calculated
// Note: ->duration is in fact time spent i think
print '<td align="right">' ;
if ( $lines [ $i ] -> planned_workload ) print round ( 100 * $lines [ $i ] -> duration / $lines [ $i ] -> planned_workload , 2 ) . ' %' ;
print '</td>' ;
2013-04-12 11:09:53 +02:00
// Tick to drag and drop
if ( $addordertick )
{
2013-05-14 20:30:18 +02:00
print '<td align="center" class="tdlineupdown hideonsmartphone"> </td>' ;
2013-04-12 11:09:53 +02:00
}
print " </tr> \n " ;
if ( ! $showlineingray ) $inc ++ ;
$level ++ ;
2014-03-11 20:53:47 +01:00
if ( $lines [ $i ] -> id ) projectLinesa ( $inc , $lines [ $i ] -> id , $lines , $level , $var , $showproject , $taskrole , $projectsListId , $addordertick );
2013-04-12 11:09:53 +02:00
$level -- ;
$total += $lines [ $i ] -> duration ;
}
}
else
{
//$level--;
}
}
2014-03-11 20:53:47 +01:00
if ( $total > 0 && $level == 0 )
2013-04-12 11:09:53 +02:00
{
2013-04-16 01:13:20 +02:00
print '<tr class="liste_total">' ;
print '<td class="liste_total">' . $langs -> trans ( " Total " ) . '</td>' ;
2013-04-12 11:09:53 +02:00
if ( $showproject ) print '<td></td>' ;
print '<td></td>' ;
print '<td></td>' ;
print '<td></td>' ;
print '<td></td>' ;
2013-05-13 17:08:36 +02:00
print '<td></td>' ;
2013-10-30 21:44:04 +01:00
print '<td align="right" class="nowrap liste_total">' . convertSecondToTime ( $total , 'allhourmin' ) . '</td>' ;
print '<td></td>' ;
2014-03-11 20:53:47 +01:00
if ( $addordertick ) print '<td class="hideonsmartphone"></td>' ;
2013-04-16 01:13:20 +02:00
print '</tr>' ;
2013-04-12 11:09:53 +02:00
}
return $inc ;
2009-01-15 00:36:51 +01:00
}
2009-07-28 15:37:28 +02:00
2012-02-15 23:08:20 +01:00
/**
* 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 )
{
2013-04-12 11:09:53 +02:00
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 " " ;
}
$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 , 'day' );
print '</td>' ;
// Date end
print '<td align="center">' ;
print dol_print_date ( $lines [ $i ] -> date_end , 'day' );
print '</td>' ;
2013-05-14 20:30:18 +02:00
// Planned Workload
2013-11-05 11:17:54 +01:00
print '<td align="right">' ;
if ( $lines [ $i ] -> planned_workload ) print convertSecondToTime ( $lines [ $i ] -> planned_workload , 'allhourmin' );
2013-05-15 14:25:33 +02:00
else print '--:--' ;
2013-05-14 20:30:18 +02:00
print '</td>' ;
2013-05-13 17:08:36 +02:00
2013-11-05 11:17:54 +01:00
// Progress declared %
2013-04-12 11:09:53 +02:00
print '<td align="right">' ;
print $lines [ $i ] -> progress . ' %' ;
print '</td>' ;
// Time spent
print '<td align="right">' ;
2014-03-11 20:53:47 +01:00
if ( $lines [ $i ] -> duration )
2013-11-05 11:17:54 +01:00
{
print '<a href="' . DOL_URL_ROOT . '/projet/tasks/time.php?id=' . $lines [ $i ] -> id . '">' ;
print convertSecondToTime ( $lines [ $i ] -> duration , 'allhourmin' );
print '</a>' ;
}
2013-04-12 11:09:53 +02:00
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 ;
}
2013-04-25 01:13:13 +02:00
print '<td class="nowrap">' ;
2013-04-12 11:09:53 +02:00
$s = $form -> select_date ( '' , $lines [ $i ] -> id , '' , '' , '' , " addtime " , 1 , 0 , 1 , $disabledtask );
$s .= ' ' ;
2013-10-30 11:57:32 +01:00
$s .= $form -> select_duration ( $lines [ $i ] -> id , '' , $disabledtask , 'text' );
2013-04-12 11:09:53 +02:00
$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 ;
2012-02-15 23:08:20 +01:00
}
2009-07-28 15:37:28 +02:00
/**
* Search in task lines with a particular parent if there is a task for a particular user ( in taskrole )
2012-02-04 14:39:47 +01:00
*
* @ param string & $inc Counter that count number of lines legitimate to show ( for return )
* @ param int $parent Id of parent task to start
* @ param array & $lines Array of all tasks
* @ param string & $taskrole Array of task filtered on a particular user
* @ return int 1 if there is
2009-07-28 15:37:28 +02:00
*/
2012-02-04 15:20:32 +01:00
function searchTaskInChild ( & $inc , $parent , & $lines , & $taskrole )
2009-07-28 15:37:28 +02:00
{
2013-04-12 11:09:53 +02:00
//print 'Search in line with parent id = '.$parent.'<br>';
$numlines = count ( $lines );
for ( $i = 0 ; $i < $numlines ; $i ++ )
{
// Process line $lines[$i]
if ( $lines [ $i ] -> fk_parent == $parent && $lines [ $i ] -> id != $lines [ $i ] -> fk_parent )
{
// If task is legitimate to show, no more need to search deeper
if ( isset ( $taskrole [ $lines [ $i ] -> id ]))
{
//print 'Found a legitimate task id='.$lines[$i]->id.'<br>';
$inc ++ ;
return $inc ;
}
searchTaskInChild ( $inc , $lines [ $i ] -> id , $lines , $taskrole );
//print 'Found inc='.$inc.'<br>';
if ( $inc > 0 ) return $inc ;
}
}
return $inc ;
2009-07-28 15:37:28 +02:00
}
2010-02-20 21:24:09 +01:00
/**
* Return HTML table with list of projects and number of opened tasks
*
2012-02-04 14:39:47 +01:00
* @ param DoliDB $db Database handler
* @ param int $socid Id thirdparty
* @ param int $projectsListId Id of project i have permission on
* @ param int $mytasks Limited to task i am contact to
* @ return void
2010-02-20 21:24:09 +01:00
*/
2011-04-20 01:03:28 +02:00
function print_projecttasks_array ( $db , $socid , $projectsListId , $mytasks = 0 )
2010-02-20 21:24:09 +01:00
{
2013-04-12 11:09:53 +02:00
global $langs , $conf , $user , $bc ;
require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php' ;
$projectstatic = new Project ( $db );
$sortfield = '' ;
$sortorder = '' ;
print '<table class="noborder" width="100%">' ;
print '<tr class="liste_titre">' ;
print_liste_field_titre ( $langs -> trans ( " Project " ), " index.php " , " " , " " , " " , " " , $sortfield , $sortorder );
2013-05-03 12:13:10 +02:00
print_liste_field_titre ( $langs -> trans ( " Tasks " ), " " , " " , " " , " " , 'align="right"' , $sortfield , $sortorder );
2013-04-12 11:09:53 +02:00
print_liste_field_titre ( $langs -> trans ( " Status " ), " " , " " , " " , " " , 'align="right"' , $sortfield , $sortorder );
print " </tr> \n " ;
$sql = " SELECT p.rowid as projectid, p.ref, p.title, p.fk_user_creat, p.public, p.fk_statut, COUNT(t.rowid) as nb " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " projet as p " ;
if ( $mytasks )
{
$sql .= " , " . MAIN_DB_PREFIX . " projet_task as t " ;
$sql .= " , " . MAIN_DB_PREFIX . " element_contact as ec " ;
$sql .= " , " . MAIN_DB_PREFIX . " c_type_contact as ctc " ;
}
else
{
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . " projet_task as t ON p.rowid = t.fk_projet " ;
}
$sql .= " WHERE p.entity = " . $conf -> entity ;
$sql .= " AND p.rowid IN ( " . $projectsListId . " ) " ;
if ( $socid ) $sql .= " AND (p.fk_soc IS NULL OR p.fk_soc = 0 OR p.fk_soc = " . $socid . " ) " ;
if ( $mytasks )
{
$sql .= " AND p.rowid = t.fk_projet " ;
$sql .= " AND ec.element_id = t.rowid " ;
$sql .= " AND ctc.rowid = ec.fk_c_type_contact " ;
$sql .= " AND ctc.element = 'project_task' " ;
$sql .= " AND ec.fk_socpeople = " . $user -> id ;
}
$sql .= " GROUP BY p.rowid, p.ref, p.title, p.fk_user_creat, p.public, p.fk_statut " ;
$sql .= " ORDER BY p.title, p.ref " ;
$var = true ;
$resql = $db -> query ( $sql );
if ( $resql )
{
$num = $db -> num_rows ( $resql );
$i = 0 ;
while ( $i < $num )
{
$objp = $db -> fetch_object ( $resql );
$projectstatic -> id = $objp -> projectid ;
$projectstatic -> user_author_id = $objp -> fk_user_creat ;
$projectstatic -> public = $objp -> public ;
// Check is user has read permission on project
$userAccess = $projectstatic -> restrictedProjectArea ( $user );
if ( $userAccess >= 0 )
{
$var =! $var ;
print " <tr " . $bc [ $var ] . " > " ;
2013-04-25 01:13:13 +02:00
print '<td class="nowrap">' ;
2013-04-12 11:09:53 +02:00
$projectstatic -> ref = $objp -> ref ;
print $projectstatic -> getNomUrl ( 1 );
2013-05-03 12:13:10 +02:00
print ' - ' . dol_trunc ( $objp -> title , 24 ) . '</td>' ;
2013-04-12 11:09:53 +02:00
print '<td align="right">' . $objp -> nb . '</td>' ;
$projectstatic -> statut = $objp -> fk_statut ;
print '<td align="right">' . $projectstatic -> getLibStatut ( 3 ) . '</td>' ;
print " </tr> \n " ;
}
$i ++ ;
}
$db -> free ( $resql );
}
else
{
dol_print_error ( $db );
}
print " </table> " ;
2009-01-15 00:36:51 +01:00
}
2013-06-25 23:22:00 +02:00
?>