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 >
2012-12-30 15:11:07 +01:00
* Copyright ( C ) 2005 - 2012 Regis Houssin < regis . houssin @ capnetworks . com >
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
2011-08-01 01:19:04 +02:00
* along with this program . If not , see < http :// www . gnu . org / licenses />.
2010-05-22 18:53:36 +02:00
*/
/**
* \file htdocs / projet / ganttview . php
* \ingroup projet
2010-05-23 12:20:35 +02:00
* \brief Gantt diagramm of a project
2010-05-22 18:53:36 +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' ;
2012-08-22 23:11:24 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/class/html.formother.class.php' ;
2010-05-22 18:53:36 +02:00
2017-12-18 15:39:40 +01:00
$id = GETPOST ( 'id' , 'intcomma' );
2012-05-07 09:58:44 +02:00
$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
2015-10-01 16:50:18 +02:00
include DOL_DOCUMENT_ROOT . '/core/actions_fetchobject.inc.php' ; // Must be include, not include_once
2018-05-22 16:07:32 +02:00
if ( ! empty ( $conf -> global -> PROJECT_ALLOW_COMMENT_ON_PROJECT ) && method_exists ( $object , 'fetchComments' ) && empty ( $object -> comments )) $object -> fetchComments ();
2012-05-23 14:34:44 +02:00
2010-05-30 14:21:32 +02:00
// Security check
$socid = 0 ;
2017-01-12 15:23:30 +01:00
//if ($user->societe_id > 0) $socid = $user->societe_id; // For external user, no check is done on company because readability is managed by public status of project and assignement.
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
*/
2012-02-15 23:08:20 +01:00
$form = new Form ( $db );
$formother = new FormOther ( $db );
$userstatic = new User ( $db );
$companystatic = new Societe ( $db );
2017-10-18 19:13:44 +02:00
$contactstatic = new Contact ( $db );
2012-02-15 23:08:20 +01:00
$task = new Task ( $db );
2011-09-20 11:40:27 +02:00
$arrayofcss = array ( '/includes/jsgantt/jsgantt.css' );
2010-05-22 18:53:36 +02:00
2010-08-19 22:36:01 +02:00
if ( ! empty ( $conf -> use_javascript_ajax ))
{
$arrayofjs = array (
'/includes/jsgantt/jsgantt.js' ,
'/projet/jsgantt_language.js.php?lang=' . $langs -> defaultlang
);
}
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:'');
$title = $langs -> trans ( " Gantt " );
2017-12-18 19:04:57 +01:00
if ( ! empty ( $conf -> global -> MAIN_HTML_TITLE ) && preg_match ( '/projectnameonly/' , $conf -> global -> MAIN_HTML_TITLE ) && $object -> name ) $title = ( $object -> ref ? $object -> ref . ' ' . $object -> name . ' - ' : '' ) . $langs -> trans ( " Gantt " );
2010-05-22 18:53:36 +02:00
$help_url = " EN:Module_Projects|FR:Module_Projets|ES:Módulo_Proyectos " ;
2015-03-23 12:44:41 +01:00
llxHeader ( " " , $title , $help_url , '' , 0 , 0 , $arrayofjs , $arrayofcss );
2010-05-22 18:53:36 +02:00
2017-12-18 19:04:57 +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');
$userWrite = $object -> restrictedProjectArea ( $user , 'write' );
//$userDelete = $object->restrictedProjectArea($user,'delete');
//print "userAccess=".$userAccess." userWrite=".$userWrite." userDelete=".$userDelete;
2010-05-22 18:53:36 +02:00
2018-05-04 11:25:21 +02:00
$tab = 'tasks' ;
2010-05-22 18:53:36 +02:00
2012-02-15 23:08:20 +01:00
$head = project_prepare_head ( $object );
2017-04-05 14:48:24 +02:00
dol_fiche_head ( $head , $tab , $langs -> trans ( " Project " ), - 1 , ( $object -> public ? 'projectpub' : 'project' ));
2010-05-22 18:53:36 +02:00
2013-01-10 16:04:23 +01:00
$param = ( $mode == 'mine' ? '&mode=mine' : '' );
2010-05-22 18:53:36 +02:00
2017-07-29 01:59:26 +02:00
2010-05-22 18:53:36 +02:00
2016-10-17 20:10:53 +02:00
// Project card
2017-07-29 01:59:26 +02:00
2017-05-19 00:52:13 +02:00
$linkback = '<a href="' . DOL_URL_ROOT . '/projet/list.php?restore_lastsearch_values=1">' . $langs -> trans ( " BackToList " ) . '</a>' ;
2017-07-29 01:59:26 +02:00
2016-10-17 20:10:53 +02:00
$morehtmlref = '<div class="refidno">' ;
// Title
$morehtmlref .= $object -> title ;
// Thirdparty
if ( $object -> thirdparty -> id > 0 )
{
$morehtmlref .= '<br>' . $langs -> trans ( 'ThirdParty' ) . ' : ' . $object -> thirdparty -> getNomUrl ( 1 , 'project' );
}
$morehtmlref .= '</div>' ;
2017-07-29 01:59:26 +02:00
2012-02-15 23:08:20 +01:00
// Define a complementary filter for search of next/prev ref.
2013-01-10 16:04:23 +01:00
if ( ! $user -> rights -> projet -> all -> lire )
{
2016-10-17 20:10:53 +02:00
$objectsListId = $object -> getProjectsAuthorizedForUser ( $user , 0 , 0 );
$object -> next_prev_filter = " rowid in ( " . ( count ( $objectsListId ) ? join ( ',' , array_keys ( $objectsListId )) : '0' ) . " ) " ;
2013-01-10 16:04:23 +01:00
}
2017-07-29 01:59:26 +02:00
2016-10-17 20:10:53 +02:00
dol_banner_tab ( $object , 'ref' , $linkback , 1 , 'ref' , 'ref' , $morehtmlref );
2017-07-29 01:59:26 +02:00
2016-10-17 20:10:53 +02:00
print '<div class="fichecenter">' ;
print '<div class="fichehalfleft">' ;
print '<div class="underbanner clearboth"></div>' ;
2017-07-29 01:59:26 +02:00
2016-10-17 20:10:53 +02:00
print '<table class="border" width="100%">' ;
2017-07-29 01:59:26 +02:00
2012-02-15 23:08:20 +01:00
// Visibility
2016-10-17 20:10:53 +02:00
print '<tr><td class="titlefield">' . $langs -> trans ( " Visibility " ) . '</td><td>' ;
2012-02-15 23:08:20 +01:00
if ( $object -> public ) print $langs -> trans ( 'SharedProject' );
else print $langs -> trans ( 'PrivateProject' );
print '</td></tr>' ;
2017-07-29 01:59:26 +02:00
2016-10-18 12:16:12 +02:00
// Date start - end
print '<tr><td>' . $langs -> trans ( " DateStart " ) . ' - ' . $langs -> trans ( " DateEnd " ) . '</td><td>' ;
2018-02-15 02:02:32 +01:00
$start = dol_print_date ( $object -> date_start , 'day' );
2017-04-05 14:48:24 +02:00
print ( $start ? $start : '?' );
2018-02-15 02:02:32 +01:00
$end = dol_print_date ( $object -> date_end , 'day' );
2017-04-05 14:48:24 +02:00
print ' - ' ;
print ( $end ? $end : '?' );
if ( $object -> hasDelay ()) print img_warning ( " Late " );
2016-10-17 20:10:53 +02:00
print '</td></tr>' ;
2017-07-29 01:59:26 +02:00
2016-10-17 20:10:53 +02:00
// Budget
print '<tr><td>' . $langs -> trans ( " Budget " ) . '</td><td>' ;
if ( strcmp ( $object -> budget_amount , '' )) print price ( $object -> budget_amount , '' , $langs , 1 , 0 , 0 , $conf -> currency );
print '</td></tr>' ;
2017-07-29 01:59:26 +02:00
2016-10-17 20:10:53 +02:00
// Other attributes
$cols = 2 ;
include DOL_DOCUMENT_ROOT . '/core/tpl/extrafields_view.tpl.php' ;
2017-07-29 01:59:26 +02:00
2012-02-15 23:08:20 +01:00
print '</table>' ;
2017-07-29 01:59:26 +02:00
2016-10-17 20:10:53 +02:00
print '</div>' ;
print '<div class="fichehalfright">' ;
print '<div class="ficheaddleft">' ;
print '<div class="underbanner clearboth"></div>' ;
2017-07-29 01:59:26 +02:00
2016-10-17 20:10:53 +02:00
print '<table class="border" width="100%">' ;
2017-07-29 01:59:26 +02:00
2016-10-17 20:10:53 +02: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
2016-10-17 20:10:53 +02:00
// Categories
if ( $conf -> categorie -> enabled ) {
print '<tr><td valign="middle">' . $langs -> trans ( " Categories " ) . '</td><td>' ;
print $form -> showCategories ( $object -> id , 'project' , 1 );
print " </td></tr> " ;
}
2017-07-29 01:59:26 +02:00
2016-10-17 20:10:53 +02:00
print '</table>' ;
2017-07-29 01:59:26 +02:00
2016-10-17 20:10:53 +02:00
print '</div>' ;
print '</div>' ;
2012-02-15 23:08:20 +01:00
print '</div>' ;
2017-07-29 01:59:26 +02:00
2016-10-17 20:10:53 +02:00
print '<div class="clearboth"></div>' ;
2017-07-29 01:59:26 +02:00
2016-10-17 20:10:53 +02:00
dol_fiche_end ();
2010-05-22 18:53:36 +02:00
2018-05-04 11:25:21 +02:00
print '<br>' ;
}
2015-04-17 13:22:36 +02:00
2018-05-04 11:25:21 +02:00
// Link to create task
if ( $user -> rights -> projet -> all -> creer || $user -> rights -> projet -> creer )
2010-05-22 18:53:36 +02:00
{
2018-05-04 11:25:21 +02:00
if ( $object -> public || $userWrite > 0 )
2017-10-20 04:04:16 +02:00
{
2018-05-04 11:25:21 +02:00
$linktocreatetask = '<a class="butActionNew" href="' . $_SERVER [ 'PHP_SELF' ] . '?id=' . $object -> id . '&action=create' . $param . '&backtopage=' . urlencode ( $_SERVER [ 'PHP_SELF' ] . '?id=' . $object -> id ) . '">' . $langs -> trans ( 'AddTask' ) . '<span class="fa fa-plus-circle valignmiddle"></span></a>' ;
2017-10-20 04:04:16 +02:00
}
else
{
2018-05-04 11:25:21 +02:00
$linktocreatetask = '<a class="butActionNewRefused" href="#" title="' . $langs -> trans ( " NotOwnerOfProject " ) . '">' . $langs -> trans ( 'AddTask' ) . '<span class="fa fa-plus-circle valignmiddle"></span></a>' ;
2017-10-20 04:04:16 +02:00
}
2010-05-22 18:53:36 +02:00
}
else
{
2018-05-04 11:25:21 +02:00
$linktocreatetask = '<a class="butActionNewRefused" href="#" title="' . $langs -> trans ( " NotEnoughPermissions " ) . '">' . $langs -> trans ( 'AddTask' ) . '<span class="fa fa-plus-circle valignmiddle"></span></a>' ;
2010-05-22 18:53:36 +02:00
}
2018-05-04 17:55:29 +02:00
$linktolist = '<a href="' . DOL_URL_ROOT . '/projet/tasks.php?id=' . $object -> id . '">' . $langs -> trans ( " GoToListOfTasks " ) . '<span class="paddingleft fa fa-list-ul valignmiddle"></span></a>' ;
2018-05-04 11:25:21 +02:00
//print_barre_liste($title, 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, $linktotasks, $num, $totalnboflines, 'title_generic.png', 0, '', '', 0, 1);
print load_fiche_titre ( $title , $linktolist . ' ' . $linktocreatetask , 'title_generic.png' );
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).
2017-12-18 19:04:57 +01:00
$tasksarray = $task -> getTasksArray ( 0 , 0 , ( $object -> id ? $object -> id : $id ), $socid , 0 );
2010-05-22 18:53:36 +02:00
// We load also tasks limited to a particular user
2012-02-15 23:08:20 +01:00
//$tasksrole=($_REQUEST["mode"]=='mine' ? $task->getUserRolesForProjectsOrTasks(0,$user,$object->id,0) : '');
2010-05-22 18:53:36 +02:00
//var_dump($tasksarray);
//var_dump($tasksrole);
2011-09-17 21:49:50 +02:00
if ( count ( $tasksarray ) > 0 )
2010-05-22 18:53:36 +02:00
{
2010-05-23 22:37:28 +02:00
// Show Gant diagram from $taskarray using JSGantt
2014-06-14 14:20:58 +02:00
$dateformat = $langs -> trans ( " FormatDateShortJQuery " ); // Used by include ganttchart.inc.php later
2015-02-07 03:11:35 +01:00
$datehourformat = $langs -> trans ( " FormatDateShortJQuery " ) . ' ' . $langs -> trans ( " FormatHourShortJQuery " ); // Used by include ganttchart.inc.php later
2010-05-23 22:37:28 +02:00
$array_contacts = array ();
$tasks = array ();
2017-10-20 04:04:16 +02:00
$task_dependencies = array ();
2010-06-26 02:23:18 +02:00
$taskcursor = 0 ;
2018-01-04 13:52:37 +01:00
foreach ( $tasksarray as $key => $val ) // Task array are sorted by "project, position, dateo"
2010-05-23 22:37:28 +02:00
{
2018-01-04 13:52:37 +01:00
$task -> fetch ( $val -> id , '' );
$idparent = ( $val -> fk_parent ? $val -> fk_parent : '-' . $val -> fk_project ); // If start with -, id is a project id
2017-10-18 19:13:44 +02:00
2010-06-26 02:23:18 +02:00
$tasks [ $taskcursor ][ 'task_id' ] = $val -> id ;
2018-01-04 13:52:37 +01:00
$tasks [ $taskcursor ][ 'task_alternate_id' ] = ( $taskcursor + 1 ); // An id that has same order than position (requird by ganttchart)
2017-10-20 04:04:16 +02:00
$tasks [ $taskcursor ][ 'task_project_id' ] = $val -> fk_project ;
2018-01-04 13:52:37 +01:00
$tasks [ $taskcursor ][ 'task_parent' ] = $idparent ;
$tasks [ $taskcursor ][ 'task_is_group' ] = 0 ;
2016-07-26 01:59:27 +02:00
$tasks [ $taskcursor ][ 'task_css' ] = 'gtaskblue' ;
2018-01-04 13:52:37 +01:00
$tasks [ $taskcursor ][ 'task_position' ] = $val -> rang ;
2018-01-04 19:54:30 +01:00
$tasks [ $taskcursor ][ 'task_planned_workload' ] = $val -> planned_workload ;
2016-07-26 01:59:27 +02:00
2017-10-20 04:04:16 +02:00
if ( $val -> fk_parent != 0 && $task -> hasChildren () > 0 ){
2016-07-26 01:59:27 +02:00
$tasks [ $taskcursor ][ 'task_is_group' ] = 1 ;
2017-10-20 04:04:16 +02:00
$tasks [ $taskcursor ][ 'task_css' ] = 'ggroupblack' ;
//$tasks[$taskcursor]['task_css'] = 'gtaskblue';
2016-07-26 01:59:27 +02:00
}
2017-10-20 04:04:16 +02:00
elseif ( $task -> hasChildren () > 0 ) {
2016-07-26 01:59:27 +02:00
$tasks [ $taskcursor ][ 'task_is_group' ] = 1 ;
2017-10-20 04:04:16 +02:00
//$tasks[$taskcursor]['task_is_group'] = 0;
$tasks [ $taskcursor ][ 'task_css' ] = 'ggroupblack' ;
//$tasks[$taskcursor]['task_css'] = 'gtaskblue';
2016-07-26 01:59:27 +02:00
}
$tasks [ $taskcursor ][ 'task_milestone' ] = '0' ;
2010-06-26 02:23:18 +02:00
$tasks [ $taskcursor ][ 'task_percent_complete' ] = $val -> progress ;
//$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";
2017-04-05 14:48:24 +02:00
$tasks [ $taskcursor ][ 'task_name' ] = $val -> ref . ' - ' . $val -> label ;
2010-06-26 02:23:18 +02:00
$tasks [ $taskcursor ][ 'task_start_date' ] = $val -> date_start ;
$tasks [ $taskcursor ][ 'task_end_date' ] = $val -> date_end ;
$tasks [ $taskcursor ][ 'task_color' ] = 'b4d1ea' ;
2018-01-04 19:54:30 +01:00
2010-05-24 00:07:24 +02:00
$idofusers = $task -> getListContactId ( 'internal' );
2017-10-18 19:13:44 +02:00
$idofcontacts = $task -> getListContactId ( 'external' );
2016-07-26 01:59:27 +02:00
$s = '' ;
2011-09-17 21:49:50 +02:00
if ( count ( $idofusers ) > 0 )
2010-05-24 00:07:24 +02:00
{
$s .= $langs -> trans ( " Internals " ) . ': ' ;
$i = 0 ;
2013-09-05 17:15:06 +02:00
foreach ( $idofusers as $valid )
2010-05-24 00:07:24 +02:00
{
$userstatic -> fetch ( $valid );
2016-07-26 01:59:27 +02:00
if ( $i ) $s .= ', ' ;
2010-05-24 00:07:24 +02:00
$s .= $userstatic -> login ;
$i ++ ;
}
}
2017-10-18 19:13:44 +02:00
//if (count($idofusers)>0 && (count($idofcontacts)>0)) $s.=' - ';
if ( count ( $idofcontacts ) > 0 )
2010-05-24 00:07:24 +02:00
{
2010-07-11 15:21:28 +02:00
if ( $s ) $s .= ' - ' ;
2010-05-24 00:07:24 +02:00
$s .= $langs -> trans ( " Externals " ) . ': ' ;
$i = 0 ;
2017-10-18 19:13:44 +02:00
$contactidfound = array ();
foreach ( $idofcontacts as $valid )
2010-05-24 00:07:24 +02:00
{
2017-10-18 19:13:44 +02:00
if ( empty ( $contactidfound [ $valid ]))
{
$res = $contactstatic -> fetch ( $valid );
if ( $res > 0 )
{
if ( $i ) $s .= ', ' ;
$s .= $contactstatic -> getFullName ( $langs );
$contactidfound [ $valid ] = 1 ;
$i ++ ;
}
}
2010-05-24 00:07:24 +02:00
}
}
2016-07-26 01:59:27 +02:00
//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>';
/* For JSGanttImproved */
//if ($s) $tasks[$taskcursor]['task_resources']=implode(',',$idofusers);
$tasks [ $taskcursor ][ 'task_resources' ] = $s ;
2010-06-26 02:23:18 +02:00
//print "xxx".$val->id.$tasks[$taskcursor]['task_resources'];
2016-07-26 01:59:27 +02: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
2018-01-04 13:52:37 +01:00
// Search parent to set task_parent_alternate_id (requird by ganttchart)
foreach ( $tasks as $tmpkey => $tmptask )
{
foreach ( $tasks as $tmptask2 )
{
if ( $tmptask2 [ 'task_id' ] == $tmptask [ 'task_parent' ])
{
$tasks [ $tmpkey ][ 'task_parent_alternate_id' ] = $tmptask2 [ 'task_alternate_id' ];
break ;
}
}
if ( empty ( $tasks [ $tmpkey ][ 'task_parent_alternate_id' ])) $tasks [ $tmpkey ][ 'task_parent_alternate_id' ] = $tasks [ $tmpkey ][ 'task_parent' ];
}
2010-05-23 22:37:28 +02:00
print " \n " ;
2010-08-19 22:36:01 +02:00
2016-07-26 01:59:27 +02:00
if ( ! empty ( $conf -> use_javascript_ajax ))
2010-08-19 22:36:01 +02:00
{
2012-05-07 18:00:53 +02:00
//var_dump($_SESSION);
2017-10-20 04:04:16 +02:00
// How the date for data are formated (format used bu jsgantt)
$dateformatinput = 'yyyy-mm-dd' ;
// How the date for data are formated (format used by dol_print_date)
$dateformatinput2 = 'standard' ;
//var_dump($dateformatinput);
2016-07-26 14:41:15 +02:00
//var_dump($dateformatinput2);
2017-08-22 20:20:34 +02:00
print '<div class="div-table-responsive">' ;
2017-10-18 21:24:17 +02: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>' ;
2010-08-19 22:36:01 +02:00
}
else
{
$langs -> load ( " admin " );
print $langs -> trans ( " AvailableOnlyIfJavascriptAndAjaxNotDisabled " );
}
2010-05-23 22:37:28 +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
2011-08-27 16:24:16 +02:00
llxFooter ();
2012-02-15 23:08:20 +01:00
$db -> close ();