UID of the history entry * ---------------------------------------------------------*/ public function __construct($id_history){ /* (1) Set attributes ---------------------------------------------------------*/ $this->id_history = $id_history; /* (2) Get machine timeline ---------------------------------------------------------*/ /* (1) Request */ $mac_req = new Request('historyDefault/get_timeline', [ 'id_entry' => $this->id_history ]); /* (2) Get response */ $mac_res = $mac_req->dispatch(); /* (3) On success, store timeline data */ if( $mac_res->error->get() == Err::Success ) $this->timeline = $mac_res->get('timeline'); } /* (2) Format timeline data to svg render * * @timeline Timeline data * * @return svg SVG raw render * ---------------------------------------------------------*/ public function svg(){ /* (1) Initialize variables ---------------------------------------------------------*/ /* (1) Set date() timezone */ date_default_timezone_set('Europe/Paris'); /* (2) Init. result raw svg */ $RAW = ''; /* (3) Set global range */ $c = 0; $cl = count($this->timeline); /* (4) Create ranges of size 15 */ $r_size = 10; $rl = round( $cl / $r_size ); $y_range_diff = 100; $total_height = $y_range_diff*$rl; /* (1) Svg tag */ $RAW .= ""; /* (2) Start CIRCLE */ $RAW .= ""; $RAW .= ""; for( $r = 0 ; $r < $rl ; $r++ ){ $y = $y_range_diff*$r + 50; /* (2) Build barebone ---------------------------------------------------------*/ /* (1) Timeline LINE */ $RAW .= ""; /* (3) Build each action ---------------------------------------------------------*/ for( $c = 0 ; $c < $r_size ; $c++ ){ // exit if no more entry if( !isset($this->timeline[$r*$r_size+$c]) ) break; $entry = $this->timeline[$r*$r_size+$c]; $action_class = strtolower($entry['action_name']); $icon_uri = '/src/static/timeline/'.$action_class.'@'.$this->get_action_color($action_class).'.svg'; $x_offset = 100 + $c*800/$r_size; $x_img_offset = $x_offset - 5.5; // circle $RAW .= ""; $RAW .= ""; // inside icon $y_decal = $y - 5.5; $RAW .= ""; } // exit if no more entry if( !isset($this->timeline[$r*$r_size]) ) break; } /* (4) Stop CIRCLE */ $x_offset = 100 + $c*800/$r_size; $RAW .= ""; $RAW .= ""; /* (5) Close SVG tag */ $RAW .= ""; return $RAW; } private function get_action_color($action_name){ return 'ffffff'; switch($action_name){ case 'start': return '2cde8b'; break; case 'stop': return '3a3a3a'; break; case 'lock': return 'e04343'; break; case 'unlock': return 'af1c1c'; break; case 'signal': return '3258d8'; break; case 'unsignal': return '2041ab'; break; } return '000000'; } }