}
unset($branch);
if($existing)
- continue;
+ return;
+ $name_arr = array();
+ if($name)
+ $name_arr[] = $name;
$this->data['branches'][count($this->data['branches'])] = array(
"id" => $this->brach_id++,
"uid" => $this->branch_uid++,
"active" => true,
"sticky" => true,
- "name" => array($name),
+ "name" => $name_arr,
"next" => $first_id,
"pre_merge" => false
);
$branch['active'] = false;
$commit['dot_type'] = self::DOT_TYPE_INIT;
}
- $branch['next'] = (array_key_exists('parent', $commit) ? $commit['parent'][0] : null);
+ $branch['next'] = ((array_key_exists('parent', $commit) && count($commit['parent'])) ? $commit['parent'][0] : null);
$branch['pre_merge'] = false;
$this->data['ubranches'][$branch['uid']] = $this->data['branches'][$branch['id']-1];
foreach($this->data['branches'] as $branch) {
if(array_key_exists('sticky', $branch) && $branch['sticky']) {
$name = explode('/', $branch['name'][0], 3);
- $dataadd .= "\n".$branch['id'].":".$name[2];
+ $dataadd .= "//".$branch['id'].":".$name[2];
$branchcount++;
}
}
);
}
- public function generate($data) {
+ public function generate($data, $return = false) {
if(!GitConfig::GITGRAPH_ENABLE)
return;
$data = $this->parse_data($data);
- if(!$data)
- return;
+ 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)
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) {
- $header = explode("\n",$header);
+ private function display_header($header, $return = false) {
+ $header = explode("//",$header);
$count = $header[0];
$header = array_slice($header, 1);
if($count > $this->max_branches)
$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);
+ return $ret;
}
private function parse_data($data) {
$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];