ISN (International Social Networking Services - Interactive Apps and Websites)



Statistics and counters: Graph Maker Function


Graph Maker Function

 
function GraphRows($rows, $opts) 
#  options 
#     
#    box_x_size: width of values area 
#    box_y_size: height of the values area 
#    x_size: total width of the graph 
#    y_size: total height of the graph 
#    x_val: array element of record to assign as x_value 
#    y_val: array element to assign as y_value 
#    x_label: label for the Bottom of the graph 
#    y_label: label for the left side 
#    font: font number to use from system 
#    font_file: file to use as the font 
#    show_x_val: true == show X value of each bar with the y_label 
#    show_y_val: true == show Y value labels 
#    title: string for top of graph 
#    bar_color: color array to use for bars 
#    box_color: color to use for the box edging and value box. 
#    label_color: color for the labels 
#    val_color: color to to use for the values 
#    title_color: color to use for the title. 
#    bg_color: color for the background. 
#    bg_trans: make the background transparant. 
#    img_format: can be "png", "gif", or "jpg". 
 
  $defaults = array("show_x_val" => 1, 
            "show_y_val" => 1, 
            "show_y_lines" => 1, 
            "font" => 1, 
            "x_val" => NULL, 
            "y_val" => NULL, 
            "title" => NULL, 
            "x_label" => NULL, 
            "y_label" => NULL, 
            "x_title" => NULL, 
            "y_title" => NULL, 
            "x_slant" => NULL, 
            "font_file" => NULL, 
            "x_size" => NULL, 
            "y_size" => NULL, 
            "box_x_size" => 300, 
            "box_y_size" => 200, 
            "right_margin" => 2, 
            "fg_color" => array(1,1,1), 
            "bg_color" => array(232, 226, 202), 
            "bg_trans" => NULL, 
            "bar_color" => array(128, 128, 128), 
            "box_color" => NULL, 
            "val_color" => NULL, 
            "title_color" => NULL, 
            "return" => NULL, 
            "img_format" => "png"); 
  foreach($defaults as $opt => $val) 
  { 
    if(!array_Key_exists($opt, $opts)) 
      { 
    $opts["$opt"] = $val; 
      } 
  } 
  if($opts["font_file"]) 
    { 
      $opts["font"] =imageloadfont($opts["font_file"]); 
    } 
  $font_y = imagefontheight($opts["font"]); 
  $font_x = imagefontwidth($opts["font"]); 
   
#the boxed area with be 2 from the top and right, 30 from the left, and 12 from the bottom. 
# the border will be 1px wide. 
  $max_x = 0; 
  $max_y = 0; 
  $longest_x = 0; 
  $longest_y = 0; 
  $x_mod = 1.3; 
  $y_mod = 1.3; 
   
# find the longest x and y value str lengths for the label margin size. 
  foreach($rows as $idx => $row) 
  { 
    $y_val = $row; 
    $x_val = $idx; 
    if(is_array($row)) 
      { 
    foreach($row as $idx => $val) 
    { 
      $y_val = $val; 
      break; 
    } 
    if($opts["y_val"]) 
      { 
        if(array_key_exists($opts["y_val"], $row)) 
          { 
        $y_val = $row[$opts["y_val"]]; 
          } 
      } 
 
    if($opts["x_val"]) 
      { 
        if(array_key_exists($opts["x_val"], $row)) 
          { 
        $x_val = $row[$opts["x_val"]]; 
          } 
      } 
      } 
    if($y_val > $max_y) 
      { 
    $max_y = $y_val; 
      } 
    if($x_val > $max_x) 
      { 
    $max_x = $x_val; 
      } 
    $y_len = strlen($y_val); 
    $x_len = strlen($x_val); 
    if($y_len > $longest_y) 
      { 
    $longest_y = $y_len; 
      } 
    if($x_len > $longest_x) 
      { 
    $longest_x = $x_len; 
      } 
  } 
  $left_margin = 0; 
  $bottom_margin = 0; 
  $top_margin = $font_y * ($y_mod/2); 
  if($opts["title"] != NULL) 
    { 
      $top_margin = $font_y * $y_mod + $font_y * ($y_mod/2); 
    } 
  if($opts["show_x_val"]) 
    { 
      $bottom_margin += $font_y * $y_mod; 
      if($opts["x_slant"]) 
    { 
      $bottom_margin += $font_x * $longest_x - $font_y * $y_mod; 
    } 
    } 
  if($opts["show_y_in_x"]) 
    { 
      $bottom_margin += $font_y * $y_mod; 
    } 
  if($opts["x_title"]) 
    { 
      $bottom_margin += $font_y * $y_mod; 
    } 
  if($opts["show_y_val"]) 
    { 
      $left_margin += $font_x * $x_mod * $longest_y; 
    } 
  if($opts["y_title"]) 
    { 
      $t_margin = $font_y * $y_mod + $font_y * ($y_mod/2); 
      $l_margin = $font_x * $x_mod * strlen($opts["y_title"]); 
      if($t_margin > $top_margin) 
    { 
      $top_margin = $t_margin; 
    } 
      if($l_margin > $left_margin) 
    { 
      $left_margin = $l_margin; 
    } 
    } 
