/shared/classes/class.charting.php
https://github.com/deltafactory/leads · PHP · 286 lines · 154 code · 27 blank · 105 comment · 21 complexity · 0c0ade5fc8c79f64e19a6f9db4005793 MD5 · raw file
- <?php
- /**
- * NOT currently in use but will be soon
- *
- * Graphs
- *
- * This class handles building pretty report graphs
- *
- */
- // Exit if accessed directly
- if ( ! defined( 'ABSPATH' ) ) exit;
- /**
- * Inbound Graph Class
- *
- * @since 1.9
- */
- if (!function_exists('Inbound_Graph')) {
- class Inbound_Graph {
- /**
- Simple example:
- data format for each point: array( location on x, location on y )
- // Example with options set to other than default:
- $data = array(
- 'Line Label' => array(
- array( 1, 5 ),
- array( 3, 8 ),
- array( 10, 2 )
- ),
- 'Second Line Label' => array(
- array( 1, 7 ),
- array( 4, 5 ),
- array( 12, 8 )
- )
- );
- $graph = new Inbound_Graph( $data );
- $graph->set( 'bgcolor' => '#000' );
- $graph->set( 'color' => '#fff' );
- $graph->display();
- */
- /**
- * Data to graph
- *
- * @var array
- * @since 1.9
- */
- private $data;
- /**
- * Unique ID for the graph
- *
- * @var string
- * @since 1.9
- */
- private $id = '';
- /**
- * Graph options
- *
- * @var array
- * @since 1.9
- */
- private $options = array();
- /**
- * Get things started
- *
- * @since 1.9
- */
- public function __construct( $_data ) {
- $this->data = $_data;
- // Generate unique ID
- $this->id = md5( rand() );
- // Setup default options;
- $this->options = array(
- 'y_mode' => null,
- 'x_mode' => null,
- 'y_decimals' => 0,
- 'x_decimals' => 0,
- 'y_position' => 'right',
- 'time_format' => '%d/%b',
- 'ticksize_unit' => 'day',
- 'ticksize_num' => 1,
- 'multiple_y_axes' => false,
- 'bgcolor' => '#f9f9f9',
- 'bordercolor' => '#ccc',
- 'color' => '#bbb',
- 'borderwidth' => 2,
- 'bars' => false,
- 'lines' => true,
- 'points' => true
- );
- }
- /**
- * Set an option
- *
- * @param $key The option key to set
- * @param $value The value to assign to the key
- * @since 1.9
- */
- public function set( $key, $value ) {
- $this->options[ $key ] = $value;
- }
- /**
- * Get an option
- *
- * @param $key The option key to get
- * @since 1.9
- */
- public function get( $key ) {
- return isset( $this->options[ $key ] ) ? $this->options[ $key ] : false;
- }
- /**
- * Get graph data
- *
- * @since 1.9
- */
- public function get_data() {
- return apply_filters( 'edd_get_graph_data', $this->data, $this );
- }
- /**
- * Load the graphing library script
- *
- * @since 1.9
- */
- public function load_scripts() {
- // Use minified libraries if SCRIPT_DEBUG is turned off
- $suffix = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
- wp_enqueue_script( 'jquery-flot', EDD_PLUGIN_URL . 'assets/js/jquery.flot' . $suffix . '.js' );
- }
- /**
- * Build the graph and return it as a string
- *
- * @var array
- * @since 1.9
- * @return string
- */
- public function build_graph() {
- $yaxis_count = 1;
- $this->load_scripts();
- ob_start();
- ?>
- <script type="text/javascript">
- jQuery( document ).ready( function($) {
- $.plot(
- $("#edd-graph-<?php echo $this->id; ?>"),
- [
- <?php foreach( $this->get_data() as $label => $data ) : ?>
- {
- label: "<?php echo esc_attr( $label ); ?>",
- id: "<?php echo sanitize_key( $label ); ?>",
- // data format is: [ point on x, value on y ]
- data: [<?php foreach( $data as $point ) { echo '[' . implode( ',', $point ) . '],'; } ?>],
- points: {
- show: <?php echo $this->options['points'] ? 'true' : 'false'; ?>,
- },
- bars: {
- show: <?php echo $this->options['bars'] ? 'true' : 'false'; ?>,
- barWidth: 12,
- aling: 'center'
- },
- lines: {
- show: <?php echo $this->options['lines'] ? 'true' : 'false'; ?>
- },
- <?php if( $this->options[ 'multiple_y_axes' ] ) : ?>
- yaxis: <?php echo $yaxis_count; ?>
- <?php endif; ?>
- },
- <?php $yaxis_count++; endforeach; ?>
- ],
- {
- // Options
- grid: {
- show: true,
- aboveData: false,
- color: "<?php echo $this->options[ 'color' ]; ?>",
- backgroundColor: "<?php echo $this->options[ 'bgcolor' ]; ?>",
- borderColor: "<?php echo $this->options[ 'bordercolor' ]; ?>",
- borderWidth: <?php echo absint( $this->options[ 'borderwidth' ] ); ?>,
- clickable: false,
- hoverable: true
- },
- xaxis: {
- mode: "<?php echo $this->options['x_mode']; ?>",
- timeFormat: "<?php echo $this->options['x_mode'] == 'time' ? $this->options['time_format'] : ''; ?>",
- tickSize: "<?php echo $this->options['x_mode'] == 'time' ? '' : 1; ?>",
- <?php if( $this->options['x_mode'] != 'time' ) : ?>
- tickDecimals: <?php echo $this->options['x_decimals']; ?>
- <?php endif; ?>
- },
- yaxis: {
- position: 'right',
- min: 0,
- mode: "<?php echo $this->options['y_mode']; ?>",
- timeFormat: "<?php echo $this->options['y_mode'] == 'time' ? $this->options['time_format'] : ''; ?>",
- <?php if( $this->options['y_mode'] != 'time' ) : ?>
- tickDecimals: <?php echo $this->options['y_decimals']; ?>
- <?php endif; ?>
- }
- }
- );
- function edd_flot_tooltip(x, y, contents) {
- $('<div id="edd-flot-tooltip">' + contents + '</div>').css( {
- position: 'absolute',
- display: 'none',
- top: y + 5,
- left: x + 5,
- border: '1px solid #fdd',
- padding: '2px',
- 'background-color': '#fee',
- opacity: 0.80
- }).appendTo("body").fadeIn(200);
- }
- var previousPoint = null;
- $("#edd-graph-<?php echo $this->id; ?>").bind("plothover", function (event, pos, item) {
- $("#x").text(pos.x.toFixed(2));
- $("#y").text(pos.y.toFixed(2));
- if (item) {
- if (previousPoint != item.dataIndex) {
- previousPoint = item.dataIndex;
- $("#edd-flot-tooltip").remove();
- var x = item.datapoint[0].toFixed(2),
- y = item.datapoint[1].toFixed(2);
- if( item.series.id == 'earnings' ) {
- if( edd_vars.currency_pos == 'before' ) {
- edd_flot_tooltip( item.pageX, item.pageY, item.series.label + ' ' + edd_vars.currency_sign + y );
- } else {
- edd_flot_tooltip( item.pageX, item.pageY, item.series.label + ' ' + y + edd_vars.currency_sign );
- }
- } else {
- edd_flot_tooltip( item.pageX, item.pageY, item.series.label + ' ' + y.replace( '.00', '' ) );
- }
- }
- } else {
- $("#edd-flot-tooltip").remove();
- previousPoint = null;
- }
- });
- });
- </script>
- <div id="edd-graph-<?php echo $this->id; ?>" style="height: 300px;"></div>
- <?php
- return ob_get_clean();
- }
- /**
- * Output the final graph
- *
- * @since 1.9
- */
- public function display() {
- do_action( 'edd_before_graph', $this );
- echo $this->build_graph();
- do_action( 'edd_after_graph', $this );
- }
- }
- }