function process_dependencies($i) { global $tasks, $option_advance_if_possible; if ($tasks[$i]["fixed"]) { return; } log_info("<div style='padding-left: 1em'>Dependecies for '" . $tasks[$i]["task_name"] . "':<br />"); // query dependencies for this task $query = mysql_query("select tasks.* from tasks,task_dependencies where task_id=dependencies_req_task_id and dependencies_task_id=" . $tasks[$i]["task_id"]); if (mysql_num_rows($query) != 0) { $all_fixed = true; $latest_end_date = null; // store dependencies in an array (for adding more entries on the fly) $dependencies = array(); while ($row = mysql_fetch_array($query)) { array_push($dependencies, $row); } $d = 0; while ($d < count($dependencies)) { $row = $dependencies[$d]; $index = search_task($row["task_id"]); if ($index == -1) { // task is not listed => it's a task group // => $i depends on all its subtasks // => add all subtasks to the dependencies array log_info("- task '" . $row["task_name"] . "' is a task group (processing subtask's dependencies)"); $children = get_last_children($row); // replace this taskgroup with all its subtasks array_splice($dependencies, $d, 1, $children); continue; } log_info(" - '" . $tasks[$index]["task_name"] . ($tasks[$index]["fixed"] ? " (FIXED)" : "") . "'"); // TODO: Detect dependencies loops (A->B, B->C, C->A) process_dependencies($index); if (!$tasks[$index]["fixed"]) { $all_fixed = false; } else { // ignore dependencies of finished tasks if option is enabled if (!$option_advance_if_possible || $tasks[$index]["task_percent_complete"] != 100) { // get latest end_date $end_date = db_dateTime2unix($tasks[$index]["task_end_date"]); if (!$latest_end_date || $end_date > $latest_end_date) { $latest_end_date = $end_date; $dep_on_task = $row; } } else { log_info("this task is complete => don't check dependency"); } $d++; } } if ($all_fixed) { // this task depends only on fixated tasks log_info("all dependencies are fixed"); fixate_task($i, $latest_end_date, $dep_on_task); } else { log_error("task has not fixed dependencies"); } } else { // task has no dependencies log_info("no dependencies => "); fixate_task($i, time(), ""); } log_info("</div><br />\n"); }
task_preview(); break; case 2: delete_task(); break; case 3: add_task(); break; case 4: update_task(); break; case 5: display_tasks(); break; case 6: search_task(); break; case 7: user_login(); break; case 8: delete_tasks(); break; case 9: select_collaborator(); break; case 10: display_created_task(); break; case 11: search_created_tasks();
$query .= " AND Task.Status='{$pLevel}'"; } if ($pKeyword != '') { $query .= " AND Task.Target LIKE '%{$pKeyword}%'"; } if (is_int($pId) and $pId > 0) { $query .= " AND Task.ID={$pId}"; } // echo $query.'<br>'; $ret = array('data' => array()); $result = mysql_query($query); while ($row = mysql_fetch_row($result)) { // var_dump($row); foreach ($row as $key => $value) { // echo $key.' => '.$value; $row[$key] = check_xss($value); } $ret['data'][] = $row; // var_dump($row); } return $ret; } // check login first if (!already_login()) { die; } $keyword = check_sql(trim($_REQUEST['keyword'])); $level = (int) $_REQUEST['level']; $taskID = (int) $_REQUEST['taskid']; $data = search_task($level, $keyword, $taskID); echo json_encode($data);