[ Index ]

Source Code Reference for V1.00

title

Body

[close]

/modules/tasks/ -> do_task_aed.php (source)

   1  <?php /* $Id: do_task_aed.php 156 2008-04-11 15:47:40Z pedroix $ $URL: https://web2project.svn.sourceforge.net/svnroot/web2project/trunk/modules/tasks/do_task_aed.php $ */
   2  if (!defined('W2P_BASE_DIR')) {
   3      die('You should not access this file directly.');
   4  }
   5  
   6  function setItem($item_name, $defval = null) {
   7      if (isset($_POST[$item_name])) {
   8          return $_POST[$item_name];
   9      }
  10      return $defval;
  11  }
  12  $adjustStartDate = setItem('set_task_start_date');
  13  $del = isset($_POST['del']) ? $_POST['del'] : 0;
  14  $task_id = setItem('task_id', 0);
  15  $hassign = setItem('hassign');
  16  $hperc_assign = setItem('hperc_assign');
  17  $hdependencies = setItem('hdependencies');
  18  $notify = setItem('task_notify', 0);
  19  $comment = setItem('email_comment', '');
  20  $sub_form = isset($_POST['sub_form']) ? $_POST['sub_form'] : 0;
  21  
  22  $isNotNew = $_POST['task_id'];
  23  $perms = &$AppUI->acl();
  24  if ($del) {
  25      if (!$perms->checkModuleItem('tasks', 'delete', $task_id)) {
  26          $AppUI->redirect('m=public&a=access_denied');
  27      }
  28  } elseif ($isNotNew) {
  29      if (!$perms->checkModuleItem('tasks', 'edit', $task_id)) {
  30          $AppUI->redirect('m=public&a=access_denied');
  31      }
  32  } else {
  33      if (!$perms->checkModule('tasks', 'add')) {
  34          $AppUI->redirect('m=public&a=access_denied');
  35      }
  36  }
  37  
  38  if ($sub_form) {
  39      // in add-edit, so set it to what it should be
  40      $AppUI->setState('TaskAeTabIdx', $_POST['newTab']);
  41      if (isset($_POST['subform_processor'])) {
  42          if (isset($_POST['subform_module'])) {
  43              $mod = $AppUI->checkFileName($_POST['subform_module']);
  44          } else {
  45              $mod = 'tasks';
  46          }
  47          $proc = $AppUI->checkFileName($_POST['subform_processor']);
  48          include W2P_BASE_DIR . '/modules/' . $mod . '/' . $proc . '.php';
  49      }
  50  } else {
  51      // Include any files for handling module-specific requirements
  52      foreach (findTabModules('tasks', 'addedit') as $mod) {
  53          $fname = W2P_BASE_DIR . '/modules/' . $mod . '/tasks_dosql.addedit.php';
  54          //dprint(__file__, __line__, 3, 'checking for ' . $fname);
  55          if (file_exists($fname)) {
  56              require_once $fname;
  57          }
  58      }
  59  
  60      $obj = new CTask();
  61  
  62      // If we have an array of pre_save functions, perform them in turn.
  63      if (isset($pre_save)) {
  64          foreach ($pre_save as $pre_save_function) {
  65              $pre_save_function();
  66          }
  67      }
  68  
  69      // Find the task if we are set
  70      $task_end_date = null;
  71      if ($task_id) {
  72          $obj->load($task_id);
  73          $task_end_date = new CDate($obj->task_end_date);
  74      }
  75  
  76      if (isset($_POST)) {
  77          $obj->bind($_POST);
  78      }
  79  
  80      if (!$obj->task_owner)
  81          $obj->task_owner = $AppUI->user_id;
  82  
  83      if (!$obj->bind($_POST)) {
  84          $AppUI->setMsg($obj->getError(), UI_MSG_ERROR);
  85          $AppUI->redirect();
  86      }
  87  
  88      // Check to see if the task_project has changed
  89      if (isset($_POST['new_task_project']) && $_POST['new_task_project'] && ($obj->task_project != $_POST['new_task_project'])) {
  90          $obj->task_project = $_POST['new_task_project'];
  91          $obj->task_parent = $obj->task_id;
  92      }
  93  
  94      // Map task_dynamic checkboxes to task_dynamic values for task dependencies.
  95      if ($obj->task_dynamic != 1) {
  96          $task_dynamic_delay = setItem('task_dynamic_nodelay', '0');
  97          if (in_array($obj->task_dynamic, $tracking_dynamics)) {
  98              $obj->task_dynamic = $task_dynamic_delay ? 21 : 31;
  99          } else {
 100              $obj->task_dynamic = $task_dynamic_delay ? 11 : 0;
 101          }
 102      }
 103  
 104      // Let's check if task_dynamic is unchecked
 105      if (!array_key_exists('task_dynamic', $_POST)) {
 106          $obj->task_dynamic = false;
 107      }
 108  
 109      // Make sure task milestone is set or reset as appropriate
 110      if (!isset($_POST['task_milestone'])) {
 111          $obj->task_milestone = false;
 112      }
 113  
 114      //format hperc_assign user_id=percentage_assignment;user_id=percentage_assignment;user_id=percentage_assignment;
 115      $tmp_ar = explode(';', $hperc_assign);
 116      $hperc_assign_ar = array();
 117      for ($i = 0, $i_cmp = sizeof($tmp_ar); $i < $i_cmp; $i++) {
 118          $tmp = explode('=', $tmp_ar[$i]);
 119          if (count($tmp) > 1) {
 120              $hperc_assign_ar[$tmp[0]] = $tmp[1];
 121          } else {
 122              $hperc_assign_ar[$tmp[0]] = 100;
 123          }
 124      }
 125  
 126      // let's check if there are some assigned departments to task
 127      $obj->task_departments = implode(',', setItem('dept_ids', array()));
 128  
 129      // convert dates to SQL format first
 130      if ($obj->task_start_date) {
 131          $date = new CDate($obj->task_start_date);
 132          $obj->task_start_date = $date->format(FMT_DATETIME_MYSQL);
 133      }
 134      $end_date = null;
 135      if ($obj->task_end_date) {
 136          if (strpos($obj->task_end_date, '2400') !== false) {
 137              $obj->task_end_date = str_replace('2400', '2359', $obj->task_end_date);
 138          }
 139          $end_date = new CDate($obj->task_end_date);
 140          $obj->task_end_date = $end_date->format(FMT_DATETIME_MYSQL);
 141      }
 142  
 143      require_once ($AppUI->getSystemClass('CustomFields'));
 144  
 145      // prepare (and translate) the module name ready for the suffix
 146      if ($del) {
 147          if (($msg = $obj->delete())) {
 148              $AppUI->setMsg($msg, UI_MSG_ERROR);
 149              $AppUI->redirect();
 150          } else {
 151              $AppUI->setMsg('Task deleted');
 152              $AppUI->redirect('', -1);
 153          }
 154      } else {
 155          if (($msg = $obj->store())) {
 156              $AppUI->setMsg($msg, UI_MSG_ERROR);
 157              $AppUI->redirect(); // Store failed don't continue?
 158          } else {
 159              $custom_fields = new CustomFields($m, 'addedit', $obj->task_id, 'edit');
 160              $custom_fields->bind($_POST);
 161              $sql = $custom_fields->store($obj->task_id); // Store Custom Fields
 162  
 163              // Now add any task reminders
 164              // If there wasn't a task, but there is one now, and
 165              // that task date is set, we need to set a reminder.
 166              if (empty($task_end_date) || (!empty($end_date) && $task_end_date->dateDiff($end_date))) {
 167                  $obj->addReminder();
 168              }
 169              $AppUI->setMsg($task_id ? 'Task updated' : 'Task added', UI_MSG_OK);
 170          }
 171  
 172          if (isset($hassign)) {
 173              $obj->updateAssigned($hassign, $hperc_assign_ar);
 174          }
 175  
 176          if (isset($hdependencies)) { // && !empty($hdependencies)) {
 177              // there are dependencies set!
 178  
 179              // backup initial start and end dates
 180              $tsd = new CDate($obj->task_start_date);
 181              $ted = new CDate($obj->task_end_date);
 182  
 183              // updating the table recording the
 184              // dependency relations with this task
 185              $obj->updateDependencies($hdependencies);
 186  
 187              // we will reset the task's start date based upon dependencies
 188              // and shift the end date appropriately
 189              if ($adjustStartDate && !is_null($hdependencies)) {
 190  
 191                  // load already stored task data for this task
 192                  $tempTask = new CTask();
 193                  $tempTask->load($obj->task_id);
 194  
 195                  // shift new start date to the last dependency end date
 196                  $nsd = new CDate($tempTask->get_deps_max_end_date($tempTask));
 197  
 198                  // prefer Wed 8:00 over Tue 16:00 as start date
 199                  $nsd = $nsd->next_working_day();
 200  
 201                  // prepare the creation of the end date
 202                  $ned = new CDate();
 203                  $ned->copy($nsd);
 204  
 205                  if (empty($obj->task_start_date)) {
 206                      // appropriately calculated end date via start+duration
 207                      $ned->addDuration($obj->task_duration, $obj->task_duration_type);
 208  
 209                  } else {
 210                      // calc task time span start - end
 211                      $d = $tsd->calcDuration($ted);
 212  
 213                      // Re-add (keep) task time span for end date.
 214                      // This is independent from $obj->task_duration.
 215                      // The value returned by Date::Duration() is always in hours ('1')
 216                      $ned->addDuration($d, '1');
 217  
 218                  }
 219  
 220                  // prefer tue 16:00 over wed 8:00 as an end date
 221                  $ned = $ned->prev_working_day();
 222  
 223                  $obj->task_start_date = $nsd->format(FMT_DATETIME_MYSQL);
 224                  $obj->task_end_date = $ned->format(FMT_DATETIME_MYSQL);
 225  
 226                  $q = new DBQuery;
 227                  $q->addTable('tasks', 't');
 228                  $q->addUpdate('task_start_date', $obj->task_start_date);
 229                  $q->addUpdate('task_end_date', $obj->task_end_date);
 230                  $q->addWhere('task_id = ' . (int)$obj->task_id);
 231                  $q->addWhere('task_dynamic <> 1');
 232                  $q->exec();
 233                  $q->clear();
 234              }
 235          }
 236          // If there is a set of post_save functions, then we process them
 237  
 238          if (isset($post_save)) {
 239              foreach ($post_save as $post_save_function) {
 240                  $post_save_function();
 241              }
 242          }
 243  
 244          if ($notify) {
 245              if ($msg = $obj->notify($comment)) {
 246                  $AppUI->setMsg($msg, UI_MSG_ERROR);
 247              }
 248          }
 249  
 250          $AppUI->redirect();
 251      }
 252  
 253  } // end of if subform
 254  ?>


Generated: Thu Jan 8 03:00:03 2009 Cross-referenced by PHPXref 0.7