diff --git a/oss/piwik/trunk/libs/open-flash-chart/README.txt b/oss/piwik/trunk/libs/open-flash-chart/README.txt new file mode 100644 index 00000000..aadc31f9 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/README.txt @@ -0,0 +1,8 @@ +Hello. + +This is the Open Flash Chart source code. + +Take a look around :-) + +The test data is in the 'data-files' directory. + diff --git a/oss/piwik/trunk/libs/open-flash-chart/open-flash-chart.swf b/oss/piwik/trunk/libs/open-flash-chart/open-flash-chart.swf new file mode 100644 index 00000000..3a01e52a Binary files /dev/null and b/oss/piwik/trunk/libs/open-flash-chart/open-flash-chart.swf differ diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/JSON.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/JSON.php new file mode 100644 index 00000000..0cddbddb --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/JSON.php @@ -0,0 +1,806 @@ + + * @author Matt Knapp + * @author Brett Stimmerman + * @copyright 2005 Michal Migurski + * @version CVS: $Id: JSON.php,v 1.31 2006/06/28 05:54:17 migurski Exp $ + * @license http://www.opensource.org/licenses/bsd-license.php + * @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198 + */ + +/** + * Marker constant for Services_JSON::decode(), used to flag stack state + */ +define('SERVICES_JSON_SLICE', 1); + +/** + * Marker constant for Services_JSON::decode(), used to flag stack state + */ +define('SERVICES_JSON_IN_STR', 2); + +/** + * Marker constant for Services_JSON::decode(), used to flag stack state + */ +define('SERVICES_JSON_IN_ARR', 3); + +/** + * Marker constant for Services_JSON::decode(), used to flag stack state + */ +define('SERVICES_JSON_IN_OBJ', 4); + +/** + * Marker constant for Services_JSON::decode(), used to flag stack state + */ +define('SERVICES_JSON_IN_CMT', 5); + +/** + * Behavior switch for Services_JSON::decode() + */ +define('SERVICES_JSON_LOOSE_TYPE', 16); + +/** + * Behavior switch for Services_JSON::decode() + */ +define('SERVICES_JSON_SUPPRESS_ERRORS', 32); + +/** + * Converts to and from JSON format. + * + * Brief example of use: + * + * + * // create a new instance of Services_JSON + * $json = new Services_JSON(); + * + * // convert a complexe value to JSON notation, and send it to the browser + * $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4))); + * $output = $json->encode($value); + * + * print($output); + * // prints: ["foo","bar",[1,2,"baz"],[3,[4]]] + * + * // accept incoming POST data, assumed to be in JSON notation + * $input = file_get_contents('php://input', 1000000); + * $value = $json->decode($input); + * + */ +class Services_JSON +{ + /** + * constructs a new JSON instance + * + * @param int $use object behavior flags; combine with boolean-OR + * + * possible values: + * - SERVICES_JSON_LOOSE_TYPE: loose typing. + * "{...}" syntax creates associative arrays + * instead of objects in decode(). + * - SERVICES_JSON_SUPPRESS_ERRORS: error suppression. + * Values which can't be encoded (e.g. resources) + * appear as NULL instead of throwing errors. + * By default, a deeply-nested resource will + * bubble up with an error, so all return values + * from encode() should be checked with isError() + */ + function Services_JSON($use = 0) + { + $this->use = $use; + } + + /** + * convert a string from one UTF-16 char to one UTF-8 char + * + * Normally should be handled by mb_convert_encoding, but + * provides a slower PHP-only method for installations + * that lack the multibye string extension. + * + * @param string $utf16 UTF-16 character + * @return string UTF-8 character + * @access private + */ + function utf162utf8($utf16) + { + // oh please oh please oh please oh please oh please + if(function_exists('mb_convert_encoding')) { + return mb_convert_encoding($utf16, 'UTF-8', 'UTF-16'); + } + + $bytes = (ord($utf16{0}) << 8) | ord($utf16{1}); + + switch(true) { + case ((0x7F & $bytes) == $bytes): + // this case should never be reached, because we are in ASCII range + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr(0x7F & $bytes); + + case (0x07FF & $bytes) == $bytes: + // return a 2-byte UTF-8 character + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr(0xC0 | (($bytes >> 6) & 0x1F)) + . chr(0x80 | ($bytes & 0x3F)); + + case (0xFFFF & $bytes) == $bytes: + // return a 3-byte UTF-8 character + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr(0xE0 | (($bytes >> 12) & 0x0F)) + . chr(0x80 | (($bytes >> 6) & 0x3F)) + . chr(0x80 | ($bytes & 0x3F)); + } + + // ignoring UTF-32 for now, sorry + return ''; + } + + /** + * convert a string from one UTF-8 char to one UTF-16 char + * + * Normally should be handled by mb_convert_encoding, but + * provides a slower PHP-only method for installations + * that lack the multibye string extension. + * + * @param string $utf8 UTF-8 character + * @return string UTF-16 character + * @access private + */ + function utf82utf16($utf8) + { + // oh please oh please oh please oh please oh please + if(function_exists('mb_convert_encoding')) { + return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8'); + } + + switch(strlen($utf8)) { + case 1: + // this case should never be reached, because we are in ASCII range + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return $utf8; + + case 2: + // return a UTF-16 character from a 2-byte UTF-8 char + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr(0x07 & (ord($utf8{0}) >> 2)) + . chr((0xC0 & (ord($utf8{0}) << 6)) + | (0x3F & ord($utf8{1}))); + + case 3: + // return a UTF-16 character from a 3-byte UTF-8 char + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr((0xF0 & (ord($utf8{0}) << 4)) + | (0x0F & (ord($utf8{1}) >> 2))) + . chr((0xC0 & (ord($utf8{1}) << 6)) + | (0x7F & ord($utf8{2}))); + } + + // ignoring UTF-32 for now, sorry + return ''; + } + + /** + * encodes an arbitrary variable into JSON format + * + * @param mixed $var any number, boolean, string, array, or object to be encoded. + * see argument 1 to Services_JSON() above for array-parsing behavior. + * if var is a strng, note that encode() always expects it + * to be in ASCII or UTF-8 format! + * + * @return mixed JSON string representation of input var or an error if a problem occurs + * @access public + */ + function encode($var) + { + switch (gettype($var)) { + case 'boolean': + return $var ? 'true' : 'false'; + + case 'NULL': + return 'null'; + + case 'integer': + return (int) $var; + + case 'double': + case 'float': + return (float) $var; + + case 'string': + // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT + $ascii = ''; + $strlen_var = strlen($var); + + /* + * Iterate over every character in the string, + * escaping with a slash or encoding to UTF-8 where necessary + */ + for ($c = 0; $c < $strlen_var; ++$c) { + + $ord_var_c = ord($var{$c}); + + switch (true) { + case $ord_var_c == 0x08: + $ascii .= '\b'; + break; + case $ord_var_c == 0x09: + $ascii .= '\t'; + break; + case $ord_var_c == 0x0A: + $ascii .= '\n'; + break; + case $ord_var_c == 0x0C: + $ascii .= '\f'; + break; + case $ord_var_c == 0x0D: + $ascii .= '\r'; + break; + + case $ord_var_c == 0x22: + case $ord_var_c == 0x2F: + case $ord_var_c == 0x5C: + // double quote, slash, slosh + $ascii .= '\\'.$var{$c}; + break; + + case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)): + // characters U-00000000 - U-0000007F (same as ASCII) + $ascii .= $var{$c}; + break; + + case (($ord_var_c & 0xE0) == 0xC0): + // characters U-00000080 - U-000007FF, mask 110XXXXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, ord($var{$c + 1})); + $c += 1; + $utf16 = $this->utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xF0) == 0xE0): + // characters U-00000800 - U-0000FFFF, mask 1110XXXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2})); + $c += 2; + $utf16 = $this->utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xF8) == 0xF0): + // characters U-00010000 - U-001FFFFF, mask 11110XXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2}), + ord($var{$c + 3})); + $c += 3; + $utf16 = $this->utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xFC) == 0xF8): + // characters U-00200000 - U-03FFFFFF, mask 111110XX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2}), + ord($var{$c + 3}), + ord($var{$c + 4})); + $c += 4; + $utf16 = $this->utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xFE) == 0xFC): + // characters U-04000000 - U-7FFFFFFF, mask 1111110X + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2}), + ord($var{$c + 3}), + ord($var{$c + 4}), + ord($var{$c + 5})); + $c += 5; + $utf16 = $this->utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + } + } + + return '"'.$ascii.'"'; + + case 'array': + /* + * As per JSON spec if any array key is not an integer + * we must treat the the whole array as an object. We + * also try to catch a sparsely populated associative + * array with numeric keys here because some JS engines + * will create an array with empty indexes up to + * max_index which can cause memory issues and because + * the keys, which may be relevant, will be remapped + * otherwise. + * + * As per the ECMA and JSON specification an object may + * have any string as a property. Unfortunately due to + * a hole in the ECMA specification if the key is a + * ECMA reserved word or starts with a digit the + * parameter is only accessible using ECMAScript's + * bracket notation. + */ + + // treat as a JSON object + if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) { + $properties = array_map(array($this, 'name_value'), + array_keys($var), + array_values($var)); + + foreach($properties as $property) { + if(Services_JSON::isError($property)) { + return $property; + } + } + + return '{' . join(',', $properties) . '}'; + } + + // treat it like a regular array + $elements = array_map(array($this, 'encode'), $var); + + foreach($elements as $element) { + if(Services_JSON::isError($element)) { + return $element; + } + } + + return '[' . join(',', $elements) . ']'; + + case 'object': + $vars = get_object_vars($var); + + $properties = array_map(array($this, 'name_value'), + array_keys($vars), + array_values($vars)); + + foreach($properties as $property) { + if(Services_JSON::isError($property)) { + return $property; + } + } + + return '{' . join(',', $properties) . '}'; + + default: + return ($this->use & SERVICES_JSON_SUPPRESS_ERRORS) + ? 'null' + : new Services_JSON_Error(gettype($var)." can not be encoded as JSON string"); + } + } + + /** + * array-walking function for use in generating JSON-formatted name-value pairs + * + * @param string $name name of key to use + * @param mixed $value reference to an array element to be encoded + * + * @return string JSON-formatted name-value pair, like '"name":value' + * @access private + */ + function name_value($name, $value) + { + $encoded_value = $this->encode($value); + + if(Services_JSON::isError($encoded_value)) { + return $encoded_value; + } + + return $this->encode(strval($name)) . ':' . $encoded_value; + } + + /** + * reduce a string by removing leading and trailing comments and whitespace + * + * @param $str string string value to strip of comments and whitespace + * + * @return string string value stripped of comments and whitespace + * @access private + */ + function reduce_string($str) + { + $str = preg_replace(array( + + // eliminate single line comments in '// ...' form + '#^\s*//(.+)$#m', + + // eliminate multi-line comments in '/* ... */' form, at start of string + '#^\s*/\*(.+)\*/#Us', + + // eliminate multi-line comments in '/* ... */' form, at end of string + '#/\*(.+)\*/\s*$#Us' + + ), '', $str); + + // eliminate extraneous space + return trim($str); + } + + /** + * decodes a JSON string into appropriate variable + * + * @param string $str JSON-formatted string + * + * @return mixed number, boolean, string, array, or object + * corresponding to given JSON input string. + * See argument 1 to Services_JSON() above for object-output behavior. + * Note that decode() always returns strings + * in ASCII or UTF-8 format! + * @access public + */ + function decode($str) + { + $str = $this->reduce_string($str); + + switch (strtolower($str)) { + case 'true': + return true; + + case 'false': + return false; + + case 'null': + return null; + + default: + $m = array(); + + if (is_numeric($str)) { + // Lookie-loo, it's a number + + // This would work on its own, but I'm trying to be + // good about returning integers where appropriate: + // return (float)$str; + + // Return float or int, as appropriate + return ((float)$str == (integer)$str) + ? (integer)$str + : (float)$str; + + } elseif (preg_match('/^("|\').*(\1)$/s', $str, $m) && $m[1] == $m[2]) { + // STRINGS RETURNED IN UTF-8 FORMAT + $delim = substr($str, 0, 1); + $chrs = substr($str, 1, -1); + $utf8 = ''; + $strlen_chrs = strlen($chrs); + + for ($c = 0; $c < $strlen_chrs; ++$c) { + + $substr_chrs_c_2 = substr($chrs, $c, 2); + $ord_chrs_c = ord($chrs{$c}); + + switch (true) { + case $substr_chrs_c_2 == '\b': + $utf8 .= chr(0x08); + ++$c; + break; + case $substr_chrs_c_2 == '\t': + $utf8 .= chr(0x09); + ++$c; + break; + case $substr_chrs_c_2 == '\n': + $utf8 .= chr(0x0A); + ++$c; + break; + case $substr_chrs_c_2 == '\f': + $utf8 .= chr(0x0C); + ++$c; + break; + case $substr_chrs_c_2 == '\r': + $utf8 .= chr(0x0D); + ++$c; + break; + + case $substr_chrs_c_2 == '\\"': + case $substr_chrs_c_2 == '\\\'': + case $substr_chrs_c_2 == '\\\\': + case $substr_chrs_c_2 == '\\/': + if (($delim == '"' && $substr_chrs_c_2 != '\\\'') || + ($delim == "'" && $substr_chrs_c_2 != '\\"')) { + $utf8 .= $chrs{++$c}; + } + break; + + case preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6)): + // single, escaped unicode character + $utf16 = chr(hexdec(substr($chrs, ($c + 2), 2))) + . chr(hexdec(substr($chrs, ($c + 4), 2))); + $utf8 .= $this->utf162utf8($utf16); + $c += 5; + break; + + case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F): + $utf8 .= $chrs{$c}; + break; + + case ($ord_chrs_c & 0xE0) == 0xC0: + // characters U-00000080 - U-000007FF, mask 110XXXXX + //see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= substr($chrs, $c, 2); + ++$c; + break; + + case ($ord_chrs_c & 0xF0) == 0xE0: + // characters U-00000800 - U-0000FFFF, mask 1110XXXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= substr($chrs, $c, 3); + $c += 2; + break; + + case ($ord_chrs_c & 0xF8) == 0xF0: + // characters U-00010000 - U-001FFFFF, mask 11110XXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= substr($chrs, $c, 4); + $c += 3; + break; + + case ($ord_chrs_c & 0xFC) == 0xF8: + // characters U-00200000 - U-03FFFFFF, mask 111110XX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= substr($chrs, $c, 5); + $c += 4; + break; + + case ($ord_chrs_c & 0xFE) == 0xFC: + // characters U-04000000 - U-7FFFFFFF, mask 1111110X + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= substr($chrs, $c, 6); + $c += 5; + break; + + } + + } + + return $utf8; + + } elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) { + // array, or object notation + + if ($str{0} == '[') { + $stk = array(SERVICES_JSON_IN_ARR); + $arr = array(); + } else { + if ($this->use & SERVICES_JSON_LOOSE_TYPE) { + $stk = array(SERVICES_JSON_IN_OBJ); + $obj = array(); + } else { + $stk = array(SERVICES_JSON_IN_OBJ); + $obj = new stdClass(); + } + } + + array_push($stk, array('what' => SERVICES_JSON_SLICE, + 'where' => 0, + 'delim' => false)); + + $chrs = substr($str, 1, -1); + $chrs = $this->reduce_string($chrs); + + if ($chrs == '') { + if (reset($stk) == SERVICES_JSON_IN_ARR) { + return $arr; + + } else { + return $obj; + + } + } + + //print("\nparsing {$chrs}\n"); + + $strlen_chrs = strlen($chrs); + + for ($c = 0; $c <= $strlen_chrs; ++$c) { + + $top = end($stk); + $substr_chrs_c_2 = substr($chrs, $c, 2); + + if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == SERVICES_JSON_SLICE))) { + // found a comma that is not inside a string, array, etc., + // OR we've reached the end of the character list + $slice = substr($chrs, $top['where'], ($c - $top['where'])); + array_push($stk, array('what' => SERVICES_JSON_SLICE, 'where' => ($c + 1), 'delim' => false)); + //print("Found split at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); + + if (reset($stk) == SERVICES_JSON_IN_ARR) { + // we are in an array, so just push an element onto the stack + array_push($arr, $this->decode($slice)); + + } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) { + // we are in an object, so figure + // out the property name and set an + // element in an associative array, + // for now + $parts = array(); + + if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) { + // "name":value pair + $key = $this->decode($parts[1]); + $val = $this->decode($parts[2]); + + if ($this->use & SERVICES_JSON_LOOSE_TYPE) { + $obj[$key] = $val; + } else { + $obj->$key = $val; + } + } elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) { + // name:value pair, where name is unquoted + $key = $parts[1]; + $val = $this->decode($parts[2]); + + if ($this->use & SERVICES_JSON_LOOSE_TYPE) { + $obj[$key] = $val; + } else { + $obj->$key = $val; + } + } + + } + + } elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && ($top['what'] != SERVICES_JSON_IN_STR)) { + // found a quote, and we are not inside a string + array_push($stk, array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c})); + //print("Found start of string at {$c}\n"); + + } elseif (($chrs{$c} == $top['delim']) && + ($top['what'] == SERVICES_JSON_IN_STR) && + ((strlen(substr($chrs, 0, $c)) - strlen(rtrim(substr($chrs, 0, $c), '\\'))) % 2 != 1)) { + // found a quote, we're in a string, and it's not escaped + // we know that it's not escaped becase there is _not_ an + // odd number of backslashes at the end of the string so far + array_pop($stk); + //print("Found end of string at {$c}: ".substr($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n"); + + } elseif (($chrs{$c} == '[') && + in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { + // found a left-bracket, and we are in an array, object, or slice + array_push($stk, array('what' => SERVICES_JSON_IN_ARR, 'where' => $c, 'delim' => false)); + //print("Found start of array at {$c}\n"); + + } elseif (($chrs{$c} == ']') && ($top['what'] == SERVICES_JSON_IN_ARR)) { + // found a right-bracket, and we're in an array + array_pop($stk); + //print("Found end of array at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); + + } elseif (($chrs{$c} == '{') && + in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { + // found a left-brace, and we are in an array, object, or slice + array_push($stk, array('what' => SERVICES_JSON_IN_OBJ, 'where' => $c, 'delim' => false)); + //print("Found start of object at {$c}\n"); + + } elseif (($chrs{$c} == '}') && ($top['what'] == SERVICES_JSON_IN_OBJ)) { + // found a right-brace, and we're in an object + array_pop($stk); + //print("Found end of object at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); + + } elseif (($substr_chrs_c_2 == '/*') && + in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { + // found a comment start, and we are in an array, object, or slice + array_push($stk, array('what' => SERVICES_JSON_IN_CMT, 'where' => $c, 'delim' => false)); + $c++; + //print("Found start of comment at {$c}\n"); + + } elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == SERVICES_JSON_IN_CMT)) { + // found a comment end, and we're in one now + array_pop($stk); + $c++; + + for ($i = $top['where']; $i <= $c; ++$i) + $chrs = substr_replace($chrs, ' ', $i, 1); + + //print("Found end of comment at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); + + } + + } + + if (reset($stk) == SERVICES_JSON_IN_ARR) { + return $arr; + + } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) { + return $obj; + + } + + } + } + } + + /** + * @todo Ultimately, this should just call PEAR::isError() + */ + function isError($data, $code = null) + { + if (class_exists('pear')) { + return PEAR::isError($data, $code); + } elseif (is_object($data) && (get_class($data) == 'services_json_error' || + is_subclass_of($data, 'services_json_error'))) { + return true; + } + + return false; + } +} + +if (class_exists('PEAR_Error')) { + + class Services_JSON_Error extends PEAR_Error + { + function Services_JSON_Error($message = 'unknown error', $code = null, + $mode = null, $options = null, $userinfo = null) + { + parent::PEAR_Error($message, $code, $mode, $options, $userinfo); + } + } + +} else { + + /** + * @todo Ultimately, this class shall be descended from PEAR_Error + */ + class Services_JSON_Error + { + function Services_JSON_Error($message = 'unknown error', $code = null, + $mode = null, $options = null, $userinfo = null) + { + + } + } + +} + +?> diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/README.txt b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/README.txt new file mode 100644 index 00000000..012fbfd5 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/README.txt @@ -0,0 +1,16 @@ +Open Flash Chart - PHP libraries. These help create data files for Open Flash Chart. +Copyright (C) 2007 + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA \ No newline at end of file diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/dot_base.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/dot_base.php new file mode 100644 index 00000000..5772efcd --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/dot_base.php @@ -0,0 +1,231 @@ +type = $type; + if( isset( $value ) ) + $this->value( $value ); + } + + /** + * For line charts that only require a Y position + * for each point. + * @param $value as integer, the Y position + */ + function value( $value ) + { + $this->value = $value; + } + + /** + * For scatter charts that require an X and Y position for + * each point. + * + * @param $x as integer + * @param $y as integer + */ + function position( $x, $y ) + { + $this->x = $x; + $this->y = $y; + } + + /** + * @param $colour is a string, HEX colour, e.g. '#FF0000' red + */ + function colour($colour) + { + $this->colour = $colour; + return $this; + } + + /** + * The tooltip for this dot. + */ + function tooltip( $tip ) + { + $this->tip = $tip; + return $this; + } + + /** + * @param $size is an integer. Size of the dot. + */ + function size($size) + { + $tmp = 'dot-size'; + $this->$tmp = $size; + return $this; + } + + /** + * a private method + */ + function type( $type ) + { + $this->type = $type; + return $this; + } + + /** + * @param $size is an integer. The size of the hollow 'halo' around the dot that masks the line. + */ + function halo_size( $size ) + { + $tmp = 'halo-size'; + $this->$tmp = $size; + return $this; + } + + /** + * @param $do as string. One of three options (examples): + * - "http://example.com" - browse to this URL + * - "https://example.com" - browse to this URL + * - "trace:message" - print this message in the FlashDevelop debug pane + * - all other strings will be called as Javascript functions, so a string "hello_world" + * will call the JS function "hello_world(index)". It passes in the index of the + * point. + */ + function on_click( $do ) + { + $tmp = 'on-click'; + $this->$tmp = $do; + } +} + +/** + * Draw a hollow dot + */ +class hollow_dot extends dot_base +{ + function hollow_dot($value=null) + { + parent::dot_base( 'hollow-dot', $value ); + } +} + +/** + * Draw a star + */ +class star extends dot_base +{ + /** + * The constructor, takes an optional $value + */ + function star($value=null) + { + parent::dot_base( 'star', $value ); + } + + /** + * @param $angle is an integer. + */ + function rotation($angle) + { + $this->rotation = $angle; + return $this; + } + + /** + * @param $is_hollow is a boolean. + */ + function hollow($is_hollow) + { + $this->hollow = $is_hollow; + } +} + +/** + * Draw a 'bow tie' shape. + */ +class bow extends dot_base +{ + /** + * The constructor, takes an optional $value + */ + function bow($value=null) + { + parent::dot_base( 'bow', $value ); + } + + /** + * Rotate the anchor object. + * @param $angle is an integer. + */ + function rotation($angle) + { + $this->rotation = $angle; + return $this; + } +} + +/** + * An n sided shape. + */ +class anchor extends dot_base +{ + /** + * The constructor, takes an optional $value + */ + function anchor($value=null) + { + parent::dot_base( 'anchor', $value ); + } + + /** + * Rotate the anchor object. + * @param $angle is an integer. + */ + function rotation($angle) + { + $this->rotation = $angle; + return $this; + } + + /** + * @param $sides is an integer. Number of sides this shape has. + */ + function sides($sides) + { + $this->sides = $sides; + return $this; + } +} + +/** + * A simple dot + */ +class dot extends dot_base +{ + /** + * The constructor, takes an optional $value + */ + function dot($value=null) + { + parent::dot_base( 'dot', $value ); + } +} + +/** + * A simple dot + */ +class solid_dot extends dot_base +{ + /** + * The constructor, takes an optional $value + */ + function solid_dot($value=null) + { + parent::dot_base( 'solid-dot', $value ); + } +} \ No newline at end of file diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/json_format.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/json_format.php new file mode 100644 index 00000000..b8e3de5c --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/json_format.php @@ -0,0 +1,86 @@ + 0 && $json[$c-1] != '\\') + { + $in_string = !$in_string; + } + default: + $new_json .= $char; + break; + } + } + + return $new_json; +} \ No newline at end of file diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_area_base.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_area_base.php new file mode 100644 index 00000000..a6e811fd --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_area_base.php @@ -0,0 +1,40 @@ +type = "area"; + } + + /** + * the fill colour + */ + function set_fill_colour( $colour ) + { + $this->fill = $colour; + } + + /** + * sugar: see set_fill_colour + */ + function fill_colour( $colour ) + { + $this->set_fill_colour( $colour ); + return $this; + } + + function set_fill_alpha( $alpha ) + { + $tmp = "fill-alpha"; + $this->$tmp = $alpha; + } + + function set_loop() + { + $this->loop = true; + } +} diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_area_hollow.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_area_hollow.php new file mode 100644 index 00000000..4293af0b --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_area_hollow.php @@ -0,0 +1,10 @@ +type = "area_hollow"; + parent::area_base(); + } +} diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_area_line.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_area_line.php new file mode 100644 index 00000000..5731391a --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_area_line.php @@ -0,0 +1,10 @@ +type = "area_line"; + parent::area_base(); + } +} diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_arrow.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_arrow.php new file mode 100644 index 00000000..3c2c6e9d --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_arrow.php @@ -0,0 +1,27 @@ +type = "arrow"; + $this->start = array("x"=>$x, "y"=>$y); + $this->end = array("x"=>$a, "y"=>$b); + $this->colour($colour); + $this->{"barb-length"} = $barb_length; + } + + function colour( $colour ) + { + $this->colour = $colour; + return $this; + } +} diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_bar.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_bar.php new file mode 100644 index 00000000..728420c5 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_bar.php @@ -0,0 +1,34 @@ +top = $top; + + if( isset( $bottom ) ) + $this->bottom = $bottom; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_tooltip( $tip ) + { + $this->tip = $tip; + } +} + +class bar extends bar_base +{ + function bar() + { + $this->type = "bar"; + parent::bar_base(); + } +} + diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_bar_3d.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_bar_3d.php new file mode 100644 index 00000000..9b7f6976 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_bar_3d.php @@ -0,0 +1,22 @@ +top = $top; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_tooltip( $tip ) + { + $this->tip = $tip; + } +} + diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_bar_base.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_bar_base.php new file mode 100644 index 00000000..c1303b86 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_bar_base.php @@ -0,0 +1,97 @@ +text = $text; + $tmp = 'font-size'; + $this->$tmp = $size; + } + + /** + * syntatical sugar. + */ + function key( $text, $size ) + { + $this->set_key( $text, $size ); + } + + /** + * @param $v as an array, a mix of: + * - a bar_value class. You can use this to customise the paramters of each bar. + * - integer. This is the Y position of the top of the bar. + */ + function set_values( $v ) + { + $this->values = $v; + } + + /** + * see set_values + */ + function append_value( $v ) + { + $this->values[] = $v; + } + + /** + * @param $colour as string, a HEX colour, e.g. '#ff0000' red + */ + function set_colour( $colour ) + { + $this->colour = $colour; + } + + /** + *syntatical sugar + */ + function colour( $colour ) + { + $this->set_colour( $colour ); + } + + /** + * @param $alpha as real number (range 0 to 1), e.g. 0.5 is half transparent + */ + function set_alpha( $alpha ) + { + $this->alpha = $alpha; + } + + /** + * @param $tip as string, the tip to show. May contain various magic variables. + */ + function set_tooltip( $tip ) + { + $this->tip = $tip; + } + + /** + *@param $on_show as line_on_show object + */ + function set_on_show($on_show) + { + $this->{'on-show'} = $on_show; + } + + function set_on_click( $text ) + { + $tmp = 'on-click'; + $this->$tmp = $text; + } + + function attach_to_right_y_axis() + { + $this->axis = 'right'; + } +} + diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_bar_filled.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_bar_filled.php new file mode 100644 index 00000000..2439bd21 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_bar_filled.php @@ -0,0 +1,39 @@ +$tmp = $outline_colour; + } +} + +class bar_filled extends bar_base +{ + function bar_filled( $colour=null, $outline_colour=null ) + { + $this->type = "bar_filled"; + parent::bar_base(); + + if( isset( $colour ) ) + $this->set_colour( $colour ); + + if( isset( $outline_colour ) ) + $this->set_outline_colour( $outline_colour ); + } + + function set_outline_colour( $outline_colour ) + { + $tmp = 'outline-colour'; + $this->$tmp = $outline_colour; + } +} + diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_bar_glass.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_bar_glass.php new file mode 100644 index 00000000..bc330d3c --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_bar_glass.php @@ -0,0 +1,131 @@ +type = $type; + $this->cascade = (float)$cascade; + $this->delay = (float)$delay; + } +} + +class bar_value +{ + /** + * @param $top as integer. The Y value of the top of the bar + * @param OPTIONAL $bottom as integer. The Y value of the bottom of the bar, defaults to Y min. + */ + function bar_value( $top, $bottom=null ) + { + $this->top = $top; + + if( isset( $bottom ) ) + $this->bottom = $bottom; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_tooltip( $tip ) + { + $this->tip = $tip; + } +} + +class bar extends bar_base +{ + function bar() + { + $this->type = "bar"; + parent::bar_base(); + } +} + +class bar_glass extends bar_base +{ + function bar_glass() + { + $this->type = "bar_glass"; + parent::bar_base(); + } +} + +class bar_cylinder extends bar_base +{ + function bar_cylinder() + { + $this->type = "bar_cylinder"; + parent::bar_base(); + } +} + +class bar_cylinder_outline extends bar_base +{ + function bar_cylinder_outline() + { + $this->type = "bar_cylinder_outline"; + parent::bar_base(); + } +} + +class bar_rounded_glass extends bar_base +{ + function bar_rounded_glass() + { + $this->type = "bar_round_glass"; + parent::bar_base(); + } +} + +class bar_round extends bar_base +{ + function bar_round() + { + $this->type = "bar_round"; + parent::bar_base(); + } +} + +class bar_dome extends bar_base +{ + function bar_dome() + { + $this->type = "bar_dome"; + parent::bar_base(); + } +} + +class bar_round3d extends bar_base +{ + function bar_round3d() + { + $this->type = "bar_round3d"; + parent::bar_base(); + } +} + +class bar_3d extends bar_base +{ + function bar_3d() + { + $this->type = "bar_3d"; + parent::bar_base(); + } +} diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_bar_sketch.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_bar_sketch.php new file mode 100644 index 00000000..2bad3a3b --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_bar_sketch.php @@ -0,0 +1,29 @@ +type = "bar_sketch"; + parent::bar_base(); + + $this->set_colour( $colour ); + $this->set_outline_colour( $outline_colour ); + $this->offset = $fun_factor; + } + + function set_outline_colour( $outline_colour ) + { + $tmp = 'outline-colour'; + $this->$tmp = $outline_colour; + } +} + diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_bar_stack.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_bar_stack.php new file mode 100644 index 00000000..59774099 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_bar_stack.php @@ -0,0 +1,55 @@ +type = "bar_stack"; + parent::bar_base(); + } + + function append_stack( $v ) + { + $this->append_value( $v ); + } + + // an array of HEX colours strings + // e.g. array( '#ff0000', '#00ff00' ); + function set_colours( $colours ) + { + $this->colours = $colours; + } + + // an array of bar_stack_value + function set_keys( $keys ) + { + $this->keys = $keys; + } +} + +class bar_stack_value +{ + function bar_stack_value( $val, $colour ) + { + $this->val = $val; + $this->colour = $colour; + } + + function set_tooltip( $tip ) + { + $this->tip = $tip; + } +} + +class bar_stack_key +{ + function bar_stack_key( $colour, $text, $font_size ) + { + $this->colour = $colour; + $this->text = $text; + $tmp = 'font-size'; + $this->$tmp = $font_size; + } +} diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_candle.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_candle.php new file mode 100644 index 00000000..7ed047f8 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_candle.php @@ -0,0 +1,41 @@ +high = $high; + $this->top = $open; + $this->bottom = $close; + $this->low = $low; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_tooltip( $tip ) + { + $this->tip = $tip; + } +} + +class candle extends bar_base +{ + function candle($colour, $negative_colour=null) + { + $this->type = "candle"; + parent::bar_base(); + + $this->set_colour( $colour ); + if(!is_null($negative_colour)) + $this->{'negative-colour'} = $negative_colour; + } +} + diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_hbar.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_hbar.php new file mode 100644 index 00000000..6f8c0e45 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_hbar.php @@ -0,0 +1,64 @@ +left = $left; + $this->right = $right; + } + else + $this->right = $left; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_tooltip( $tip ) + { + $this->tip = $tip; + } +} + +class hbar +{ + function hbar( $colour ) + { + $this->type = "hbar"; + $this->values = array(); + $this->set_colour( $colour ); + } + + function append_value( $v ) + { + $this->values[] = $v; + } + + function set_values( $v ) + { + foreach( $v as $val ) + $this->append_value( new hbar_value( $val ) ); + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_key( $text, $size ) + { + $this->text = $text; + $tmp = 'font-size'; + $this->$tmp = $size; + } + + function set_tooltip( $tip ) + { + $this->tip = $tip; + } +} + diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_line.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_line.php new file mode 100644 index 00000000..e635f2c0 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_line.php @@ -0,0 +1,157 @@ +type = $type; + $this->cascade = (float)$cascade; + $this->delay = (float)$delay; + } +} + +class line +{ + function line() + { + $this->type = "line"; + $this->values = array(); + } + + /** + * Set the default dot that all the real + * dots inherit their properties from. If you set the + * default dot to be red, all values in your chart that + * do not specify a colour will be red. Same for all the + * other attributes such as tooltip, on-click, size etc... + * + * @param $style as any class that inherits base_dot + */ + function set_default_dot_style( $style ) + { + $tmp = 'dot-style'; + $this->$tmp = $style; + } + + /** + * @param $v as array, can contain any combination of: + * - integer, Y position of the point + * - any class that inherits from dot_base + * - null + */ + function set_values( $v ) + { + $this->values = $v; + } + + /** + * Append a value to the line. + * + * @param mixed $v + */ + function append_value($v) + { + $this->values[] = $v; + } + + function set_width( $width ) + { + $this->width = $width; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + /** + * sytnatical sugar for set_colour + */ + function colour( $colour ) + { + $this->set_colour( $colour ); + return $this; + } + + function set_halo_size( $size ) + { + $tmp = 'halo-size'; + $this->$tmp = $size; + } + + function set_key( $text, $font_size ) + { + $this->text = $text; + $tmp = 'font-size'; + $this->$tmp = $font_size; + } + + function set_tooltip( $tip ) + { + $this->tip = $tip; + } + + /** + * @param $text as string. A javascript function name as a string. The chart will + * try to call this function, it will pass the chart id as the only parameter into + * this function. E.g: + * + */ + function set_on_click( $text ) + { + $tmp = 'on-click'; + $this->$tmp = $text; + } + + function loop() + { + $this->loop = true; + } + + function line_style( $s ) + { + $tmp = "line-style"; + $this->$tmp = $s; + } + + /** + * Sets the text for the line. + * + * @param string $text + */ + function set_text($text) + { + $this->text = $text; + } + + function attach_to_right_y_axis() + { + $this->axis = 'right'; + } + + /** + *@param $on_show as line_on_show object + */ + function set_on_show($on_show) + { + $this->{'on-show'} = $on_show; + } + + function on_show($on_show) + { + $this->set_on_show($on_show); + return $this; + } +} \ No newline at end of file diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_line_base.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_line_base.php new file mode 100644 index 00000000..fa45cbc8 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_line_base.php @@ -0,0 +1,92 @@ +type = "line"; + $this->text = "Page views"; + $tmp = 'font-size'; + $this->$tmp = 10; + + $this->values = array(); + } + + function set_values( $v ) + { + $this->values = $v; + } + + /** + * Append a value to the line. + * + * @param mixed $v + */ + function append_value($v) + { + $this->values[] = $v; + } + + function set_width( $width ) + { + $this->width = $width; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_dot_size( $size ) + { + $tmp = 'dot-size'; + $this->$tmp = $size; + } + + function set_halo_size( $size ) + { + $tmp = 'halo-size'; + $this->$tmp = $size; + } + + function set_key( $text, $font_size ) + { + $this->text = $text; + $tmp = 'font-size'; + $this->$tmp = $font_size; + } + + function set_tooltip( $tip ) + { + $this->tip = $tip; + } + + function set_on_click( $text ) + { + $tmp = 'on-click'; + $this->$tmp = $text; + } + + function loop() + { + $this->loop = true; + } + + function line_style( $s ) + { + $tmp = "line-style"; + $this->$tmp = $s; + } + + /** + * Sets the text for the line. + * + * @param string $text + */ + function set_text($text) + { + $this->text = $text; + } + + +} \ No newline at end of file diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_line_dot.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_line_dot.php new file mode 100644 index 00000000..14669117 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_line_dot.php @@ -0,0 +1,33 @@ +value = $value; + $this->colour = $colour; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_size( $size ) + { + $this->size = $size; + } + + function set_tooltip( $tip ) + { + $this->tip = $tip; + } +} + +class line_dot extends line_base +{ + function line_dot() + { + $this->type = "line_dot"; + } +} \ No newline at end of file diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_line_hollow.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_line_hollow.php new file mode 100644 index 00000000..512bb07d --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_line_hollow.php @@ -0,0 +1,9 @@ +type = "line_hollow"; + } +} \ No newline at end of file diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_line_style.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_line_style.php new file mode 100644 index 00000000..4f538cf9 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_line_style.php @@ -0,0 +1,11 @@ +style = "dash"; + $this->on = $on; + $this->off = $off; + } +} \ No newline at end of file diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_menu.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_menu.php new file mode 100644 index 00000000..0750a09c --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_menu.php @@ -0,0 +1,56 @@ +type = "text"; + $this->text = $text; + $tmp = 'javascript-function'; + $this->$tmp = $javascript_function_name; + } +} + +class ofc_menu_item_camera +{ + /** + * @param $text as string. The menu item text. + * @param $javascript_function_name as string. The javascript function name, the + * js function takes one parameter, the chart ID. So for example, our js function + * could look like this: + * + * function save_image( chart_id ) + * { + * alert( chart_id ); + * } + * + * to make a menu item call this: ofc_menu_item_camera('Save chart', 'save_image'); + */ + function ofc_menu_item_camera($text, $javascript_function_name) + { + $this->type = "camera-icon"; + $this->text = $text; + $tmp = 'javascript-function'; + $this->$tmp = $javascript_function_name; + } +} + +class ofc_menu +{ + function ofc_menu($colour, $outline_colour) + { + $this->colour = $colour; + $this->outline_colour = $outline_colour; + } + + function values($values) + { + $this->values = $values; + } +} \ No newline at end of file diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_pie.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_pie.php new file mode 100644 index 00000000..bf779c55 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_pie.php @@ -0,0 +1,257 @@ +value = $value; + $this->label = $label; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_label( $label, $label_colour, $font_size ) + { + $this->label = $label; + + $tmp = 'label-colour'; + $this->$tmp = $label_colour; + + $tmp = 'font-size'; + $this->$tmp = $font_size; + + } + + function set_tooltip( $tip ) + { + $this->tip = $tip; + } + + function on_click( $event ) + { + $tmp = 'on-click'; + $this->$tmp = $event; + } + + + /** + * An object that inherits from base_pie_animation + */ + function add_animation( $animation ) + { + if( !isset( $this->animate ) ) + $this->animate = array(); + + $this->animate[] = $animation; + + return $this; + } +} + +class base_pie_animation{} + +/** + * fade the pie slice from $alpha (pie set_alpha) to 100% opaque. + */ +class pie_fade extends base_pie_animation +{ + function pie_fade() + { + $this->type="fade"; + } +} + +/** + * Bounce the pie slice out a little + */ +class pie_bounce extends base_pie_animation +{ + /** + * @param $distance as integer, distance to bounce in pixels + */ + function pie_bounce( $distance ) + { + $this->type="bounce"; + $this->distance = $distance; + } +} + +/** + * Make a pie chart and fill it with pie slices + */ +class pie +{ + function pie() + { + $this->type = 'pie'; + } + + function set_colours( $colours ) + { + $this->colours = $colours; + } + + /** + * Sugar wrapped around set_colours + */ + function colours( $colours ) + { + $this->set_colours( $colours ); + return $this; + } + + /** + * @param $alpha as float (0-1) 0.75 = 3/4 visible + */ + function set_alpha( $alpha ) + { + $this->alpha = $alpha; + } + + /** + *sugar wrapped set_alpha + **/ + function alpha( $alpha ) + { + $this->set_alpha( $alpha ); + return $this; + } + + /** + * @param $v as array containing one of + * - null + * - real or integer number + * - a pie_value object + */ + function set_values( $v ) + { + $this->values = $v; + } + + /** + * sugar for set_values + */ + function values( $v ) + { + $this->set_values( $v ); + return $this; + } + + /** + * HACK to keep old code working. + */ + function set_animate( $bool ) + { + if( $bool ) + $this->add_animation( new pie_fade() ); + + } + + /** + * An object that inherits from base_pie_animation + */ + function add_animation( $animation ) + { + if( !isset( $this->animate ) ) + $this->animate = array(); + + $this->animate[] = $animation; + + return $this; + } + + /** + * @param $angle as real number + */ + function set_start_angle( $angle ) + { + $tmp = 'start-angle'; + $this->$tmp = $angle; + } + + /** + * sugar for set_start_angle + */ + function start_angle($angle) + { + $this->set_start_angle( $angle ); + return $this; + } + + /** + * @param $tip as string. The tooltip text. May contain magic varibles + */ + function set_tooltip( $tip ) + { + $this->tip = $tip; + } + + /** + * sugar for set_tooltip + */ + function tooltip( $tip ) + { + $this->set_tooltip( $tip ); + return $this; + } + + function set_gradient_fill() + { + $tmp = 'gradient-fill'; + $this->$tmp = true; + } + + function gradient_fill() + { + $this->set_gradient_fill(); + return $this; + } + + /** + * By default each label is the same colour as the slice, + * but you can ovveride that behaviour using this method. + * + * @param $label_colour as string HEX colour; + */ + function set_label_colour( $label_colour ) + { + $tmp = 'label-colour'; + $this->$tmp = $label_colour; + } + + function label_colour( $label_colour ) + { + $this->set_label_colour( $label_colour ); + return $this; + } + + /** + * Turn off the labels + */ + function set_no_labels() + { + $tmp = 'no-labels'; + $this->$tmp = true; + } + + function on_click( $event ) + { + $tmp = 'on-click'; + $this->$tmp = $event; + } + + /** + * Fix the radius of the pie chart. Take a look at the magic variable #radius# + * for helping figure out what radius to set it to. + * + * @param $radius as number + */ + function radius( $radius ) + { + $this->radius = $radius; + return $this; + } +} diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_radar_axis.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_radar_axis.php new file mode 100644 index 00000000..909c41af --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_radar_axis.php @@ -0,0 +1,47 @@ +set_max( $max ); + } + + function set_max( $max ) + { + $this->max = $max; + } + + function set_steps( $steps ) + { + $this->steps = $steps; + } + + function set_stroke( $s ) + { + $this->stroke = $s; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_grid_colour( $colour ) + { + $tmp = 'grid-colour'; + $this->$tmp = $colour; + } + + function set_labels( $labels ) + { + $this->labels = $labels; + } + + function set_spoke_labels( $labels ) + { + $tmp = 'spoke-labels'; + $this->$tmp = $labels; + } +} + diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_radar_axis_labels.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_radar_axis_labels.php new file mode 100644 index 00000000..22d485e4 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_radar_axis_labels.php @@ -0,0 +1,15 @@ +labels = $labels; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } +} \ No newline at end of file diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_radar_spoke_labels.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_radar_spoke_labels.php new file mode 100644 index 00000000..51ba25e9 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_radar_spoke_labels.php @@ -0,0 +1,15 @@ +labels = $labels; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } +} \ No newline at end of file diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_scatter.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_scatter.php new file mode 100644 index 00000000..7159a3a6 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_scatter.php @@ -0,0 +1,47 @@ +x = $x; + $this->y = $y; + + if( $dot_size > 0 ) + { + $tmp = 'dot-size'; + $this->$tmp = $dot_size; + } + } +} + +class scatter +{ + function scatter( $colour ) + { + $this->type = "scatter"; + $this->set_colour( $colour ); + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_default_dot_style( $style ) + { + $tmp = 'dot-style'; + $this->$tmp = $style; + } + + /** + * @param $v as array, can contain any combination of: + * - integer, Y position of the point + * - any class that inherits from scatter_value + * - null + */ + function set_values( $values ) + { + $this->values = $values; + } +} diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_scatter_line.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_scatter_line.php new file mode 100644 index 00000000..d667d7e8 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_scatter_line.php @@ -0,0 +1,49 @@ +type = "scatter_line"; + $this->set_colour( $colour ); + $this->set_width( $width ); + } + + function set_default_dot_style( $style ) + { + $tmp = 'dot-style'; + $this->$tmp = $style; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_width( $width ) + { + $this->width = $width; + } + + function set_values( $values ) + { + $this->values = $values; + } + + function set_step_horizontal() + { + $this->stepgraph = 'horizontal'; + } + + function set_step_vertical() + { + $this->stepgraph = 'vertical'; + } + + function set_key( $text, $font_size ) + { + $this->text = $text; + $tmp = 'font-size'; + $this->$tmp = $font_size; + } +} \ No newline at end of file diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_shape.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_shape.php new file mode 100644 index 00000000..0cfe39f9 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_shape.php @@ -0,0 +1,25 @@ +x = $x; + $this->y = $y; + } +} + +class shape +{ + function shape( $colour ) + { + $this->type = "shape"; + $this->colour = $colour; + $this->values = array(); + } + + function append_value( $p ) + { + $this->values[] = $p; + } +} \ No newline at end of file diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_sugar.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_sugar.php new file mode 100644 index 00000000..a9e85555 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_sugar.php @@ -0,0 +1,43 @@ +colour($colour)->size($size); + } +} + +class s_box extends anchor +{ + /** + * I use this wrapper for default dot types, + * it just makes the code easier to read. + */ + function s_box($colour, $size) + { + parent::anchor(); + $this->colour($colour)->size($size)->rotation(45)->sides(4); + } +} + +class s_hollow_dot extends hollow_dot +{ + /** + * I use this wrapper for default dot types, + * it just makes the code easier to read. + */ + function s_hollow_dot($colour, $size) + { + parent::hollow_dot(); + $this->colour($colour)->size($size); + } +} \ No newline at end of file diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_tags.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_tags.php new file mode 100644 index 00000000..7e7e2445 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_tags.php @@ -0,0 +1,133 @@ +type = "tags"; + $this->values = array(); + } + + function colour( $colour ) + { + $this->colour = $colour; + return $this; + } + + /** + *@param $font as string. e.g. "Verdana" + *@param $size as integer. Size in px + */ + function font($font, $size) + { + $this->font = $font; + $this->{'font-size'} = $size; + return $this; + } + + /** + *@param $x as integer. Size of x padding in px + *@param $y as integer. Size of y padding in px + */ + function padding($x, $y) + { + $this->{"pad-x"} = $x; + $this->{"pad-y"} = $y; + return $this; + } + + function rotate($angle) + { + $this->rotate($angle); + return $this; + } + + function align_x_center() + { + $this->{"align-x"} = "center"; + return $this; + } + + function align_x_left() + { + $this->{"align-x"} = "left"; + return $this; + } + + function align_x_right() + { + $this->{"align-x"} = "right"; + return $this; + } + + function align_y_above() + { + $this->{"align-y"} = "above"; + return $this; + } + + function align_y_below() + { + $this->{"align-y"} = "below"; + return $this; + } + + function align_y_center() + { + $this->{"align-y"} = "center"; + return $this; + } + + /** + * This can contain some HTML, e.g: + * - "More info" + * - "ofc" + */ + function text($text) + { + $this->text = $text; + return $this; + } + + /** + * This works, but to get the mouse pointer to change + * to a little hand you need to use "stuff"-- see text() + */ + function on_click($on_click) + { + $this->{'on-click'} = $on_click; + return $this; + } + + /** + *@param $bold boolean. + *@param $underline boolean. + *@param $border boolean. + *@prarm $alpha real (0 to 1.0) + */ + function style($bold, $underline, $border, $alpha ) + { + $this->bold = $bold; + $this->border = $underline; + $this->underline = $border; + $this->alpha = $alpha; + return $this; + } + + /** + *@param $tag as ofc_tag + */ + function append_tag($tag) + { + $this->values[] = $tag; + } +} + +class ofc_tag extends ofc_tags +{ + function ofc_tag($x, $y) + { + $this->x = $x; + $this->y = $y; + } +} \ No newline at end of file diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_title.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_title.php new file mode 100644 index 00000000..cda1de00 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_title.php @@ -0,0 +1,39 @@ +text = $text; + } + + /** + * A css string. Can optionally contain: + * - font-size + * - font-family + * - font-weight + * - color + * - background-color + * - text-align + * - margin + * - margin-left + * - margin-right + * - margin-top + * - margin-bottom + * - padding + * - padding-left + * - padding-right + * - padding-top + * - padding-bottom + * just like the css we use all the time :-) + */ + function set_style( $css ) + { + $this->style = $css; + //"{font-size: 20px; color:#0000ff; font-family: Verdana; text-align: center;}"; + } +} \ No newline at end of file diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_tooltip.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_tooltip.php new file mode 100644 index 00000000..21f8aa2e --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_tooltip.php @@ -0,0 +1,67 @@ +shadow = $shadow; + } + + /** + * @param $stroke as integer, border width in pixels (e.g. 5 ) + */ + function set_stroke( $stroke ) + { + $this->stroke = $stroke; + } + + /** + * @param $colour as string, HEX colour e.g. '#0000ff' + */ + function set_colour( $colour ) + { + $this->colour = $colour; + } + + /** + * @param $bg as string, HEX colour e.g. '#0000ff' + */ + function set_background_colour( $bg ) + { + $this->background = $bg; + } + + /** + * @param $style as string. A css style. + */ + function set_title_style( $style ) + { + $this->title = $style; + } + + /** + * @param $style as string. A css style. + */ + function set_body_style( $style ) + { + $this->body = $style; + } + + function set_proximity() + { + $this->mouse = 1; + } + + function set_hover() + { + $this->mouse = 2; + } +} + diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_x_axis.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_x_axis.php new file mode 100644 index 00000000..da1c7672 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_x_axis.php @@ -0,0 +1,140 @@ +stroke = $stroke; + } + + function stroke( $stroke ) + { + $this->set_stroke( $stroke ); + return $this; + } + + /** + *@param $colour as string HEX colour + *@param $grid_colour as string HEX colour + */ + function set_colours( $colour, $grid_colour ) + { + $this->set_colour( $colour ); + $this->set_grid_colour( $grid_colour ); + } + + /** + *@param $colour as string HEX colour + */ + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function colour( $colour ) + { + $this->set_colour($colour); + return $this; + } + + function set_tick_height( $height ) + { + $tmp = 'tick-height'; + $this->$tmp = $height; + } + + function tick_height( $height ) + { + $this->set_tick_height($height); + return $this; + } + + function set_grid_colour( $colour ) + { + $tmp = 'grid-colour'; + $this->$tmp = $colour; + } + + function grid_colour( $colour ) + { + $this->set_grid_colour($colour); + return $this; + } + + /** + * @param $o is a boolean. If true, the X axis start half a step in + * This defaults to True + */ + function set_offset( $o ) + { + $this->offset = $o?true:false; + } + + function offset( $o ) + { + $this->set_offset($o); + return $this; + } + + /** + * @param $steps as integer. Which grid lines and ticks are visible. + */ + function set_steps( $steps ) + { + $this->steps = $steps; + } + + function steps( $steps ) + { + $this->set_steps($steps); + return $this; + } + + /** + * @param $val as an integer, the height in pixels of the 3D bar. Mostly + * used for the 3D bar chart. + */ + function set_3d( $val ) + { + $tmp = '3d'; + $this->$tmp = $val; + } + + /** + * @param $x_axis_labels as an x_axis_labels object + * Use this to customize the labels (colour, font, etc...) + */ + function set_labels( $x_axis_labels ) + { + //$this->labels = $v; + $this->labels = $x_axis_labels; + } + + /** + * Sugar syntax: helper function to make the examples simpler. + * @param $a is an array of labels + */ + function set_labels_from_array( $a ) + { + $x_axis_labels = new x_axis_labels(); + $x_axis_labels->set_labels( $a ); + $this->labels = $x_axis_labels; + + if( isset( $this->steps ) ) + $x_axis_labels->set_steps( $this->steps ); + } + + /** + * min and max. + */ + function set_range( $min, $max ) + { + $this->min = $min; + $this->max = $max; + } +} \ No newline at end of file diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_x_axis_label.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_x_axis_label.php new file mode 100644 index 00000000..cf116f15 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_x_axis_label.php @@ -0,0 +1,45 @@ +set_text( $text ); + $this->set_colour( $colour ); + $this->set_size( $size ); + $this->set_rotate( $rotate ); + } + + function set_text( $text ) + { + $this->text = $text; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_size( $size ) + { + $this->size = $size; + } + + function set_rotate( $rotate ) + { + $this->rotate = $rotate; + } + + function set_vertical() + { + $this->rotate = "vertical"; + } + + function set_visible() + { + $this->visible = true; + } +} \ No newline at end of file diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_x_axis_labels.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_x_axis_labels.php new file mode 100644 index 00000000..af4540f9 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_x_axis_labels.php @@ -0,0 +1,69 @@ +steps = $steps; + } + + /** + * @param $steps as integer which labels are visible + */ + function visible_steps( $steps ) + { + $this->{"visible-steps"} = $steps; + return $this; + } + + /** + * + * @param $labels as an array of [x_axis_label or string] + */ + function set_labels( $labels ) + { + $this->labels = $labels; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + /** + * font size in pixels + */ + function set_size( $size ) + { + $this->size = $size; + } + + /** + * rotate labels + */ + function set_vertical() + { + $this->rotate = 270; + } + + /** + * @param @angle as real. The angle of the text. + */ + function rotate( $angle ) + { + $this->rotate = $angle; + } + + /** + * @param $text as string. Replace and magic variables with actual x axis position. + */ + function text( $text ) + { + $this->text = $text; + } +} \ No newline at end of file diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_x_legend.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_x_legend.php new file mode 100644 index 00000000..7a25af0c --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_x_legend.php @@ -0,0 +1,15 @@ +text = $text; + } + + function set_style( $css ) + { + $this->style = $css; + //"{font-size: 20px; color:#0000ff; font-family: Verdana; text-align: center;}"; + } +} \ No newline at end of file diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_y_axis.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_y_axis.php new file mode 100644 index 00000000..3846c928 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_y_axis.php @@ -0,0 +1,17 @@ +$tmp = $colour; + } + +} \ No newline at end of file diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_y_axis_base.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_y_axis_base.php new file mode 100644 index 00000000..8093a09e --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_y_axis_base.php @@ -0,0 +1,116 @@ +stroke = $s; + } + + /** + * @param $val as integer. The length of the ticks in pixels + */ + function set_tick_length( $val ) + { + $tmp = 'tick-length'; + $this->$tmp = $val; + } + + function set_colours( $colour, $grid_colour ) + { + $this->set_colour( $colour ); + $this->set_grid_colour( $grid_colour ); + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_grid_colour( $colour ) + { + $tmp = 'grid-colour'; + $this->$tmp = $colour; + } + + /** + * Set min and max values, also (optionally) set the steps value. + * You can reverse the chart by setting min larger than max, e.g. min = 10 + * and max = 0. + * + * @param $min as integer + * @param $max as integer + * @param $steps as integer. + */ + function set_range( $min, $max, $steps=1 ) + { + $this->min = $min; + $this->max = $max; + $this->set_steps( $steps ); + } + + /** + * Sugar for set_range + */ + function range( $min, $max, $steps=1 ) + { + $this->set_range( $min, $max, $steps ); + return $this; + } + + /** + * @param $off as Boolean. If true the Y axis is nudged up half a step. + */ + function set_offset( $off ) + { + $this->offset = $off?1:0; + } + + /** + * @param $y_axis_labels as an y_axis_labels object + * Use this to customize the labels (colour, font, etc...) + */ + function set_labels( $y_axis_labels ) + { + $this->labels = $y_axis_labels; + } + + /** + * Pass in some text for each label. This can contain magic variables "#val#" which + * will get replaced with the value for that Y axis label. Useful for: + * - "£#val#" + * - "#val#%" + * - "#val# million" + * + * @param $text as string. + */ + function set_label_text( $text ) + { + $tmp = new y_axis_labels(); + $tmp->set_text( $text ); + $this->labels = $tmp; + } + + /** + * @param $steps as integer. + * + * Only show every $steps label, e.g. every 10th + */ + function set_steps( $steps ) + { + $this->steps = $steps; + } + + /** + * Make the labels show vertical + */ + function set_vertical() + { + $this->rotate = "vertical"; + } +} \ No newline at end of file diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_y_axis_label.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_y_axis_label.php new file mode 100644 index 00000000..f2616f53 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_y_axis_label.php @@ -0,0 +1,38 @@ +y = $y; + $this->set_text( $text ); + } + + function set_text( $text ) + { + $this->text = $text; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + function set_size( $size ) + { + $this->size = $size; + } + + function set_rotate( $rotate ) + { + $this->rotate = $rotate; + } + + function set_vertical() + { + $this->rotate = "vertical"; + } +} \ No newline at end of file diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_y_axis_labels.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_y_axis_labels.php new file mode 100644 index 00000000..c0708ab2 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_y_axis_labels.php @@ -0,0 +1,57 @@ +steps = $steps; + } + + /** + * + * @param $labels as an array of [y_axis_label or string] + */ + function set_labels( $labels ) + { + $this->labels = $labels; + } + + function set_colour( $colour ) + { + $this->colour = $colour; + } + + /** + * font size in pixels + */ + function set_size( $size ) + { + $this->size = $size; + } + + /** + * rotate labels + */ + function set_vertical() + { + $this->rotate = 270; + } + + function rotate( $angle ) + { + $this->rotate = $angle; + } + + /** + * @param $text default text that all labels inherit + */ + function set_text( $text ) + { + $this->text = $text; + } +} \ No newline at end of file diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_y_axis_right.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_y_axis_right.php new file mode 100644 index 00000000..71f7c298 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/ofc_y_axis_right.php @@ -0,0 +1,6 @@ +text = $text; + } + + function set_style( $css ) + { + $this->style = $css; + //"{font-size: 20px; color:#0000ff; font-family: Verdana; text-align: center;}"; + } +} \ No newline at end of file diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/open-flash-chart-object.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/open-flash-chart-object.php new file mode 100644 index 00000000..6e1129f4 --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/open-flash-chart-object.php @@ -0,0 +1,109 @@ +'; + + if( !isset( $open_flash_chart_seqno ) ) + { + $open_flash_chart_seqno = 1; + $out[] = ''; + } + else + { + $open_flash_chart_seqno++; + $obj_id .= '_'. $open_flash_chart_seqno; + $div_name .= '_'. $open_flash_chart_seqno; + } + + if( $use_swfobject ) + { + // Using library for auto-enabling Flash object on IE, disabled-Javascript proof + $out[] = '
'; + $out[] = ''; + $out[] = ''; + } + + return implode("\n",$out); +} +?> \ No newline at end of file diff --git a/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/open-flash-chart.php b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/open-flash-chart.php new file mode 100644 index 00000000..9ba0db6d --- /dev/null +++ b/oss/piwik/trunk/libs/open-flash-chart/php-ofc-library/open-flash-chart.php @@ -0,0 +1,178 @@ +title = new title( "Many data lines" ); + $this->elements = array(); + } + + function set_title( $t ) + { + $this->title = $t; + } + + function set_x_axis( $x ) + { + $this->x_axis = $x; + } + + function set_y_axis( $y ) + { + $this->y_axis = $y; + } + + function add_y_axis( $y ) + { + $this->y_axis = $y; + } + + function set_y_axis_right( $y ) + { + $this->y_axis_right = $y; + } + + function add_element( $e ) + { + $this->elements[] = $e; + } + + function set_x_legend( $x ) + { + $this->x_legend = $x; + } + + function set_y_legend( $y ) + { + $this->y_legend = $y; + } + + function set_bg_colour( $colour ) + { + $this->bg_colour = $colour; + } + + function set_radar_axis( $radar ) + { + $this->radar_axis = $radar; + } + + function set_tooltip( $tooltip ) + { + $this->tooltip = $tooltip; + } + + /** + * This is a bit funky :( + * + * @param $num_decimals as integer. Truncate the decimals to $num_decimals, e.g. set it + * to 5 and 3.333333333 will display as 3.33333. 2.0 will display as 2 (or 2.00000 - see below) + * @param $is_fixed_num_decimals_forced as boolean. If true it will pad the decimals. + * @param $is_decimal_separator_comma as boolean + * @param $is_thousand_separator_disabled as boolean + * + * This needs a bit of love and attention + */ + function set_number_format($num_decimals, $is_fixed_num_decimals_forced, $is_decimal_separator_comma, $is_thousand_separator_disabled ) + { + $this->num_decimals = $num_decimals; + $this->is_fixed_num_decimals_forced = $is_fixed_num_decimals_forced; + $this->is_decimal_separator_comma = $is_decimal_separator_comma; + $this->is_thousand_separator_disabled = $is_thousand_separator_disabled; + } + + /** + * This is experimental and will change as we make it work + * + * @param $m as ofc_menu + */ + function set_menu($m) + { + $this->menu = $m; + } + + function toString() + { + if (function_exists('json_encode')) + { + return json_encode($this); + } + else + { + $json = new Services_JSON(); + return $json->encode( $this ); + } + } + + function toPrettyString() + { + return json_format( $this->toString() ); + } +} + + + +// +// there is no PHP end tag so we don't mess the headers up! +//