Permalink
Browse files

New total customers chart for the admin dashboard

  • Loading branch information...
1 parent f7f7cce commit e77a3d44b45ec94a856ac1918196f6117af68b3d @haraldpdl haraldpdl committed Sep 9, 2010
@@ -0,0 +1,16 @@
+<?php
+/*
+ $Id$
+
+ osCommerce, Open Source E-Commerce Solutions
+ http://www.oscommerce.com
+
+ Copyright (c) 2010 osCommerce
+
+ Released under the GNU General Public License
+*/
+
+define('MODULE_ADMIN_DASHBOARD_TOTAL_CUSTOMERS_TITLE', 'Total Customers Chart (last 30 days)');
+define('MODULE_ADMIN_DASHBOARD_TOTAL_CUSTOMERS_DESCRIPTION', 'Show the total customers chart of the last 30 days');
+define('MODULE_ADMIN_DASHBOARD_TOTAL_CUSTOMERS_CHART_LINK', 'Total Customers');
+?>
@@ -0,0 +1,147 @@
+<?php
+/*
+ $Id$
+
+ osCommerce, Open Source E-Commerce Solutions
+ http://www.oscommerce.com
+
+ Copyright (c) 2010 osCommerce
+
+ Released under the GNU General Public License
+*/
+
+ class d_total_customers {
+ var $code = 'd_total_customers';
+ var $title;
+ var $description;
+ var $sort_order;
+ var $enabled = false;
+
+ function d_total_customers() {
+ $this->title = MODULE_ADMIN_DASHBOARD_TOTAL_CUSTOMERS_TITLE;
+ $this->description = MODULE_ADMIN_DASHBOARD_TOTAL_CUSTOMERS_DESCRIPTION;
+
+ if ( defined('MODULE_ADMIN_DASHBOARD_TOTAL_CUSTOMERS_STATUS') ) {
+ $this->sort_order = MODULE_ADMIN_DASHBOARD_TOTAL_CUSTOMERS_SORT_ORDER;
+ $this->enabled = (MODULE_ADMIN_DASHBOARD_TOTAL_CUSTOMERS_STATUS == 'True');
+ }
+ }
+
+ function getOutput() {
+ $days = array();
+ for($i = 0; $i < 30; $i++) {
+ $days[date('Y-m-d', strtotime('-'. $i .' days'))] = 0;
+ }
+
+ $orders_query = tep_db_query("select date_format(customers_info_date_account_created, '%Y-%m-%d') as dateday, count(*) as total from " . TABLE_CUSTOMERS_INFO . " where date_sub(curdate(), interval 30 day) <= customers_info_date_account_created group by dateday");
+ while ($orders = tep_db_fetch_array($orders_query)) {
+ $days[$orders['dateday']] = $orders['total'];
+ }
+
+ $days = array_reverse($days, true);
+
+ $js_array = '';
+ foreach ($days as $date => $total) {
+ $js_array .= '[' . (mktime(0, 0, 0, substr($date, 5, 2), substr($date, 8, 2), substr($date, 0, 4))*1000) . ', ' . $total . '],';
+ }
+
+ if (!empty($js_array)) {
+ $js_array = substr($js_array, 0, -1);
+ }
+
+ $chart_label = tep_output_string(MODULE_ADMIN_DASHBOARD_TOTAL_CUSTOMERS_CHART_LINK);
+ $chart_label_link = tep_href_link(FILENAME_CUSTOMERS);
+
+ $output = <<<EOD
+<div id="d_total_customers" style="width: 100%; height: 150px;"></div>
+<script language="javascript" type="text/javascript">
+$(function () {
+ var plot30 = [$js_array];
+ $.plot($('#d_total_customers'), [ {
+ label: '$chart_label',
+ data: plot30,
+ lines: { show: true, fill: true },
+ points: { show: true },
+ color: '#FF9966'
+ }], {
+ xaxis: {
+ ticks: 4,
+ mode: 'time'
+ },
+ yaxis: {
+ ticks: 3,
+ min: 0
+ },
+ grid: {
+ backgroundColor: { colors: ['#fff', '#eee'] },
+ hoverable: true
+ },
+ legend: {
+ labelFormatter: function(label, series) {
+ return '<a href="$chart_label_link">' + label + '</a>';
+ }
+ }
+ });
+});
+
+function showTooltip(x, y, contents) {
+ $('<div id="tooltip">' + contents + '</div>').css( {
+ position: 'absolute',
+ display: 'none',
+ top: y + 5,
+ left: x + 5,
+ border: '1px solid #fdd',
+ padding: '2px',
+ backgroundColor: '#fee',
+ opacity: 0.80
+ }).appendTo('body').fadeIn(200);
+}
+
+var monthNames = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ];
+
+var previousPoint = null;
+$('#d_total_customers').bind('plothover', function (event, pos, item) {
+ if (item) {
+ if (previousPoint != item.datapoint) {
+ previousPoint = item.datapoint;
+
+ $('#tooltip').remove();
+ var x = item.datapoint[0],
+ y = item.datapoint[1],
+ xdate = new Date(x);
+
+ showTooltip(item.pageX, item.pageY, y + ' for ' + monthNames[xdate.getMonth()] + '-' + xdate.getDate());
+ }
+ } else {
+ $('#tooltip').remove();
+ previousPoint = null;
+ }
+});
+</script>
+EOD;
+
+ return $output;
+ }
+
+ function isEnabled() {
+ return $this->enabled;
+ }
+
+ function check() {
+ return defined('MODULE_ADMIN_DASHBOARD_TOTAL_CUSTOMERS_STATUS');
+ }
+
+ function install() {
+ tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Enable Total Customers Module', 'MODULE_ADMIN_DASHBOARD_TOTAL_CUSTOMERS_STATUS', 'True', 'Do you want to show the total customers chart on the dashboard?', '6', '1', 'tep_cfg_select_option(array(\'True\', \'False\'), ', now())");
+ tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Sort Order', 'MODULE_ADMIN_DASHBOARD_TOTAL_CUSTOMERS_SORT_ORDER', '0', 'Sort order of display. Lowest is displayed first.', '6', '0', now())");
+ }
+
+ function remove() {
+ tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
+ }
+
+ function keys() {
+ return array('MODULE_ADMIN_DASHBOARD_TOTAL_CUSTOMERS_STATUS', 'MODULE_ADMIN_DASHBOARD_TOTAL_CUSTOMERS_SORT_ORDER');
+ }
+ }
+?>

0 comments on commit e77a3d4

Please sign in to comment.