# we have to calculate the x and y image and box sizes depending on which is present. 
  # img sizing overrides the box size; 
  if($opts["x_size"]) 
    { 
      $opts["box_x_size"] = $img_x - $left_margin - 2 - $opts["right_margin"] ; 
   } 
  else 
    { 
      $opts["x_size"] = $left_margin + $opts["box_x_size"] + 2 + $opts["right_margin"]; 
    } 
  if($opts["y_size"]) 
    { 
      $opts["box_y_size"] = $img_y - $top_margin - 2 - $bottom_margin; 
    } 
  else 
    { 
     $opts["y_size"] = $top_margin + 2 + $opts["box_y_size"] + $bottom_margin; 
    } 
 
  $box_top = $top_margin+1; 
  $box_bottom = $box_top + 2 + $opts["box_y_size"]; 
  $box_left = $left_margin+1; 
  $box_right = $box_left + $opts["box_x_size"]; 
  $img =  imagecreate($opts["x_size"]+1, $opts["y_size"]+1); 
  list($r, $g, $b) = $opts["bg_color"]; 
  $bg_color = imagecolorallocate($img, $r, $g, $b); 
  if($opts["bg_trans"]) 
    { 
      imagecolortransparent($img, $bg_color); 
    } 
  list($r, $g, $b) = $opts["fg_color"]; 
  $fg_color = imagecolorallocate($img, $r, $g, $b); 
  if(is_array($opts["val_color"])) 
    { 
      list($r, $g, $b) = $opts["val_color"]; 
    } 
  $box_color = $fg_color; 
  if(is_array($opts["box_color"])) 
    { 
      list($r, $g, $b) = $opts["box_color"]; 
      $box_color = imagecolorallocate($img, $r, $g, $b); 
    } 
  $bar_color = $fg_color; 
  if(is_array($opts["bar_color"])) 
    { 
      list($r, $g, $b) = $opts["bar_color"]; 
      $bar_color = imagecolorallocate($img, $r, $g, $b); 
    } 
  $title_color = $fg_color; 
  if(is_array($opts["title_color"])) 
    { 
      list($r, $g, $b) = $opts["title_color"]; 
      $title_color = imagecolorallocate($img, $r, $g, $b); 
    } 
  $val_color = $fg_color; 
  if(is_array($opts["val_color"])) 
    { 
      list($r, $g, $b) = $opts["val_color"]; 
      $val_color = imagecolorallocate($img, $r, $g, $b); 
    } 
  imagerectangle($img, 0, 0, $opts["x_size"], $opts["y_size"], $box_color); 
  imagerectangle($img, $box_left, $box_top, $box_right, $box_bottom, $box_color); 
  $num_records = count($rows); 
# lets find the next item up. 
# find the maximal marker. 
 
  $finder = $max_y;   
  $multiple = 1; 
  while($finder > 10) 
    { 
      $finder = $finder/10; 
      $multiple *= 10; 
    } 
  $oldfinder =$finder; 
  $finder = round($finder); 
  if($finder < $oldfinder) 
    { 
      $finder++; 
    } 
