use data links for git graph images
[phpgitweb.git] / htdocs / lib / graph.class.php
index 78deef381d341161ca9e988b45e654af1fcf8fb1..0906391d77cdcbb1e92bfc74a8c79b6e18426e07 100644 (file)
@@ -294,14 +294,19 @@ class graph_image_generator {
                );
        }
        
-       public function generate($data) {
+       public function generate($data, $return = false) {
                if(!GitConfig::GITGRAPH_ENABLE)
                        return;
                $data = $this->parse_data($data);
                if(!$data) {
+                       if($return)
+                               return null;
                        header('Content-Type: text/plain');
                        die(base64_decode("ICAgIC0tLS0tLS0tOi0tLS0tLS0tDQogICAgICAgICAgLC0iLC5fX19fX19fIC8NCiAgICAgICAgIC8gKSB8ICAgLC0tLS0nXA0KICAgICAgICAgXC9fX3wuLSINCiAgICAgICAgLl8vL19cXF8NCk5vdCB3aGF0IHlvdSBleHBlY3RlZCwgZWVlaD8="));
                }
+               if($data['header']) {
+                       return $this->display_header($data['data'], $return);
+               }
                
                $count = $data['count'];
                if($count > $this->max_branches)
@@ -314,12 +319,21 @@ class graph_image_generator {
                
                imagecolortransparent($this->image, $transparentIndex);
 
-               header('Content-Type: image/png');
-               imagepng($this->image);
+               if($return) {
+                       ob_start();
+                       imagepng($this->image);
+                       $ret = ob_get_contents();
+                       ob_end_clean();
+               } else {
+                       header('Content-Type: image/png');
+                       imagepng($this->image);
+                       $ret = null;
+               }
                imagedestroy($this->image);
+               return $ret;
        }
        
-       private function display_header($header) {
+       private function display_header($header, $return = false) {
                $header = explode("//",$header);
                $count = $header[0];
                $header = array_slice($header, 1);
@@ -347,12 +361,21 @@ class graph_image_generator {
                        $color = imagecolorallocatealpha($image, $color[0], $color[1], $color[2], 0);
                        imagettftext($image, 8, 28, ($head[0]-1) * $this->size + 10, $this->header_height-2, $color, realpath(dirname(__FILE__)."/../")."/res/arial.ttf", $name);
                }
-               if(!$branches) die();
+               if(!$branches) return null;
                imagecolortransparent($image, $transparentIndex);
-               header('Content-Type: image/png');
-               imagepng($image);
+               
+               if($return) {
+                       ob_start();
+                       imagepng($image);
+                       $ret = ob_get_contents();
+                       ob_end_clean();
+               } else {
+                       header('Content-Type: image/png');
+                       imagepng($image);
+                       $ret = null;
+               }
                imagedestroy($image);
-               die();
+               return $ret;
        }
        
        private function parse_data($data) {
@@ -360,12 +383,16 @@ class graph_image_generator {
                        $data = base64_decode($data);
                if(!preg_match("/^([0-9]+)([abc]{1})([0-9]+)\(([^\)]*)\)([a-z0-9,\|]*)(\(([^\)]*)\)|)/i", $data, $matches)) {
                        if(preg_match("/head:(.*)/i", $data, $matches)) {
-                               $this->display_header(substr($data, strlen("head:")));
+                               $cdata = array();
+                               $cdata['header'] = true;
+                               $cdata['data'] = substr($data, strlen("head:"));
+                               return $cdata;
                        }
                        return null;
                }
                
                $data = array();
+               $data['header'] = false;
                $data['dot'] = array();
                $data['dot']['pos'] = $matches[1];
                $data['dot']['type'] = $matches[2];