Improve BubbleTree colors
Improve BubbleTree colors

file:b/.gitmodules (new)
  [submodule "lib/bubbletree"]
  path = lib/bubbletree
  url = https://github.com/okfn/bubbletree.git
 
<?php <?php
error_reporting(E_ALL); error_reporting(E_ALL);
  include_once("../lib/common.inc.php");
$link = mysql_connect('localhost', 'team7', 'wlUsnD2xu9');  
if (!$link) {  
die('Could not connect: ' . mysql_error());  
}  
@mysql_select_db("team7") or die("Unable to select database");  
$unspscresult = mysql_query ("select * from UNSPSCcategories;"); $unspscresult = mysql_query ("select * from UNSPSCcategories;");
while ($row = mysql_fetch_assoc($unspscresult)) { while ($row = mysql_fetch_assoc($unspscresult)) {
$unspsc[$row['UNSPSC']] = $row['Title']; $unspsc[$row['UNSPSC']] = $row['Title'];
} }
$catsresult = mysql_query ("SELECT LEFT( categoryUNSPSC, 2 ) as cat , SUM( value ) as value $catsresult = mysql_query ("SELECT LEFT( categoryUNSPSC, 2 ) as cat , SUM( value ) as value
FROM `contractnotice` FROM `contractnotice`
GROUP BY cat ;"); GROUP BY cat ;");
echo "<table>"; echo "<table>";
while ($row = mysql_fetch_assoc($catsresult)) { while ($row = mysql_fetch_assoc($catsresult)) {
$catName = $unspsc[$row['cat']."000000"].$row['cat']; $catName = $unspsc[$row['cat']."000000"].$row['cat'];
if ($row['cat'] = "") $catName = "null"; if ($row['cat'] == "") $catName = "null";
echo "<tr><td>$catName</td><td>".$row['value']."</td></tr>"; echo "<tr><td>$catName</td><td>".$row['value']."</td></tr>";
} }
?> ?>
   
 
  <!DOCTYPE html>
  <html xmlns="http://www.w3.org/1999/xhtml">
  <head>
  <meta charset="UTF-8"/>
  <title>Minimal BubbleTree Demo</title>
  <script type="text/javascript" src="lib/bubbletree/lib/jquery-1.5.2.min.js"></script>
  <script type="text/javascript" src="lib/bubbletree/lib/jquery.history.js"></script>
  <script type="text/javascript" src="lib/bubbletree/lib/raphael.js"></script>
  <script type="text/javascript" src="lib/bubbletree/lib/vis4.js"></script>
  <script type="text/javascript" src="lib/bubbletree/lib/Tween.js"></script>
  <script type="text/javascript" src="lib/bubbletree/build/bubbletree.js"></script>
  <link rel="stylesheet" type="text/css" href="lib/bubbletree/build/bubbletree.css" />
  <script type="text/javascript" src="lib/bubbletree/styles/cofog.js"></script>
 
 
  <script type="text/javascript">
 
  $(function() {
  <?php
  include_once ("lib/common.inc.php");
 
  include("lib/Color.php");
  $color = new Lux_Color();
 
 
  $unspscresult = mysql_query("select * from UNSPSCcategories;");
  while ($row = mysql_fetch_assoc($unspscresult)) {
  $unspsc[$row['UNSPSC']] = $row['Title'];
  }
  $total = 0;
  $cats = 0;
  $catsresult = mysql_query("SELECT LEFT( categoryUNSPSC, 1 ) as cat ,
  SUM( value ) as value
  FROM `contractnotice`
  WHERE childCN = 0
  GROUP BY cat ;");
  $nodes = Array();
  while ($row = mysql_fetch_assoc($catsresult)) {
  $cats++;
  $catColor = $color->hsl2hex(Array($cats/10, .7, .5));
  $catName = $unspsc[$row['cat'] . "0000000"] . $row['cat'];
  if ($row['cat'] == "") $catName = "null";
  $subnodes = Array();
  $cattwosresult = mysql_query("SELECT LEFT( categoryUNSPSC, 2 ) as cat ,
  SUM( value ) as value
  FROM `contractnotice`
  WHERE childCN = 0 and LEFT( categoryUNSPSC, 1 ) = '{$row['cat']}'
  GROUP BY cat ;");
  while ($tworow = mysql_fetch_assoc($cattwosresult)) {
  $subcatName = $unspsc[$tworow['cat'] . "000000"] . $tworow['cat'];
  if ($tworow['cat'] == "") $subcatName = "null";
  $subsubnodes = Array();
  $catthreesresult = mysql_query("SELECT LEFT( categoryUNSPSC, 3 ) as cat ,
  SUM( value ) as value
  FROM `contractnotice`
  WHERE childCN = 0 and LEFT( categoryUNSPSC, 2 ) = '{$tworow['cat']}'
  GROUP BY cat ;");
  $subCatColor = $color->hsl2hex(Array($cats/10, rand(1,10)/10, .5));
  while ($threerow = mysql_fetch_assoc($catthreesresult)) {
  $subsubcatName = $unspsc[$threerow['cat'] . "00000"] . $threerow['cat'];
  if ($threerow['cat'] == "") $subsubcatName = "null";
  $subsubnodes[] = Array(
  "label" => $subsubcatName,
  "amount" => $threerow['value'],
  "color" => "#".$subCatColor
  );
  }
  $subnodes[] = Array(
  "label" => $subcatName,
  "amount" => $tworow['value'],
  "color" => "#".$subCatColor,
  "children" => $subsubnodes
  );
  }
  $nodes[] = Array(
  "label" => $catName,
  "amount" => $row['value'],
  "color" => "#".$catColor,
  "children" => $subnodes
  );
  $total+= $row['value'];
  }
  $data = Array(
  "label" => "Australian Federal Government Contract Spending",
  "amount" => $total,
  "color" => "#000000",
  "children" => $nodes
  );
  echo "var data =eval('('+'" . json_encode($data) . "'+')');";
  ?>
 
  new BubbleTree({
  data: data,
  container: '.bubbletree'
  });
 
 
  });
 
  </script>
  </head>
  <body>
  <div class="bubbletree-wrapper">
  <div class="bubbletree"></div>
  </div>
  </body>
  </html>
 
<?php <?php
include_once ("../lib/common.inc.php"); include_once ("../lib/common.inc.php");
$heuristics = Array(); $heuristics = Array();
//each heuristic adds self to description array //each heuristic adds self to description array
include ("dateHeuristics.php"); include ("dateHeuristics.php");
//include ("historyHeuristics.php"); include ("historyHeuristics.php");
//include ("metadataHeuristics.php"); //include ("metadataHeuristics.php");
//include ("valueHeuristics.php"); //include ("valueHeuristics.php");
function runHeuristic($heuristicName, $cn) function runHeuristic($heuristicName, $cn)
{ {
// check if already ran // check if already ran
$query = "select count(*) from heuristic_results where heuristic_name = '$heuristicName' and CNID = '{$CN['CNID']}"; $query = "select count(*) from heuristic_results where heuristic_name = '$heuristicName' and CNID = '{$cn['CNID']}'";
$result = mysql_query($query); $result = mysql_query($query);
$r = mysql_fetch_array($result); $r = mysql_fetch_array($result);
if ($r[0] == 0) { if ($r[0] == 0) {
// if not, run now // if not, run now
$hresults = call_user_func($heuristicName, $cn); $hresults = call_user_func($heuristicName, $cn);
if (!isset($hresults["heuristic_value"]) || !isset($hresults["raw_value"]) || !isset($hresults["mean"]) || !isset($hresults["stddev"])) { if (!isset($hresults["heuristic_value"]) || !isset($hresults["raw_value"]) || !isset($hresults["mean"]) || !isset($hresults["stddev"])) {
print_r($hresults); print_r($hresults);
die("Missing field in heurtistic $heuristicName result"); die("Missing field in heurtistic $heuristicName result");
} }
$query = "insert into heuristic_results values('$heuristicName', $query = "insert into heuristic_results values('$heuristicName',
'{$hresults["heuristic_value"]}', '{$hresults["heuristic_value"]}',
'{$hresults["raw_value"]}', '{$hresults["raw_value"]}',
'{$hresults["mean"]}', '{$hresults["mean"]}',
'{$hresults["stddev"]}', '{$hresults["stddev"]}',
'{$cn["CNID"]}', '{$cn["CNID"]}',
NOW(), NOW(),
'{$cn["publishDate"]}', '{$cn["publishDate"]}',
'{$cn["agencyABN"]}', '{$cn["agencyABN"]}',
'{$cn["supplierID"]}' '{$cn["supplierID"]}'
)"; )";
// save value and cn data via sql // save value and cn data via sql
$result = mysql_query($query); $result = mysql_query($query);
if ($result) echo "Saved $heuristicName for {$cn["CNID"]} <br>\n"; if ($result) echo "Saved $heuristicName for {$cn["CNID"]} <br>\n";
elseif (strpos(mysql_error() , "Duplicate entry") === false) echo $hresults . " failed insert.<br>" . mysql_error() . " <br> $query <br><br>\n"; elseif (strpos(mysql_error() , "Duplicate entry") === false) echo $hresults . " failed insert.<br>" . mysql_error() . " <br> $query <br><br>\n";
} }
} }
?> ?>
   
file:b/lib/Color.php (new)
  <?php
  /**
  *
  * Color values manipulation utilities. Provides methods to convert from and to
  * Hex, RGB, HSV and HSL color representattions.
  *
  * Several color conversion logic are based on pseudo-code from
  * http://www.easyrgb.com/math.php
  *
  * @category Lux
  *
  * @package Lux_Color
  *
  * @author Rodrigo Moraes <rodrigo.moraes@gmail.com>
  *
  * @license http://www.opensource.org/licenses/bsd-license.php BSD License
  *
  * @version $Id$
  *
  */
  class Lux_Color
  {
  /**
  *
  * Converts hexadecimal colors to RGB.
  *
  * @param string $hex Hexadecimal value. Accepts values with 3 or 6 numbers,
  * with or without #, e.g., CCC, #CCC, CCCCCC or #CCCCCC.
  *
  * @return array RGB values: 0 => R, 1 => G, 2 => B
  *
  */
  public function hex2rgb($hex)
  {
  // Remove #.
  if (strpos($hex, '#') === 0) {
  $hex = substr($hex, 1);
  }
 
  if (strlen($hex) == 3) {
  $hex .= $hex;
  }
 
  if (strlen($hex) != 6) {
  return false;
  }
 
  // Convert each tuple to decimal.
  $r = hexdec(substr($hex, 0, 2));
  $g = hexdec(substr($hex, 2, 2));
  $b = hexdec(substr($hex, 4, 2));
 
  return array($r, $g, $b);
  }
 
  /**
  *
  * Converts hexadecimal colors to HSV.
  *
  * @param string $hex Hexadecimal value. Accepts values with 3 or 6 numbers,
  * with or without #, e.g., CCC, #CCC, CCCCCC or #CCCCCC.
  *
  * @return array HSV values: 0 => H, 1 => S, 2 => V
  *
  */
  public function hex2hsv($hex)
  {
  return $this->rgb2hsv($this->hex2rgb($hex));
  }
 
  /**
  *
  * Converts hexadecimal colors to HSL.
  *
  * @param string $hex Hexadecimal value. Accepts values with 3 or 6 numbers,
  * with or without #, e.g., CCC, #CCC, CCCCCC or #CCCCCC.
  *
  * @return array HSL values: 0 => H, 1 => S, 2 => L
  *
  */
  public function hex2hsl($hex)
  {
  return $this->rgb2hsl($this->hex2rgb($hex));
  }
 
  /**
  *
  * Converts RGB colors to hexadecimal.
  *
  * @param array $rgb RGB values: 0 => R, 1 => G, 2 => B
  *
  * @return string Hexadecimal value with six digits, e.g., CCCCCC.
  *
  */
  public function rgb2hex($rgb)
  {
  if(count($rgb) < 3) {
  return false;
  }
 
  list($r, $g, $b) = $rgb;
 
  // From php.net.
  $r = 0x10000 * max(0, min(255, $r));
  $g = 0x100 * max(0, min(255, $g));
  $b = max(0, min(255, $b));
 
  return strtoupper(str_pad(dechex($r + $g + $b), 6, 0, STR_PAD_LEFT));
  }
 
  /**
  *
  * Converts RGB to HSV.
  *
  * @param array $rgb RGB values: 0 => R, 1 => G, 2 => B
  *
  * @return array HSV values: 0 => H, 1 => S, 2 => V
  *
  */
  public function rgb2hsv($rgb)
  {
  // RGB values = 0 ÷ 255
  $var_R = ($rgb[0] / 255);
  $var_G = ($rgb[1] / 255);
  $var_B = ($rgb[2] / 255);
 
  // Min. value of RGB
  $var_Min = min($var_R, $var_G, $var_B);
 
  // Max. value of RGB
  $var_Max = max($var_R, $var_G, $var_B);
 
  // Delta RGB value
  $del_Max = $var_Max - $var_Min;
 
  $V = $var_Max;
 
  // This is a gray, no chroma...
  if ( $del_Max == 0 ) {
  // HSV results = 0 ÷ 1
  $H = 0;
  $S = 0;
  } else {
  // Chromatic data...
  $S = $del_Max / $var_Max;
 
  $del_R = ((($var_Max - $var_R) / 6) + ($del_Max / 2)) / $del_Max;
  $del_G = ((($var_Max - $var_G) / 6) + ($del_Max / 2)) / $del_Max;
  $del_B = ((($var_Max - $var_B) / 6) + ($del_Max / 2)) / $del_Max;
 
  if ($var_R == $var_Max) {
  $H = $del_B - $del_G;
  } else if ($var_G == $var_Max) {
  $H = (1 / 3) + $del_R - $del_B;
  } else if ($var_B == $var_Max) {
  $H = (2 / 3) + $del_G - $del_R;
  }
 
  if ($H < 0) {
  $H += 1;
  }
  if ($H > 1) {
  $H -= 1;
  }
  }
 
  // Returns agnostic values.
  // Range will depend on the application: e.g. $H*360, $S*100, $V*100.
  return array($H, $S, $V);
  }
 
  /**
  *
  * Converts RGB to HSL.
  *
  * @param array $rgb RGB values: 0 => R, 1 => G, 2 => B
  *
  * @return array HSL values: 0 => H, 1 => S, 2 => L
  *
  */
  public function rgb2hsl($rgb)
  {
  // Where RGB values = 0 ÷ 255.
  $var_R = $rgb[0] / 255;
  $var_G = $rgb[1] / 255;
  $var_B = $rgb[2] / 255;
 
  // Min. value of RGB
  $var_Min = min($var_R, $var_G, $var_B);
  // Max. value of RGB
  $var_Max = max($var_R, $var_G, $var_B);
  // Delta RGB value
  $del_Max = $var_Max - $var_Min;
 
  $L = ($var_Max + $var_Min) / 2;
 
  if ( $del_Max == 0 ) {
  // This is a gray, no chroma...
  // HSL results = 0 ÷ 1
  $H = 0;
  $S = 0;
  } else {
  // Chromatic data...
  if ($L < 0.5) {
  $S = $del_Max / ($var_Max + $var_Min);
  } else {
  $S = $del_Max / ( 2 - $var_Max - $var_Min );
  }
 
  $del_R = ((($var_Max - $var_R) / 6) + ($del_Max / 2)) / $del_Max;
  $del_G = ((($var_Max - $var_G) / 6) + ($del_Max / 2)) / $del_Max;
  $del_B = ((($var_Max - $var_B) / 6) + ($del_Max / 2)) / $del_Max;
 
  if ($var_R == $var_Max) {
  $H = $del_B - $del_G;
  } else if ($var_G == $var_Max) {
  $H = ( 1 / 3 ) + $del_R - $del_B;
  } else if ($var_B == $var_Max) {
  $H = ( 2 / 3 ) + $del_G - $del_R;
  }
 
  if ($H < 0) {
  $H += 1;
  }