![]() |
|---|
| [ Index ] |
Source Code Reference for V1.00 |
[Summary view] [Print] [Text view]
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 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Thu Jan 8 03:00:03 2009 | Cross-referenced by PHPXref 0.7 |