# ok, so we have UP to 10 marks. 
  $num_marks = $finder; 
  $max_y = $finder * $multiple; 
 
  $xspan = ($opts["box_x_size"] - $num_records -1)/$num_records; 
  $yspan = $opts["box_y_size"]/$num_marks; 
 
  for($x=$num_marks;$x>=0;$x--) 
    { 
      if($opts["show_y_lines"]) 
    { 
      imageline($img, 
            $box_left, ($x*$yspan)+$top_margin+1, 
            $box_right, ($x*$yspan)+$top_margin+1, 
            $box_color); 
    } 
      if($opts["show_y_val"]) 
    { 
      $text = ($num_marks - $x)*$multiple; 
      imagestring($img, $opts["font"], 
              $left_margin - strlen($text)*$x_mod*$font_x, 
              ($x*$yspan)+$top_margin-($font_y/2)+2, 
              $text, $box_color); 
    } 
    } 
  if($opts["title"]) 
    { 
      $txtlen = strlen($opts["title"]) * $font_x; 
      $left = $opts["box_x_size"]/2 - $txtlen/2 + $left_margin +1; 
      $top = $font_y * $y_mod / 3; 
      imagestring($img, $opts["font"], $left, $top, $opts["title"], $title_color); 
    } 
  if($opts["y_title"]) 
    { 
      $txtlen = strlen($opts["y_title"]) * $font_x; 
      $left = $left_margin / 2 - $txtlen / 2; 
      $top = $font_y * $y_mod / 3; 
      imagestring($img, $opts["font"], $left, $top, $opts["y_title"], $title_color); 
    } 
  if($opts["x_title"]) 
    { 
      $left = $left_margin; 
      $top = $opts["box_y_size"] + $top_margin + $font_y * $y_mod / 3; 
      if($opts["show_x_val"]) 
    { 
      $top += $font_y * $y_mod; 
    } 
      if($opts["show_y_in_x"]) 
    { 
      $top += $font_y * $y_mod; 
    } 
      imagestring($img, $opts["font"], $left, $top, $opts["x_title"], $title_color); 
    } 
 
  $x_pos = 0; 
  foreach($rows as $idx => $row) 
  { 
    $y_value = $row; 
    $x_value = $idx; 
    if(is_array($row)) 
      { 
    if($opts["y_val"] && array_key_exists($opts["y_val"], $row)) 
      { 
        $y_value = $row[$opts["y_val"]]; 
      } 
    else 
      { 
        foreach($row as $var => $val) 
        { 
          $y_value = $val; 
          break; 
        } 
      } 
      } 
    if($opts["x_val"]) 
      { 
    $x_value = $row[$opts["x_val"]]; 
      } 
    if(!is_numeric($x_value)) 
      { 
    $x_value = $x_pos; 
      } 
    $top = $box_bottom - $y_value * $yspan / $multiple; 
    $left = $box_left + $xspan *  $x_value + 1 + $x_value; 
    $right = $left + $xspan - 1; 
    imagefilledrectangle($img, $left, $top, $right, $box_bottom, $bar_color); 
 
    $y_txt = $x_pos + 1; 
    if($opts["x_val"]) 
      { 
    if(array_key_exists($opts["x_val"], $row)) 
      { 
        $y_txt = $row[$opts["x_val"]]; 
      } 
      } 
    $top = $box_bottom + $font_y * $y_mod / 5; 
    $txt_left = $left + $xspan / 2 - strlen($y_txt) * $font_x  / 2 + 2; 
    imagestring($img, $opts["font"], $txt_left, $top, $y_txt, $val_color); 
    if($opts["show_y_in_x"]) 
      { 
    $top += $font_y * $y_mod; 
    $txt_left = $left + $xspan / 2 - strlen($y_value) * $font_x  / 2 + 2; 
    imagestring($img, $opts["font"], $txt_left, $top, $y_value, $val_color); 
      } 
    $x_pos++; 
  } 
  if($opts["return"]) 
    { 
      return($img); 
    } 
  switch(strtolower($opts["img_format"])) 
    { 
    case "png": 
      Header("Content-Type: image/png"); 
      ImagePNG($img); 
      break; 
    case "jpg": 
    case "jpeg": 
      Header("Content-Type: image/jpeg"); 
      ImageJPEG($img); 
      break; 
    case "gif": 
      Header("Content-Type: image/gif"); 
      ImageGIF($img); 
      break; 
    } 
  ImageDestroy($img); 
  return; 
}
By continuing to use this site, you agree to the use of cookies to personalize content and advertisements, to provide social media functionality, to analyze our traffic using Google services like Analytics and Adsense.

Google Adsense and its partners may use your data for advertising personalization and cookies may be used for personalized and non-personalized advertising. How does Google use my data?
Please use the following button to see the list of Google partners as well as all the details regarding cookies.
See detailsI Accept
These cookies are mandatory for the operation of isn-services.com, if you do not accept them please quit this site.
You have the right to refuse cookies and leave the site or to change the parameters.