[ Index ]

Source Code Reference for V1.00

title

Body

[close]

/modules/reports/reports/ -> tasksperuser.php (source)

   1  <?php /* $Id: tasksperuser.php 136 2008-04-04 14:24:17Z pedroix $ $URL: https://web2project.svn.sourceforge.net/svnroot/web2project/trunk/modules/reports/reports/tasksperuser.php $ */
   2  if (!defined('W2P_BASE_DIR')) {
   3      die('You should not access this file directly.');
   4  }
   5  global $AppUI, $cal_sdf;
   6  $AppUI->loadCalendarJS();
   7  
   8  $do_report = w2PgetParam($_POST, 'do_report', 0);
   9  $log_start_date = w2PgetParam($_POST, 'log_start_date', 0);
  10  $log_end_date = w2PgetParam($_POST, 'log_end_date', 0);
  11  $log_all = w2PgetParam($_POST['log_all'], 0);
  12  $use_period = w2PgetParam($_POST, 'use_period', 0);
  13  $display_week_hours = w2PgetParam($_POST, 'display_week_hours', 0);
  14  $max_levels = w2PgetParam($_POST, 'max_levels', 'max');
  15  $log_userfilter = w2PgetParam($_POST, 'log_userfilter', '');
  16  $log_open = w2PgetParam($_POST, 'log_open', 0);
  17  $pdf_output = w2PgetParam($_POST, 'pdf_output', 0);
  18  
  19  $table_header = '';
  20  $table_rows = '';
  21  
  22  // create Date objects from the datetime fields

  23  $start_date = intval($log_start_date) ? new CDate($log_start_date) : new CDate();
  24  $end_date = intval($log_end_date) ? new CDate($log_end_date) : new CDate();
  25  
  26  if (!$log_start_date) {
  27      $start_date->subtractSpan(new Date_Span('14,0,0,0'));
  28  }
  29  $end_date->setTime(23, 59, 59);
  30  ?>
  31  
  32  <script language="javascript">
  33  function setDate( frm_name, f_date ) {
  34      fld_date = eval( 'document.' + frm_name + '.' + f_date );
  35      fld_real_date = eval( 'document.' + frm_name + '.' + 'log_' + f_date );
  36      if (fld_date.value.length>0) {
  37        if ((parseDate(fld_date.value))==null) {
  38              alert('The Date/Time you typed does not match your prefered format, please retype.');
  39              fld_real_date.value = '';
  40              fld_date.style.backgroundColor = 'red';
  41          } else {
  42              fld_real_date.value = formatDate(parseDate(fld_date.value), 'yyyyMMdd');
  43              fld_date.value = formatDate(parseDate(fld_date.value), '<?php echo $cal_sdf ?>');
  44              fld_date.style.backgroundColor = '';
  45            }
  46      } else {
  47            fld_real_date.value = '';
  48      }
  49  }
  50  </script>
  51  
  52  <?php
  53  if (function_exists('styleRenderBoxTop')) {
  54      echo styleRenderBoxTop();
  55  }
  56  ?>
  57  <form name="editFrm" action="index.php?m=reports" method="post">
  58  <input type="hidden" name="project_id" value="<?php echo $project_id; ?>" />
  59  <input type="hidden" name="report_type" value="<?php echo $report_type; ?>" />
  60  <table cellspacing="0" cellpadding="4" border="0" width="100%" class="std">
  61  <tr>
  62      <td align="right" nowrap="nowrap"><?php echo $AppUI->_('For period'); ?>:</td>
  63      <td nowrap="nowrap">
  64          <input type="hidden" name="log_start_date" id="log_start_date" value="<?php echo $start_date ? $start_date->format(FMT_TIMESTAMP_DATE) : ''; ?>" />
  65          <input type="text" name="start_date" id="start_date" onchange="setDate('editFrm', 'start_date');" value="<?php echo $start_date ? $start_date->format($df) : ''; ?>" class="text" />
  66          <a href="javascript: void(0);" onclick="return showCalendar('start_date', '<?php echo $df ?>', 'editFrm', null, true)">
  67              <img src="<?php echo w2PfindImage('calendar.gif'); ?>" width="24" height="12" alt="<?php echo $AppUI->_('Calendar'); ?>" border="0" />
  68          </a>
  69      </td>
  70      <td nowrap="nowrap">
  71          <select name="log_userfilter" class="text" style="width: 200px">
  72    
  73                  <?php
  74  if ($log_userfilter == 0)
  75      echo '<option value="0" selected="selected">' . $AppUI->_('All users');
  76  else
  77      echo '<option value="0">All users';
  78  
  79  if (($log_userfilter_users = w2PgetUsersList())) {
  80      foreach ($log_userfilter_users as $row) {
  81          $selected = '';
  82          if ($log_userfilter == $row['user_id']) {
  83              $selected = ' selected="selected"';
  84          }
  85          echo '<option value="' . $row['user_id'] . '"' . $selected . '>' . $row['contact_first_name'] . ' ' . $row['contact_last_name'];
  86      }
  87  }
  88  
  89  ?>
  90      
  91              </select>
  92  
  93      </td>
  94  
  95      <td nowrap="nowrap" rowspan="2">
  96          <table>
  97          <tr><td>
  98              <input type="checkbox" name="use_period" id="use_period" <?php if ($use_period)
  99      echo 'checked="checked"' ?> />
 100              <label for="use_period"><?php echo $AppUI->_('Use the period'); ?></label>
 101          </td></tr>
 102          <tr><td>
 103              <input type="checkbox" name="display_week_hours" id="display_week_hours" <?php if ($display_week_hours)
 104      echo 'checked="checked"' ?> />
 105              <label for="display_week_hours"><?php echo $AppUI->_('Display allocated hours/week'); ?></label>
 106          </td></tr> 
 107          </table>
 108      </td> 
 109      
 110      <td align="right" width="50%" nowrap="nowrap">
 111          <input class="button" type="submit" name="do_report" value="<?php echo $AppUI->_('submit'); ?>" />
 112      </td>
 113  </tr>
 114  <tr>
 115      <td align="right" nowrap="nowrap"><?php echo $AppUI->_('to:'); ?></td>
 116      <td>
 117          <input type="hidden" name="log_end_date" id="log_end_date" value="<?php echo $end_date ? $end_date->format(FMT_TIMESTAMP_DATE) : ''; ?>" />
 118          <input type="text" name="end_date" id="end_date" onchange="setDate('editFrm', 'end_date');" value="<?php echo $end_date ? $end_date->format($df) : ''; ?>" class="text" />
 119          <a href="javascript: void(0);" onclick="return showCalendar('end_date', '<?php echo $df ?>', 'editFrm', null, true)">
 120              <img src="<?php echo w2PfindImage('calendar.gif'); ?>" width="24" height="12" alt="<?php echo $AppUI->_('Calendar'); ?>" border="0" />
 121          </a>
 122      </td>
 123      <td>
 124          <?php echo $AppUI->_('Levels to display'); ?>
 125          <input type="text" name="max_levels" size="10" maxlength="3" <?php $max_levels ?> />
 126      </td>
 127  
 128  </tr>
 129  
 130  </table>
 131  </form>
 132  <?php
 133  if ($do_report) {
 134  
 135      if (function_exists('styleRenderBoxBottom')) {
 136          echo styleRenderBoxBottom();
 137      }
 138      echo '<br />';
 139      if (function_exists('styleRenderBoxTop')) {
 140          echo styleRenderBoxTop();
 141      }
 142      echo '<table cellspacing="0" cellpadding="4" border="0" width="100%" class="std">
 143      <tr>
 144          <td align="center">';
 145  
 146      // Let's figure out which users we have

 147  
 148      $user_list = w2PgetUsersHashList();
 149      if ($log_userfilter != 0) {
 150          $user_list = array($log_userfilter => $user_list[$log_userfilter]);
 151      }
 152  
 153      $ss = "'" . $start_date->format(FMT_DATETIME_MYSQL) . "'";
 154      $se = "'" . $end_date->format(FMT_DATETIME_MYSQL) . "'";
 155  
 156      $and = false;
 157      $where = false;
 158  
 159      $q = new DBQuery;
 160      $q->addTable('tasks', 't');
 161      $q->addQuery('t.*');
 162      $q->addJoin('projects', '', 'projects.project_id = task_project', 'inner');
 163      $q->addJoin('project_departments', '', 'project_departments.project_id = projects.project_id');
 164      $q->addJoin('departments', '', 'department_id = dept_id');
 165      $q->addWhere('project_active = 1');
 166      if (($template_status = w2PgetConfig('template_projects_status_id')) != '') {
 167          $q->addWhere('project_status <> ' . (int)$template_status);
 168      }
 169  
 170      if ($use_period) {
 171          $q->addWhere('( (task_start_date >= ' . $ss . ' AND task_start_date <= ' . $se . ') OR ' . '(task_end_date <= ' . $se . ' AND task_end_date >= ' . $ss . ') )');
 172      }
 173  
 174      if ($project_id != 0) {
 175          $q->addWhere('task_project=' . $project_id);
 176      }
 177  
 178      $proj = &new CProject;
 179      $obj = &new CTask;
 180      $allowedProjects = $proj->getAllowedSQL($AppUI->user_id, 'task_project');
 181      $allowedTasks = $obj->getAllowedSQL($AppUI->user_id);
 182  
 183      if (count($allowedProjects)) {
 184          $q->addWhere(implode(' AND ', $allowedProjects));
 185      }
 186  
 187      if (count($allowedTasks)) {
 188          $q->addWhere(implode(' AND ', $allowedTasks));
 189      }
 190  
 191      $q->addOrder('task_end_date');
 192  
 193      $task_list_hash = $q->loadHashList('task_id');
 194      $q->clear();
 195      $task_list = array();
 196      $task_assigned_users = array();
 197      $i = 0;
 198      foreach ($task_list_hash as $task_id => $task_data) {
 199          $task = new CTask();
 200          $task->bind($task_data);
 201          $task_list[$i] = $task;
 202          $task_assigned_users[$i] = $task->getAssignedUsers();
 203          $i += 1;
 204      }
 205      $Ntasks = $i;
 206  
 207      //for($i=0;$i<$Ntasks;$i++) {

 208      //print $task_list[$i]->task_name."<br>\n";

 209      //}

 210  
 211      $user_usage = array();
 212      $task_dates = array();
 213  
 214      $actual_date = $start_date;
 215      $days_header = ""; // we will save days title here

 216  
 217      if (strtolower($max_levels) == 'max') {
 218          $max_levels = -1;
 219      } elseif ($max_levels == '') {
 220          $max_levels = -1;
 221      } else {
 222          $max_levels = atoi($max_levels);
 223      }
 224      if ($max_levels == 0) {
 225          $max_levels = 1;
 226      }
 227      if ($max_levels < 0) {
 228          $max_levels = -1;
 229      }
 230  
 231      if (count($task_list) == 0) {
 232          echo '<p>' . $AppUI->_('No data available') . '</p>';
 233      } else {
 234  
 235          $sss = $ss;
 236          $sse = $se;
 237          if (!$use_period) {
 238              $sss = -1;
 239              $sse = -1;
 240          }
 241          if ($display_week_hours and !$use_period) {
 242              foreach ($task_list as $t) {
 243                  if ($sss == -1) {
 244                      $sss = $t->task_start_date;
 245                      $sse = $t->task_end_date;
 246                  } else {
 247                      if ($t->task_start_date < $sss) {
 248                          $sss = $t->task_start_date;
 249                      }
 250                      if ($t->task_end_date > $sse) {
 251                          $sse = $t->task_end_date;
 252                      }
 253                  }
 254              }
 255          }
 256  
 257          $table_header = '
 258              <tr>
 259                  <td nowrap="nowrap" bgcolor="#A0A0A0">
 260                  <font color="black"><b>' . $AppUI->_('Task') . '</b></font> </td>' . ($project_id == 0 ? '<td nowrap="nowrap" bgcolor="#A0A0A0"><font color="black"><b>' . $AppUI->_('Project') . '</b></font></td>' : '') . '
 261                  <td nowrap="nowrap" bgcolor="#A0A0A0"><font color="black"><b>' . $AppUI->_('Start Date') . '</b></font></td>
 262                  <td nowrap="nowrap" bgcolor="#A0A0A0"><font color="black"><b>' . $AppUI->_('End Date') . '</b></font></td>' . weekDates($display_week_hours, $sss, $sse) . '
 263              </tr>';
 264          $table_rows = '';
 265  
 266          foreach ($user_list as $user_id => $user_data) {
 267  
 268              $tmpuser = "<tr><td align='left' nowrap='nowrap' bgcolor='#D0D0D0'><font color='black'><B>" . $user_data["contact_first_name"] . ' ' . $user_data['contact_last_name'] . '</b></font></td>';
 269              for ($w = 0, $w_cmp = (1 + ($project_id == 0 ? 1 : 0) + weekCells($display_week_hours, $sss, $sse)); $w <= $w_cmp; $w++) {
 270                  $tmpuser .= '<td bgcolor="#D0D0D0">&nbsp;</td>';
 271              }
 272              $tmpuser .= '</tr>';
 273  
 274              $tmptasks = '';
 275              $actual_date = $start_date;
 276              foreach ($task_list as $task) {
 277                  if (!isChildTask($task)) {
 278                      if (isMemberOfTask($task_list, $task_assigned_users, $Ntasks, $user_id, $task)) {
 279                          $tmptasks .= displayTask($task_list, $task, 0, $display_week_hours, $sss, $sse, !$project_id);
 280                          // Get children

 281                          $tmptasks .= doChildren($task_list, $task_assigned_users, $Ntasks, $task->task_id, $user_id, 1, $max_levels, $display_week_hours, $sss, $sse, !$project_id);
 282                      }
 283                  }
 284              }
 285              if ($tmptasks != '') {
 286                  $table_rows .= $tmpuser;
 287                  $table_rows .= $tmptasks;
 288              }
 289          }
 290      }
 291      echo '
 292      <table class="std">
 293          ' . $table_header . $table_rows . '
 294      </table>
 295  ';
 296      echo '</td>
 297  </tr>
 298  </table>';
 299  }
 300  
 301  function doChildren($list, $Lusers, $N, $id, $uid, $level, $maxlevels, $display_week_hours, $ss, $se, $log_all_projects = false) {
 302      $tmp = "";
 303      if ($maxlevels == -1 || $level < $maxlevels) {
 304          for ($c = 0; $c < $N; $c++) {
 305              $task = $list[$c];
 306              if (($task->task_parent == $id) and isChildTask($task)) {
 307                  // we have a child, do we have the user as a member?

 308                  if (isMemberOfTask($list, $Lusers, $N, $uid, $task)) {
 309                      $tmp .= displayTask($list, $task, $level, $display_week_hours, $ss, $se, $log_all_projects);
 310                      $tmp .= doChildren($list, $Lusers, $N, $task->task_id, $uid, $level + 1, $maxlevels, $display_week_hours, $ss, $se, $log_all_projects);
 311                  }
 312              }
 313          }
 314      }
 315      return $tmp;
 316  }
 317  
 318  function isMemberOfTask($list, $Lusers, $N, $user_id, $task) {
 319  
 320      for ($i = 0; $i < $N && $list[$i]->task_id != $task->task_id; $i++)
 321          ;
 322      $users = $Lusers[$i];
 323  
 324      //$users=$Lusers[$task->getAssignedUsers();

 325      foreach ($users as $task_user_id => $user_data) {
 326          if ($task_user_id == $user_id) {
 327              return true;
 328          }
 329      }
 330  
 331      // check child tasks if any

 332  
 333      for ($c = 0; $c < $N; $c++) {
 334          $ntask = $list[$c];
 335          if (($ntask->task_parent == $task->task_id) and isChildTask($ntask)) {
 336              // we have a child task

 337              if (isMemberOfTask($list, $Lusers, $N, $user_id, $ntask)) {
 338                  return true;
 339              }
 340          }
 341      }
 342      return false;
 343  }
 344  
 345  function displayTask($list, $task, $level, $display_week_hours, $fromPeriod, $toPeriod, $log_all_projects = false) {
 346      $tmp = '';
 347      $tmp .= '<tr><td align="left" nowrap="nowrap">&#160&#160&#160';
 348      for ($i = 0; $i < $level; $i++) {
 349          $tmp .= '&#160&#160&#160';
 350      }
 351      if ($level == 0) {
 352          $tmp .= '<b>';
 353      } elseif ($level == 1) {
 354          $tmp .= '<i>';
 355      }
 356      $tmp .= $task->task_name;
 357      if ($level == 0) {
 358          $tmp .= '</b>';
 359      } elseif ($level == 1) {
 360          $tmp .= '</i>';
 361      }
 362      $tmp .= '&#160&#160&#160</td>';
 363      if ($log_all_projects) {
 364          //Show project name when we are logging all projects

 365          $project = $task->getProject();
 366          $tmp .= '<td nowrap="nowrap">';
 367          if (!isChildTask($task)) {
 368              //However only show the name on parent tasks and not the children to make it a bit cleaner

 369              $tmp .= $project['project_name'];
 370          }
 371          $tmp .= '</td>';
 372      }
 373      $tmp .= '<td nowrap="nowrap">';
 374      $dt = new CDate($task->task_start_date);
 375      $tmp .= $dt->format('%d-%m-%Y');
 376      $tmp .= '&#160&#160&#160</td>';
 377      $tmp .= '<td nowrap="nowrap">';
 378      $dt = new CDate($task->task_end_date);
 379      $tmp .= $dt->format('%d-%m-%Y');
 380      $tmp .= '</td>';
 381      if ($display_week_hours) {
 382          $tmp .= displayWeeks($list, $task, $level, $fromPeriod, $toPeriod);
 383      }
 384      $tmp .= "</tr>\n";
 385      return $tmp;
 386  }
 387  
 388  function isChildTask($task) {
 389      return $task->task_id != $task->task_parent;
 390  }
 391  
 392  function atoi($a) {
 393      return $a + 0;
 394  }
 395  
 396  function weekDates($display_allocated_hours, $fromPeriod, $toPeriod) {
 397      if ($fromPeriod == -1) {
 398          return '';
 399      }
 400      if (!$display_allocated_hours) {
 401          return '';
 402      }
 403  
 404      $s = new CDate($fromPeriod);
 405      $e = new CDate($toPeriod);
 406      $sw = getBeginWeek($s);
 407      $ew = getEndWeek($e); //intval($e->Format('%U'));

 408  
 409      $row = '';
 410      for ($i = $sw;