add_color('#FF8080'); $this->add_color('#99CCFF'); $this->add_color('#00FF00'); $this->add_color('#FF9900'); $this->add_color('#800080'); } /** * Add an event to be processed * @param string name of the event * @param integer the week to start this event * @param integer duration * @return bool whether or not the event was added successfully **/ public function add_event($event, $start, $duration) { // return false if we do not have valid data if(!is_int($start)) return false; if(!is_int($duration)) return false; // add the event $this->events[] = (object)array( 'event' => $event, 'start' => $start, 'duration' => $duration, ); // reset the HTML so it is re-rendered next attempt $this->html = ''; return true; } /** * Create an HTML Gantt chart from the current events * @return string html for our gantt chart **/ public function render_html() { // if we have previously rendered this gantt and have not added // new events, we don't need to do it again and can returned the // cached html if($this->html != '') { return $this->html; } $columns = $this->find_last(); $this->html = '' . "\n"; // create the header $this->html .= ' ' . "\n"; $this->html .= ' ' . "\n"; $this->html .= ' ' . "\n"; for($i = 1; $i <= $columns; $i++) { $this->html .= ' ' . "\n"; } $this->html .= ' ' . "\n"; // add all the rows foreach($this->events as $event) { $color = $this->get_color(); $this->html .= ' ' . "\n"; $this->html .= ' ' . "\n"; $this->html .= ' ' . "\n"; for($i = 1; $i <= $columns; $i++) { if($i >= $event->start && $i < ($event->start + $event->duration)) { $style = ' style="background-color:' . $color . '"'; } else { $style = ' style="background-color:#fff"'; } $this->html .= ' ' . "\n"; } $this->html .= ' ' . "\n"; } $this->html .= '
TaskWeeks' . $i . '
' . $event->event . '' . $event->duration . ' 
' . "\n"; return $this->html; } /** * Find the last column in our Gantt chart * @return integer last column **/ private function find_last() { $last = 0; foreach($this->events as $event) { $end = $event->start + $event->duration - 1; $last = ($end > $last) ? $end : $last; } return $last; } /** * Add a color to our list * @param string hexadecimal color code * @return bool whether or not the color was added **/ public function add_color($color) { // the color was not properly formatted if(preg_match('/^#(?:[0-9a-fA-F]{3}){1,2}$/',$color) == 0) return false; // color is already in the list if(in_array($color,$this->colors)) return false; $this->colors[] = $color; return true; } /** * Get a color to use * @param integer the number of times this function has been called * @return string color code **/ private function get_color() { return $this->colors[++$this->color_count % count($this->colors)]; } } ?>