예제 #1
0
 private function work_week_view()
 {
     $today = date("j-m-Y");
     $today_datetime_handler = new DatetimeHandler($today);
     if (!$_GET['page']) {
         $date = date("W-Y");
     } else {
         $date = $_GET['page'];
     }
     $date_aray = explode("-", $date);
     $week_mktime = mktime(0, 0, 0, 1, 1, $date_aray[1]);
     $week_mktime = $week_mktime + 86400 * $date_aray[0] * 7;
     $act_day_of_week = (date("w", $week_mktime) + 6) % 7;
     $week_mktime = $week_mktime - $act_day_of_week * 86400;
     $datetime_handler = new DatetimeHandler($week_mktime);
     $datetime_handler->add_hour(5);
     $next_week_datetime_handler = clone $datetime_handler;
     $next_week_datetime_handler->add_day(7);
     $prev_week_datetime_handler = clone $datetime_handler;
     $prev_week_datetime_handler->sub_day(7);
     $week = date("W", $week_mktime);
     $year = date("Y", $week_mktime);
     $content_array = array();
     $color_count = 0;
     $day_date_array[1] = array();
     $day_date_array[2] = array();
     $day_date_array[3] = array();
     $day_date_array[4] = array();
     $day_date_array[5] = array();
     for ($i = 0; $i <= 18; $i++) {
         if ($color_count % 2) {
             $tr_class = " class='CalendarTrGrey'";
         } else {
             $tr_class = "";
         }
         $content_array[$i]['tr_class'] = $tr_class;
         if ($i == 0) {
             $content_array[$i]['head'] = true;
             $content_array[$i][0]['content'] = "";
             for ($j = 1; $j <= 5; $j++) {
                 $mktime = $datetime_handler->get_mktime();
                 $day = date("D jS M", $mktime);
                 if ($datetime_handler->get_formatted_string("Y-m-d") == $today_datetime_handler->get_formatted_string("Y-m-d")) {
                     $content_array[$i][$j]['content'] = "<span class='CalendarToday'>" . $day . "</span>";
                 } else {
                     $content_array[$i][$j]['content'] = $day;
                 }
                 $datetime_handler->add_day(1);
             }
         } else {
             $datetime_handler->sub_day(5);
             $content_array[$i]['head'] = false;
             $content_array[$i][0]['time'] = true;
             $content_array[$i][0]['content'] = $datetime_handler->get_formatted_string("H:i");
             for ($j = 1; $j <= 5; $j++) {
                 $content_array[$i][$j]['time'] = false;
                 $mktime = $datetime_handler->get_mktime();
                 $date_array = $this->mktime_has_date($mktime, $mktime + 3599);
                 if (is_array($date_array) and count($date_array >= 1)) {
                     $counter = 0;
                     foreach ($date_array as $key => $value) {
                         if (!in_array($value, $day_date_array[$j])) {
                             if ($content_array[$i][$j]['content']) {
                                 if ($this->calendar_array[$value]['link']) {
                                     $content_array[$i][$j]['content'] .= "<div class='CalendarWeekEntry'><a href='index.php?" . $this->calendar_array[$value]['link'] . "'>" . $this->calendar_array[$value]['name'] . "</a></div>";
                                 } else {
                                     $content_array[$i][$j]['content'] .= "<div class='CalendarWeekEntry'>" . $this->calendar_array[$value]['name'] . "</div>";
                                 }
                             } else {
                                 if ($this->calendar_array[$value]['link']) {
                                     $content_array[$i][$j]['content'] = "<div class='CalendarWeekEntry'><a href='index.php?" . $this->calendar_array[$value]['link'] . "'>" . $this->calendar_array[$value]['name'] . "</a></div>";
                                 } else {
                                     $content_array[$i][$j]['content'] = "<div class='CalendarWeekEntry'>" . $this->calendar_array[$value]['name'] . "</div>";
                                 }
                             }
                             array_push($day_date_array[$j], $value);
                         } else {
                             $content_array[$i][$j]['content'] = "";
                         }
                         $content_array[$i][$j][$counter]['value'] = $this->calendar_array[$value]['color'];
                         $counter++;
                     }
                 } else {
                     $content_array[$i][$j]['content'] = "";
                 }
                 $datetime_handler->add_day(1);
             }
             $datetime_handler->add_hour(1);
         }
         $color_count++;
     }
     $template = new HTMLTemplate("organiser/views/work_week.html");
     $paramquery_prev = $_GET;
     $paramquery_prev['page'] = date("W-Y", $prev_week_datetime_handler->get_mktime());
     $params_prev = http_build_query($paramquery_prev, '', '&#38;');
     $paramquery_next = $_GET;
     $paramquery_next['page'] = date("W-Y", $next_week_datetime_handler->get_mktime());
     $params_next = http_build_query($paramquery_next, '', '&#38;');
     $template->set_var("previous_params", $params_prev);
     $template->set_var("next_params", $params_next);
     $template->set_var("week", $week);
     $template->set_var("year", $year);
     $template->set_var("content_array", $content_array);
     return $template->get_string();
 }
