2010-05-22 18:53:36 +02:00
< ? php
/* Copyright ( C ) 2005 Rodolphe Quiedeville < rodolphe @ quiedeville . org >
2017-12-18 19:04:57 +01:00
* Copyright ( C ) 2004 - 2017 Laurent Destailleur < eldy @ users . sourceforge . net >
2018-10-27 14:43:12 +02:00
* Copyright ( C ) 2005 - 2012 Regis Houssin < regis . houssin @ inodbox . com >
2025-02-10 21:20:09 +01:00
* Copyright ( C ) 2024 - 2025 MDW < mdeweerd @ users . noreply . github . com >
2024-11-04 23:53:20 +01:00
* Copyright ( C ) 2024 Frédéric France < frederic . france @ free . fr >
2010-05-22 18:53:36 +02:00
*
* 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
2013-01-16 15:36:08 +01:00
* the Free Software Foundation ; either version 3 of the License , or
2010-05-22 18:53:36 +02:00
* ( 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
2019-09-23 21:55:30 +02:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
2010-05-22 18:53:36 +02:00
*/
/**
* \file htdocs / projet / ganttview . php
* \ingroup projet
2024-01-12 17:55:52 +01:00
* \brief Gantt diagram of a project
2010-05-22 18:53:36 +02:00
*/
2018-07-26 11:57:25 +02:00
require " ../main.inc.php " ;
2012-08-22 23:11:24 +02:00
require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php' ;
require_once DOL_DOCUMENT_ROOT . '/projet/class/task.class.php' ;
require_once DOL_DOCUMENT_ROOT . '/core/lib/project.lib.php' ;
require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php' ;
2017-10-18 19:13:44 +02:00
require_once DOL_DOCUMENT_ROOT . '/societe/class/societe.class.php' ;
require_once DOL_DOCUMENT_ROOT . '/contact/class/contact.class.php' ;
2020-04-06 15:12:42 +02:00
require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php' ;
2012-08-22 23:11:24 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/class/html.formother.class.php' ;
2024-11-04 23:53:20 +01:00
/**
* @ var Conf $conf
* @ var DoliDB $db
* @ var HookManager $hookmanager
* @ var Translate $langs
* @ var User $user
*/
2010-05-22 18:53:36 +02:00
2019-11-13 19:37:08 +01:00
$id = GETPOST ( 'id' , 'intcomma' );
$ref = GETPOST ( 'ref' , 'alpha' );
2013-01-10 16:04:23 +01:00
2013-01-13 19:33:54 +01:00
$mode = GETPOST ( 'mode' , 'alpha' );
$mine = ( $mode == 'mine' ? 1 : 0 );
2010-05-29 01:26:08 +02:00
//if (! $user->rights->projet->all->lire) $mine=1; // Special for projects
2010-05-30 14:21:32 +02:00
2012-05-23 14:34:44 +02:00
$object = new Project ( $db );
2015-03-02 17:54:35 +01:00
2024-06-30 21:02:50 +02:00
include DOL_DOCUMENT_ROOT . '/core/actions_fetchobject.inc.php' ; // Must be 'include', not 'include_once'
2023-11-27 11:56:32 +01:00
if ( getDolGlobalString ( 'PROJECT_ALLOW_COMMENT_ON_PROJECT' ) && method_exists ( $object , 'fetchComments' ) && empty ( $object -> comments )) {
2021-02-26 18:49:22 +01:00
$object -> fetchComments ();
}
2012-05-23 14:34:44 +02:00
2010-05-30 14:21:32 +02:00
// Security check
2020-04-10 10:59:32 +02:00
$socid = 0 ;
2024-01-12 17:55:52 +01:00
//if ($user->socid > 0) $socid = $user->socid; // For external user, no check is done on company because readability is managed by public status of project and assignment.
2017-12-18 15:39:40 +01:00
$result = restrictedArea ( $user , 'projet' , $id , 'projet&project' );
2010-05-22 18:53:36 +02:00
2018-05-26 21:11:25 +02:00
// Load translation files required by the page
$langs -> loadlangs ( array ( 'users' , 'projects' ));
2010-05-22 18:53:36 +02:00
/*
* Actions
*/
2012-02-15 23:08:20 +01:00
// None
2010-05-22 18:53:36 +02:00
/*
* View
*/
2019-11-13 19:37:08 +01:00
$form = new Form ( $db );
$formother = new FormOther ( $db );
$userstatic = new User ( $db );
$companystatic = new Societe ( $db );
$contactstatic = new Contact ( $db );
2012-02-15 23:08:20 +01:00
$task = new Task ( $db );
2019-11-13 19:37:08 +01:00
$arrayofcss = array ( '/includes/jsgantt/jsgantt.css' );
2024-11-08 14:41:01 +01:00
$arrayofjs = [];
2021-02-26 18:49:22 +01:00
if ( ! empty ( $conf -> use_javascript_ajax )) {
2024-11-08 14:41:01 +01:00
$arrayofjs = [
'/includes/jsgantt/jsgantt.js' ,
'/projet/jsgantt_language.js.php?lang=' . $langs -> defaultlang
];
2010-08-19 22:36:01 +02:00
}
2010-05-22 18:53:36 +02:00
2018-05-04 11:25:21 +02:00
//$title=$langs->trans("Gantt").($object->ref?' - '.$object->ref.' '.$object->name:'');
2019-11-13 19:37:08 +01:00
$title = $langs -> trans ( " Gantt " );
2024-03-22 00:37:56 +01:00
if ( getDolGlobalString ( 'MAIN_HTML_TITLE' ) && preg_match ( '/projectnameonly/' , getDolGlobalString ( 'MAIN_HTML_TITLE' )) && $object -> name ) {
2021-02-26 18:49:22 +01:00
$title = ( $object -> ref ? $object -> ref . ' ' . $object -> name . ' - ' : '' ) . $langs -> trans ( " Gantt " );
}
2019-11-13 19:37:08 +01:00
$help_url = " EN:Module_Projects|FR:Module_Projets|ES:Módulo_Proyectos " ;
2021-09-24 02:16:40 +02:00
2024-07-13 18:10:40 +02:00
llxHeader ( " " , $title , $help_url , '' , 0 , 0 , $arrayofjs , $arrayofcss , '' , 'mod-project page-card_ganttview' );
2010-05-22 18:53:36 +02:00
2025-02-10 21:20:09 +01:00
$userWrite = 0 ;
2021-02-26 18:49:22 +01:00
if (( $id > 0 && is_numeric ( $id )) || ! empty ( $ref )) {
2010-05-22 18:53:36 +02:00
// To verify role of users
2012-02-15 23:08:20 +01:00
//$userAccess = $object->restrictedProjectArea($user,'read');
2019-11-13 19:37:08 +01:00
$userWrite = $object -> restrictedProjectArea ( $user , 'write' );
2012-02-15 23:08:20 +01:00
//$userDelete = $object->restrictedProjectArea($user,'delete');
//print "userAccess=".$userAccess." userWrite=".$userWrite." userDelete=".$userDelete;
2010-05-22 18:53:36 +02:00
2020-10-31 14:32:18 +01:00
$tab = 'tasks' ;
$head = project_prepare_head ( $object );
print dol_get_fiche_head ( $head , $tab , $langs -> trans ( " Project " ), - 1 , ( $object -> public ? 'projectpub' : 'project' ));
$param = ( $mode == 'mine' ? '&mode=mine' : '' );
// Project card
2023-09-06 14:56:51 +02:00
if ( ! empty ( $_SESSION [ 'pageforbacktolist' ]) && ! empty ( $_SESSION [ 'pageforbacktolist' ][ 'project' ])) {
$tmpurl = $_SESSION [ 'pageforbacktolist' ][ 'project' ];
2024-03-19 22:15:32 +01:00
$tmpurl = preg_replace ( '/__SOCID__/' , ( string ) $object -> socid , $tmpurl );
2023-09-06 14:56:51 +02:00
$linkback = '<a href="' . $tmpurl . ( preg_match ( '/\?/' , $tmpurl ) ? '&' : '?' ) . 'restore_lastsearch_values=1">' . $langs -> trans ( " BackToList " ) . '</a>' ;
} else {
$linkback = '<a href="' . DOL_URL_ROOT . '/projet/list.php?restore_lastsearch_values=1">' . $langs -> trans ( " BackToList " ) . '</a>' ;
}
2020-10-31 14:32:18 +01:00
$morehtmlref = '<div class="refidno">' ;
// Title
$morehtmlref .= $object -> title ;
// Thirdparty
2021-10-24 10:02:12 +02:00
if ( ! empty ( $object -> thirdparty -> id ) && $object -> thirdparty -> id > 0 ) {
2022-10-21 15:08:54 +02:00
$morehtmlref .= '<br>' . $object -> thirdparty -> getNomUrl ( 1 , 'project' );
2020-10-31 14:32:18 +01:00
}
$morehtmlref .= '</div>' ;
// Define a complementary filter for search of next/prev ref.
2023-10-15 18:39:13 +02:00
if ( ! $user -> hasRight ( 'projet' , 'all' , 'lire' )) {
2020-10-31 14:32:18 +01:00
$objectsListId = $object -> getProjectsAuthorizedForUser ( $user , 0 , 0 );
2024-12-10 11:54:33 +01:00
$object -> next_prev_filter = " rowid:IN: " . $db -> sanitize ( count ( $objectsListId ) ? implode ( ',' , array_keys ( $objectsListId )) : '0' );
2020-10-31 14:32:18 +01:00
}
dol_banner_tab ( $object , 'ref' , $linkback , 1 , 'ref' , 'ref' , $morehtmlref );
print '<div class="fichecenter">' ;
print '<div class="fichehalfleft">' ;
print '<div class="underbanner clearboth"></div>' ;
print '<table class="border tableforfield centpercent">' ;
// Usage
2023-11-27 11:56:32 +01:00
if ( getDolGlobalString ( 'PROJECT_USE_OPPORTUNITIES' ) || ! getDolGlobalString ( 'PROJECT_HIDE_TASKS' ) || isModEnabled ( 'eventorganization' )) {
2021-09-24 02:16:40 +02:00
print '<tr><td class="tdtop">' ;
print $langs -> trans ( " Usage " );
print '</td>' ;
print '<td>' ;
2023-11-27 11:56:32 +01:00
if ( getDolGlobalString ( 'PROJECT_USE_OPPORTUNITIES' )) {
2021-09-24 02:16:40 +02:00
print '<input type="checkbox" disabled name="usage_opportunity"' . ( GETPOSTISSET ( 'usage_opportunity' ) ? ( GETPOST ( 'usage_opportunity' , 'alpha' ) != '' ? ' checked="checked"' : '' ) : ( $object -> usage_opportunity ? ' checked="checked"' : '' )) . '"> ' ;
$htmltext = $langs -> trans ( " ProjectFollowOpportunity " );
print $form -> textwithpicto ( $langs -> trans ( " ProjectFollowOpportunity " ), $htmltext );
print '<br>' ;
}
2023-11-27 11:56:32 +01:00
if ( ! getDolGlobalString ( 'PROJECT_HIDE_TASKS' )) {
2021-09-24 02:16:40 +02:00
print '<input type="checkbox" disabled name="usage_task"' . ( GETPOSTISSET ( 'usage_task' ) ? ( GETPOST ( 'usage_task' , 'alpha' ) != '' ? ' checked="checked"' : '' ) : ( $object -> usage_task ? ' checked="checked"' : '' )) . '"> ' ;
$htmltext = $langs -> trans ( " ProjectFollowTasks " );
print $form -> textwithpicto ( $langs -> trans ( " ProjectFollowTasks " ), $htmltext );
print '<br>' ;
}
2023-11-27 11:56:32 +01:00
if ( ! getDolGlobalString ( 'PROJECT_HIDE_TASKS' ) && getDolGlobalString ( 'PROJECT_BILL_TIME_SPENT' )) {
2021-09-24 02:16:40 +02:00
print '<input type="checkbox" disabled name="usage_bill_time"' . ( GETPOSTISSET ( 'usage_bill_time' ) ? ( GETPOST ( 'usage_bill_time' , 'alpha' ) != '' ? ' checked="checked"' : '' ) : ( $object -> usage_bill_time ? ' checked="checked"' : '' )) . '"> ' ;
$htmltext = $langs -> trans ( " ProjectBillTimeDescription " );
print $form -> textwithpicto ( $langs -> trans ( " BillTime " ), $htmltext );
print '<br>' ;
}
2022-08-31 22:38:53 +02:00
if ( isModEnabled ( 'eventorganization' )) {
2021-09-24 02:16:40 +02:00
print '<input type="checkbox" disabled name="usage_organize_event"' . ( GETPOSTISSET ( 'usage_organize_event' ) ? ( GETPOST ( 'usage_organize_event' , 'alpha' ) != '' ? ' checked="checked"' : '' ) : ( $object -> usage_organize_event ? ' checked="checked"' : '' )) . '"> ' ;
$htmltext = $langs -> trans ( " EventOrganizationDescriptionLong " );
print $form -> textwithpicto ( $langs -> trans ( " ManageOrganizeEvent " ), $htmltext );
}
print '</td></tr>' ;
2020-10-31 14:32:18 +01:00
}
// Visibility
print '<tr><td class="titlefield">' . $langs -> trans ( " Visibility " ) . '</td><td>' ;
2021-02-26 18:49:22 +01:00
if ( $object -> public ) {
2022-05-16 18:00:59 +02:00
print img_picto ( $langs -> trans ( 'SharedProject' ), 'world' , 'class="paddingrightonly"' );
2021-02-26 18:49:22 +01:00
print $langs -> trans ( 'SharedProject' );
} else {
2022-05-16 18:00:59 +02:00
print img_picto ( $langs -> trans ( 'PrivateProject' ), 'private' , 'class="paddingrightonly"' );
2021-02-26 18:49:22 +01:00
print $langs -> trans ( 'PrivateProject' );
}
2020-10-31 14:32:18 +01:00
print '</td></tr>' ;
2022-10-21 13:19:21 +02:00
// Budget
print '<tr><td>' . $langs -> trans ( " Budget " ) . '</td><td>' ;
2023-01-31 21:17:06 +01:00
if ( ! is_null ( $object -> budget_amount ) && strcmp ( $object -> budget_amount , '' )) {
2024-03-08 21:30:04 +01:00
print price ( $object -> budget_amount , 0 , $langs , 1 , 0 , 0 , $conf -> currency );
2022-10-21 13:19:21 +02:00
}
print '</td></tr>' ;
// Date start - end project
print '<tr><td>' . $langs -> trans ( " Dates " ) . '</td><td>' ;
2019-01-27 11:55:16 +01:00
$start = dol_print_date ( $object -> date_start , 'day' );
2023-12-04 13:49:31 +01:00
print ( $start ? $start : '?' );
2019-01-27 11:55:16 +01:00
$end = dol_print_date ( $object -> date_end , 'day' );
2017-04-05 14:48:24 +02:00
print ' - ' ;
2023-12-04 13:49:31 +01:00
print ( $end ? $end : '?' );
2021-02-26 18:49:22 +01:00
if ( $object -> hasDelay ()) {
print img_warning ( " Late " );
}
2020-10-31 14:32:18 +01:00
print '</td></tr>' ;
2017-07-29 01:59:26 +02:00
2020-10-31 14:32:18 +01:00
// Other attributes
$cols = 2 ;
include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php' ;
2017-07-29 01:59:26 +02:00
2020-10-31 14:32:18 +01:00
print '</table>' ;
2017-07-29 01:59:26 +02:00
2020-10-31 14:32:18 +01:00
print '</div>' ;
print '<div class="fichehalfright">' ;
print '<div class="underbanner clearboth"></div>' ;
2017-07-29 01:59:26 +02:00
2020-10-31 14:32:18 +01:00
print '<table class="border tableforfield centpercent">' ;
2017-07-29 01:59:26 +02:00
2020-10-31 14:32:18 +01:00
// Description
print '<td class="titlefield tdtop">' . $langs -> trans ( " Description " ) . '</td><td>' ;
print nl2br ( $object -> description );
print '</td></tr>' ;
2017-07-29 01:59:26 +02:00
2020-10-31 14:32:18 +01:00
// Categories
2024-02-27 15:30:37 +01:00
if ( isModEnabled ( 'category' )) {
2020-10-31 14:32:18 +01:00
print '<tr><td class="valignmiddle">' . $langs -> trans ( " Categories " ) . '</td><td>' ;
print $form -> showCategories ( $object -> id , Categorie :: TYPE_PROJECT , 1 );
print " </td></tr> " ;
}
2017-07-29 01:59:26 +02:00
2020-10-31 14:32:18 +01:00
print '</table>' ;
2017-07-29 01:59:26 +02:00
2020-10-31 14:32:18 +01:00
print '</div>' ;
print '</div>' ;
2017-07-29 01:59:26 +02:00
2020-10-31 14:32:18 +01:00
print '<div class="clearboth"></div>' ;
2017-07-29 01:59:26 +02:00
2020-10-31 14:32:18 +01:00
print dol_get_fiche_end ();
2010-05-22 18:53:36 +02:00
2020-10-31 14:32:18 +01:00
print '<br>' ;
2018-05-04 11:25:21 +02:00
}
2015-04-17 13:22:36 +02:00
2018-05-04 11:25:21 +02:00
// Link to create task
2019-04-15 21:33:31 +02:00
$linktocreatetaskParam = array ();
$linktocreatetaskUserRight = false ;
2023-10-15 18:39:13 +02:00
if ( $user -> hasRight ( 'projet' , 'all' , 'creer' ) || $user -> hasRight ( 'projet' , 'creer' )) {
2020-04-10 10:59:32 +02:00
if ( $object -> public || $userWrite > 0 ) {
2020-10-31 14:32:18 +01:00
$linktocreatetaskUserRight = true ;
2020-04-10 10:59:32 +02:00
} else {
2020-10-31 14:32:18 +01:00
$linktocreatetaskParam [ 'attr' ][ 'title' ] = $langs -> trans ( " NotOwnerOfProject " );
2017-10-20 04:04:16 +02:00
}
2010-05-22 18:53:36 +02:00
}
2024-09-13 03:09:23 +02:00
$linktocreatetask = dolGetButtonTitle ( $langs -> trans ( 'AddTask' ), '' , 'fa fa-plus-circle' , DOL_URL_ROOT . '/projet/tasks.php?id=' . $object -> id . '&action=create' . $param . '&backtopage=' . urlencode ( $_SERVER [ 'PHP_SELF' ] . '?id=' . $object -> id ), '' , ( int ) $linktocreatetaskUserRight , $linktocreatetaskParam );
2019-04-15 21:33:31 +02:00
2024-03-19 22:15:32 +01:00
$linktotasks = dolGetButtonTitle ( $langs -> trans ( 'ViewList' ), '' , 'fa fa-bars paddingleft imgforviewmode' , DOL_URL_ROOT . '/projet/tasks.php?id=' . $object -> id , '' , 1 , array ( 'morecss' => 'reposition' ));
$linktotasks .= dolGetButtonTitle ( $langs -> trans ( 'ViewGantt' ), '' , 'fa fa-stream paddingleft imgforviewmode' , DOL_URL_ROOT . '/projet/ganttview.php?id=' . $object -> id . '&withproject=1' , '' , 1 , array ( 'morecss' => 'reposition marginleftonly btnTitleSelected' ));
2018-05-04 11:25:21 +02:00
2019-09-30 10:14:55 +02:00
//print_barre_liste($title, 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, $linktotasks, $num, $totalnboflines, 'generic', 0, '', '', 0, 1);
2020-10-12 18:36:13 +02:00
print load_fiche_titre ( $title , $linktotasks . ' ' . $linktocreatetask , 'projecttask' );
2018-05-04 11:25:21 +02:00
2010-05-22 18:53:36 +02:00
// 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).
2025-02-10 21:20:09 +01:00
$tasksarray = $task -> getTasksArray ( null , null , ( $object -> id ? $object -> id : $id ), $socid , 0 );
2010-05-22 18:53:36 +02:00
// We load also tasks limited to a particular user
2022-12-28 11:41:59 +01:00
//$tasksrole=($_REQUEST["mode"]=='mine' ? $task->getUserRolesForProjectsOrTasks(null, $user, $object->id, 0) : '');
2010-05-22 18:53:36 +02:00
//var_dump($tasksarray);
//var_dump($tasksrole);
2021-02-26 18:49:22 +01:00
if ( count ( $tasksarray ) > 0 ) {
2010-05-23 22:37:28 +02:00
// Show Gant diagram from $taskarray using JSGantt
2020-04-10 10:59:32 +02:00
$dateformat = $langs -> trans ( " FormatDateShortJQuery " ); // Used by include ganttchart.inc.php later
$datehourformat = $langs -> trans ( " FormatDateShortJQuery " ) . ' ' . $langs -> trans ( " FormatHourShortJQuery " ); // Used by include ganttchart.inc.php later
$array_contacts = array ();
$tasks = array ();
$task_dependencies = array ();
$taskcursor = 0 ;
2021-02-26 18:49:22 +01:00
foreach ( $tasksarray as $key => $val ) { // Task array are sorted by "project, position, date"
2018-01-04 13:52:37 +01:00
$task -> fetch ( $val -> id , '' );
2024-01-03 23:38:26 +01:00
$idparent = ( $val -> fk_task_parent ? $val -> fk_task_parent : '-' . $val -> fk_project ); // If start with -, id is a project id
2017-10-18 19:13:44 +02:00
2020-04-10 10:59:32 +02:00
$tasks [ $taskcursor ][ 'task_id' ] = $val -> id ;
2020-10-12 17:41:03 +02:00
$tasks [ $taskcursor ][ 'task_alternate_id' ] = ( $taskcursor + 1 ); // An id that has same order than position (required by ganttchart)
2020-04-10 10:59:32 +02:00
$tasks [ $taskcursor ][ 'task_project_id' ] = $val -> fk_project ;
$tasks [ $taskcursor ][ 'task_parent' ] = $idparent ;
2018-01-04 13:52:37 +01:00
$tasks [ $taskcursor ][ 'task_is_group' ] = 0 ;
2020-10-31 14:32:18 +01:00
$tasks [ $taskcursor ][ 'task_css' ] = 'gtaskblue' ;
$tasks [ $taskcursor ][ 'task_position' ] = $val -> rang ;
$tasks [ $taskcursor ][ 'task_planned_workload' ] = $val -> planned_workload ;
2024-01-03 23:38:26 +01:00
if ( $val -> fk_task_parent != 0 && $task -> hasChildren () > 0 ) {
2020-10-31 14:32:18 +01:00
$tasks [ $taskcursor ][ 'task_is_group' ] = 1 ;
$tasks [ $taskcursor ][ 'task_css' ] = 'ggroupblack' ;
2023-12-13 12:46:23 +01:00
//$tasks[$taskcursor]['task_css'] = 'gtaskblue';
2020-10-31 14:32:18 +01:00
} elseif ( $task -> hasChildren () > 0 ) {
$tasks [ $taskcursor ][ 'task_is_group' ] = 1 ;
//$tasks[$taskcursor]['task_is_group'] = 0;
$tasks [ $taskcursor ][ 'task_css' ] = 'ggroupblack' ;
//$tasks[$taskcursor]['task_css'] = 'gtaskblue';
}
2025-02-10 21:20:09 +01:00
$tasks [ $taskcursor ][ 'task_milestone' ] = 0 ;
2020-04-10 10:59:32 +02:00
$tasks [ $taskcursor ][ 'task_percent_complete' ] = $val -> progress ;
2010-06-26 02:23:18 +02:00
//$tasks[$taskcursor]['task_name']=$task->getNomUrl(1);
2015-04-17 13:22:36 +02:00
//print dol_print_date($val->date_start).dol_print_date($val->date_end).'<br>'."\n";
2020-04-10 10:59:32 +02:00
$tasks [ $taskcursor ][ 'task_name' ] = $val -> ref . ' - ' . $val -> label ;
$tasks [ $taskcursor ][ 'task_start_date' ] = $val -> date_start ;
$tasks [ $taskcursor ][ 'task_end_date' ] = $val -> date_end ;
$tasks [ $taskcursor ][ 'task_color' ] = 'b4d1ea' ;
$idofusers = $task -> getListContactId ( 'internal' );
$idofcontacts = $task -> getListContactId ( 'external' );
2021-02-26 18:49:22 +01:00
$s = '' ;
if ( count ( $idofusers ) > 0 ) {
2020-04-10 10:59:32 +02:00
$s .= $langs -> trans ( " Internals " ) . ': ' ;
$i = 0 ;
2021-02-26 18:49:22 +01:00
foreach ( $idofusers as $valid ) {
2010-05-24 00:07:24 +02:00
$userstatic -> fetch ( $valid );
2021-02-26 18:49:22 +01:00
if ( $i ) {
$s .= ', ' ;
}
2020-04-10 10:59:32 +02:00
$s .= $userstatic -> login ;
2010-05-24 00:07:24 +02:00
$i ++ ;
}
}
2017-10-18 19:13:44 +02:00
//if (count($idofusers)>0 && (count($idofcontacts)>0)) $s.=' - ';
2021-02-26 18:49:22 +01:00
if ( count ( $idofcontacts ) > 0 ) {
if ( $s ) {
$s .= ' - ' ;
}
2020-04-10 10:59:32 +02:00
$s .= $langs -> trans ( " Externals " ) . ': ' ;
$i = 0 ;
$contactidfound = array ();
2021-02-26 18:49:22 +01:00
foreach ( $idofcontacts as $valid ) {
if ( empty ( $contactidfound [ $valid ])) {
2017-10-18 19:13:44 +02:00
$res = $contactstatic -> fetch ( $valid );
2021-02-26 18:49:22 +01:00
if ( $res > 0 ) {
if ( $i ) {
$s .= ', ' ;
}
2020-04-10 10:59:32 +02:00
$s .= $contactstatic -> getFullName ( $langs );
$contactidfound [ $valid ] = 1 ;
2017-10-18 19:13:44 +02:00
$i ++ ;
}
}
2010-05-24 00:07:24 +02:00
}
}
2020-12-15 03:55:46 +01:00
2016-07-26 01:59:27 +02:00
/* For JSGanttImproved */
//if ($s) $tasks[$taskcursor]['task_resources']=implode(',',$idofusers);
2020-10-31 14:32:18 +01:00
$tasks [ $taskcursor ][ 'task_resources' ] = $s ;
2021-02-26 18:49:22 +01:00
if ( $s ) {
2024-03-23 17:18:11 +01:00
$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 ( " Contacts " ) . '</a>' ;
2021-02-26 18:49:22 +01:00
}
2010-06-26 02:23:18 +02:00
//print "xxx".$val->id.$tasks[$taskcursor]['task_resources'];
2020-10-31 14:32:18 +01:00
$tasks [ $taskcursor ][ 'note' ] = $task -> note_public ;
2010-06-26 02:23:18 +02:00
$taskcursor ++ ;
2010-05-23 22:37:28 +02:00
}
2010-05-22 18:53:36 +02:00
2024-01-12 17:55:52 +01:00
// Search parent to set task_parent_alternate_id (required by ganttchart)
2021-02-26 18:49:22 +01:00
foreach ( $tasks as $tmpkey => $tmptask ) {
foreach ( $tasks as $tmptask2 ) {
if ( $tmptask2 [ 'task_id' ] == $tmptask [ 'task_parent' ]) {
2019-11-13 19:37:08 +01:00
$tasks [ $tmpkey ][ 'task_parent_alternate_id' ] = $tmptask2 [ 'task_alternate_id' ];
2018-01-04 13:52:37 +01:00
break ;
}
}
2021-02-26 18:49:22 +01:00
if ( empty ( $tasks [ $tmpkey ][ 'task_parent_alternate_id' ])) {
$tasks [ $tmpkey ][ 'task_parent_alternate_id' ] = $tasks [ $tmpkey ][ 'task_parent' ];
}
2018-01-04 13:52:37 +01:00
}
2010-05-23 22:37:28 +02:00
print " \n " ;
2010-08-19 22:36:01 +02:00
2021-02-26 18:49:22 +01:00
if ( ! empty ( $conf -> use_javascript_ajax )) {
2020-10-31 14:32:18 +01:00
//var_dump($_SESSION);
2017-10-20 04:04:16 +02:00
2024-01-12 17:55:52 +01:00
// How the date for data are formatted (format used bu jsgantt)
2020-10-31 14:32:18 +01:00
$dateformatinput = 'yyyy-mm-dd' ;
2024-01-12 17:55:52 +01:00
// How the date for data are formatted (format used by dol_print_date)
2020-10-31 14:32:18 +01:00
$dateformatinput2 = 'standard' ;
//var_dump($dateformatinput);
2021-02-26 18:49:22 +01:00
//var_dump($dateformatinput2);
2017-08-22 20:20:34 +02:00
2020-10-31 14:32:18 +01:00
$moreforfilter = '<div class="liste_titre liste_titre_bydiv centpercent">' ;
2020-07-27 14:19:50 +02:00
2020-10-31 14:32:18 +01:00
$moreforfilter .= '<div class="divsearchfield">' ;
//$moreforfilter .= $langs->trans("TasksAssignedTo").': ';
//$moreforfilter .= $form->select_dolusers($tmpuser->id > 0 ? $tmpuser->id : '', 'search_user_id', 1);
$moreforfilter .= ' ' ;
$moreforfilter .= '</div>' ;
2020-07-27 14:19:50 +02:00
2020-10-31 14:32:18 +01:00
$moreforfilter .= '</div>' ;
2020-07-27 14:19:50 +02:00
print $moreforfilter ;
2019-10-22 17:08:37 +02:00
2020-10-31 14:32:18 +01:00
print '<div class="div-table-responsive">' ;
2017-08-22 20:20:34 +02:00
2020-10-31 14:32:18 +01:00
print '<div id="tabs" class="gantt" style="width: 80vw;">' . " \n " ;
2014-06-14 14:20:58 +02:00
include_once DOL_DOCUMENT_ROOT . '/projet/ganttchart.inc.php' ;
2010-08-19 22:36:01 +02:00
print '</div>' . " \n " ;
2017-08-22 20:20:34 +02:00
print '</div>' ;
2020-05-21 15:05:19 +02:00
} else {
2010-08-19 22:36:01 +02:00
$langs -> load ( " admin " );
print $langs -> trans ( " AvailableOnlyIfJavascriptAndAjaxNotDisabled " );
}
2020-05-21 15:05:19 +02:00
} else {
2016-06-20 10:54:02 +02:00
print '<div class="opacitymedium">' . $langs -> trans ( " NoTasks " ) . '</div>' ;
2010-05-23 22:37:28 +02:00
}
2010-05-22 18:53:36 +02:00
2018-08-15 12:48:13 +02:00
// End of page
2011-08-27 16:24:16 +02:00
llxFooter ();
2012-02-15 23:08:20 +01:00
$db -> close ();