예제 #2
0
 /**
  * @see ProjectTaskInterface::create_status_process()
  * @param integer $project_id
  * @param integer $user_id
  * @param string $comment
  * @param string $start_date
  * @param string $start_time
  * @param string $end_date
  * @param string $end_time
  * @param bool $whole_day
  * @param integer $end_status_id
  * @param bool $finalise
  * @param bool $auto_connect
  * @return integer
  * @throws ProjectTaskCreateException
  * @throws ProjectTaskCreateAttachException
  */
 public function create_status_process($project_id, $user_id, $comment, $start_date, $start_time, $end_date, $end_time, $whole_day, $end_status_id, $finalise, $auto_connect)
 {
     global $transaction;
     if (is_numeric($project_id) and is_numeric($user_id) and $end_date and ($end_time or $whole_day == true) and $end_status_id) {
         $transaction_id = $transaction->begin();
         $project = new Project($project_id);
         $project_task_point = new ProjectTaskPoint($project_id);
         $start_status_id = $project->get_current_status_id();
         if ($auto_connect == true) {
             // Get all autoconnected tasks of the project
             $task_array = ProjectTask_Access::list_auto_connected_entries_by_project_id($project_id);
             // Create Task
             $current_task_object = new ProjectTask_Access(null);
             $current_task_id = $current_task_object->create(1, $project_id, $user_id, $comment, $start_date, $start_time, $end_date, $end_time, $whole_day, true);
             if ($current_task_id) {
                 $current_task_type_object = new ProjectTaskStatusProcess_Access(null);
                 if ($current_task_type_object->create($current_task_id, $start_status_id, $end_status_id, $project_task_point->get_current_achieved_points(null), $finalise) == null) {
                     if ($transaction_id != null) {
                         $transaction->rollback($transaction_id);
                     }
                     throw new ProjectTaskCreateException("Could not create Status Task");
                 }
                 if (is_array($task_array) and count($task_array) >= 1) {
                     foreach ($task_array as $key => $value) {
                         $task_object = new ProjectTask_Access($value);
                         if ($task_object->get_type_id() == 1) {
                             $task_type_object = new ProjectTaskStatusProcess_Access($value);
                             $project_start_status_relation = new ProjectStatusRelation($project_id, $task_type_object->get_begin_status_id());
                             $project_end_status_relation = new ProjectStatusRelation($project_id, $task_type_object->get_end_status_id());
                             if ($project_end_status_relation->get_next() == $start_status_id) {
                                 // Case 1: End-status of an existing task will be start-status of the new task
                                 // Attach task directly
                                 $project_task_has_previous_task = new ProjectTaskHasPreviousTask_Access(null, null);
                                 if ($project_task_has_previous_task->create($current_task_id, $value) == null) {
                                     if ($transaction_id != null) {
                                         $transaction->rollback($transaction_id);
                                     }
                                     return null;
                                 }
                             } else {
                                 // Case 2: Start-status is inside an existing task
                                 // Case 2a: New task will be included after an existing task, existing task will be shortened
                                 // (e.g. include a task with the same begin like an existing task and choose a later status)
                                 $object_datetime_handler = new DatetimeHandler($task_object->get_end_date());
                                 $current_datetime_handler = new DatetimeHandler($end_date);
                                 if ($project_end_status_relation->is_less($end_status_id) and $current_datetime_handler->distance($object_datetime_handler) < 0) {
                                     // Check if interlinked
                                     $next_task_array = ProjectTaskHasPreviousTask_Access::list_tasks_by_previous_task_id($value);
                                     $connect_task = true;
                                     if (is_array($next_task_array) and count($next_task_array) >= 1) {
                                         foreach ($next_task_array as $next_key => $next_value) {
                                             $check_task_object = new ProjectTask_Access($next_value);
                                             if ($check_task_object->get_type_id() == 1) {
                                                 $check_task_type_object = new ProjectTaskStatusProcess_Access($value);
                                                 $check_project_start_status_relation = new ProjectStatusRelation($project_id, $check_task_type_object->get_begin_status_id());
                                                 $check_project_end_status_relation = new ProjectStatusRelation($project_id, $check_task_type_object->get_end_status_id());
                                                 if ($check_task_object->get_end_time() != null) {
                                                     $check_object_datetime_handler = new DatetimeHandler($check_task_object->get_end_date() . " " . $check_task_object->get_end_time());
                                                 } else {
                                                     $check_object_datetime_handler = new DatetimeHandler($check_task_object->get_end_date() . " 23:59:59");
                                                 }
                                                 if ($whole_day == false and $end_time) {
                                                     $check_current_datetime_handler = new DatetimeHandler($end_date . " " . $end_time);
                                                 } else {
                                                     $check_current_datetime_handler = new DatetimeHandler($end_date . " 23:59:59");
                                                 }
                                                 if ($check_project_end_status_relation->is_less($end_status_id) and $check_current_datetime_handler->distance($check_object_datetime_handler) < 0) {
                                                     $connect_task = false;
                                                 }
                                             }
                                         }
                                     }
                                     if ($connect_task == true) {
                                         if ($task_object->get_whole_day() == true) {
                                             $new_start_datetime_handler = new DatetimeHandler($task_object->get_end_date());
                                             $new_start_datetime_handler->add_day(1);
                                             if ($current_task_object->set_start_date($new_start_datetime_handler->get_formatted_string("Y-m-d")) == false) {
                                                 if ($transaction_id != null) {
                                                     $transaction->rollback($transaction_id);
                                                 }
                                                 throw new ProjectTaskCreateAttachException("Could not set start date (whole day)");
                                             }
                                         } else {
                                             $new_start_datetime_handler = new DatetimeHandler($task_object->get_end_date() . " " . $task_object->get_end_time());
                                             $new_start_datetime_handler->add_second(1);
                                             if ($current_task_object->set_start_date($new_start_datetime_handler->get_formatted_string("Y-m-d")) == false) {
                                                 if ($transaction_id != null) {
                                                     $transaction->rollback($transaction_id);
                                                 }
                                                 throw new ProjectTaskCreateAttachException("Could not set start date (time)");
                                             }
                                             if ($current_task_object->set_start_time($new_start_datetime_handler->get_formatted_string("H:i:s")) == false) {
                                                 if ($transaction_id != null) {
                                                     $transaction->rollback($transaction_id);
                                                 }
                                                 throw new ProjectTaskCreateAttachException("Could not set start time (time)");
                                             }
                                         }
                                         if ($current_task_type_object->set_begin_status_id($task_type_object->get_end_status_id()) == false) {
                                             if ($transaction_id != null) {
                                                 $transaction->rollback($transaction_id);
                                             }
                                             throw new ProjectTaskCreateAttachException("Could not set start status id");
                                         }
                                         // Change later tasks
                                         $next_task_array = ProjectTaskHasPreviousTask_Access::list_tasks_by_previous_task_id($value);
                                         if (is_array($next_task_array) and count($next_task_array) >= 1) {
                                             foreach ($next_task_array as $next_key => $next_value) {
                                                 $project_task_has_previous_task = new ProjectTaskHasPreviousTask_Access($next_value, $value);
                                                 if ($project_task_has_previous_task->set_previous_task_id($current_task_id) == null) {
                                                     if ($transaction_id != null) {
                                                         $transaction->rollback($transaction_id);
                                                     }
                                                     throw new ProjectTaskCreateAttachException("Could not set previous task id");
                                                 }
                                             }
                                         }
                                         // Connect Tasks
                                         $project_task_has_previous_task = new ProjectTaskHasPreviousTask_Access(null, null);
                                         if ($project_task_has_previous_task->create($current_task_id, $value) == null) {
                                             if ($transaction_id != null) {
                                                 $transaction->rollback($transaction_id);
                                             }
                                             throw new ProjectTaskCreateAttachException("Could not create task link");
                                         }
                                     }
                                 }
                                 // Case 2b: New task will be included before an existing task
                                 if (($project_start_status_relation->is_less($end_status_id) or $task_type_object->get_begin_status_id() == $end_status_id) and $project_end_status_relation->is_more($end_status_id) and $current_datetime_handler->distance($object_datetime_handler) >= 0) {
                                     // Change Date and Status
                                     if ($whole_day == true) {
                                         $new_end_datetime_handler = new DatetimeHandler($end_date);
                                         $new_end_datetime_handler->add_day(1);
                                         if ($task_object->set_start_date($new_end_datetime_handler->get_formatted_string("Y-m-d")) == false) {
                                             if ($transaction_id != null) {
                                                 $transaction->rollback($transaction_id);
                                             }
                                             throw new ProjectTaskCreateAttachException("Could not set start date (whole day)");
                                         }
                                     } else {
                                         $new_end_datetime_handler = new DatetimeHandler($end_date . " " . $end_time);
                                         $new_end_datetime_handler->add_second(1);
                                         if ($task_object->set_start_date($new_end_datetime_handler->get_formatted_string("Y-m-d")) == false) {
                                             if ($transaction_id != null) {
                                                 $transaction->rollback($transaction_id);
                                             }
                                             throw new ProjectTaskCreateAttachException("Could not set start date (time)");
                                         }
                                         if ($task_object->set_start_time($new_end_datetime_handler->get_formatted_string("H:i:s")) == false) {
                                             if ($transaction_id != null) {
                                                 $transaction->rollback($transaction_id);
                                             }
                                             throw new ProjectTaskCreateAttachException("Could not set start time (time)");
                                         }
                                     }
                                     if ($task_type_object->set_begin_status_id($end_status_id) == false) {
                                         if ($transaction_id != null) {
                                             $transaction->rollback($transaction_id);
                                         }
                                         throw new ProjectTaskCreateAttachException("Could not start status id");
                                     }
                                     // Change previous tasks
                                     $previous_task_array = ProjectTaskHasPreviousTask_Access::list_previous_tasks_by_task_id($value);
                                     if (is_array($previous_task_array) and count($previous_task_array) >= 1) {
                                         foreach ($previous_task_array as $previous_key => $previous_value) {
                                             $project_task_has_previous_task = new ProjectTaskHasPreviousTask_Access($value, $previous_value);
                                             if ($project_task_has_previous_task->set_task_id($current_task_id) == false) {
                                                 if ($transaction_id != null) {
                                                     $transaction->rollback($transaction_id);
                                                 }
                                                 throw new ProjectTaskCreateAttachException("Could not set previous task");
                                             }
                                         }
                                     }
                                     // Connect Tasks
                                     $project_task_has_previous_task = new ProjectTaskHasPreviousTask_Access(null, null);
                                     if ($project_task_has_previous_task->create($value, $current_task_id) == null) {
                                         if ($transaction_id != null) {
                                             $transaction->rollback($transaction_id);
                                         }
                                         throw new ProjectTaskCreateAttachException("Could not create task link");
                                     }
                                 }
                             }
                         }
                     }
                 }
                 if ($transaction_id != null) {
                     $transaction->commit($transaction_id);
                 }
                 return $current_task_id;
             } else {
                 if ($transaction_id != null) {
                     $transaction->rollback($transaction_id);
                 }
                 throw new ProjectTaskCreateException("Could not create parent Task");
             }
         } else {
             $current_task_object = new ProjectTask_Access(null);
             if (($current_task_id = $current_task_object->create(1, $project_id, $user_id, $comment, $start_date, $start_time, $end_date, $end_time, $whole_day, false)) != null) {
                 $current_task_type_object = new ProjectTaskStatusProcess_Access(null);
                 if ($current_task_type_object->create($current_task_id, $start_status_id, $end_status_id, $project_task_point->get_current_achieved_points(), $finalise) != null) {
                     if ($transaction_id != null) {
                         $transaction->commit($transaction_id);
                     }
                     return $current_task_id;
                 } else {
                     if ($transaction_id != null) {
                         $transaction->rollback($transaction_id);
                     }
                     throw new ProjectTaskCreateException("Could not create Status Task");
                 }
             } else {
                 if ($transaction_id != null) {
                     $transaction->rollback($transaction_id);
                 }
                 throw new ProjectTaskCreateException("Could not create parent Task");
             }
         }
     } else {
         throw new ProjectTaskCreateException("Information Missing");
     }
 }