forked from wp-plugins/google-analyticator
-
Notifications
You must be signed in to change notification settings - Fork 1
/
google-analytics-stats-widget.php
254 lines (210 loc) · 12.2 KB
/
google-analytics-stats-widget.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
<?php
/**
* The Google Analytics Stats Widget
*
* Now using widget API available in WordPress 2.8
* @author Spiral Web Consulting
**/
class GoogleStatsWidget extends WP_Widget
{
function GoogleStatsWidget($shortcode = FALSE) {
$widget_ops = array('classname' => 'widget_google_stats', 'description' => __("Displays Stat Info From Google Analytics", 'google-analyticator') );
$control_ops = array('width' => 400, 'height' => 400);
//$this->WP_Widget('googlestats', __('Google Analytics Stats', 'google-analyticator'), $widget_ops, $control_ops);
parent::__construct('googlestats', __('Google Analytics Stats', 'google-analyticator'), $widget_ops, $control_ops);
if ($shortcode) {
$this->widget();
}
}
function widget($args = array(), $instance = array()) {
extract($args);
$title = apply_filters('widget_title', empty($instance['title']) ? '' : $instance['title']);
$acnt = false;
$timeFrame = empty($instance['timeFrame']) ? '1' : $instance['timeFrame'];
$pageBg = empty($instance['pageBg']) ? 'fff' : $instance['pageBg'];
$widgetBg = empty($instance['widgetBg']) ? '999' : $instance['widgetBg'];
$innerBg = empty($instance['innerBg']) ? 'fff' : $instance['innerBg'];
$font = empty($instance['font']) ? '333' : $instance['font'];
$line1 = empty($instance['line1']) ? 'Unique' : $instance['line1'];
$line2 = empty($instance['line2']) ? 'Visitors' : $instance['line2'];
# Before the widget
if (isset($before_widget)) {
echo $before_widget;
}
# The title
if ( $title )
echo $before_title . $title . $after_title;
# Make the stats chicklet
echo '<!-- Data gathered from last ' . number_format($timeFrame) . ' days using Google Analyticator -->';
$this->initiateBackground($pageBg, $font);
$this->beginWidget($font, $widgetBg);
$this->widgetInfo($this->getUniqueVisitors($acnt, $timeFrame), $line1, $line2, $innerBg, $font);
$this->endWidget();
# After the widget
if (isset($after_widget)) {
echo $after_widget;
}
}
function update($new_instance, $old_instance) {
$instance = $old_instance;
$instance['title'] = strip_tags(stripslashes($new_instance['title']));
$instance['account'] = strip_tags(stripslashes($new_instance['account']));
$instance['timeFrame'] = strip_tags(stripslashes($new_instance['timeFrame']));
$instance['pageBg'] = strip_tags(stripslashes($new_instance['pageBg']));
$instance['widgetBg'] = strip_tags(stripslashes($new_instance['widgetBg']));
$instance['innerBg'] = strip_tags(stripslashes($new_instance['innerBg']));
$instance['font'] = strip_tags(stripslashes($new_instance['font']));
$instance['line1'] = strip_tags(stripslashes($new_instance['line1']));
$instance['line2'] = strip_tags(stripslashes($new_instance['line2']));
return $instance;
}
function form($instance) {
//Defaults
$instance = wp_parse_args( (array) $instance, array('title'=>'', 'account'=>'', 'timeFrame'=>'1', 'pageBg'=>'fff', 'widgetBg'=>'999', 'innerBg'=>'fff', 'font'=>'333', 'line1'=>'Unique', 'line2'=>'Visitors') );
$title = htmlspecialchars($instance['title']);
$acnt = htmlspecialchars($instance['account']);
$timeFrame = htmlspecialchars($instance['timeFrame']);
$pageBg = htmlspecialchars($instance['pageBg']);
$widgetBg = htmlspecialchars($instance['widgetBg']);
$innerBg = htmlspecialchars($instance['innerBg']);
$font = htmlspecialchars($instance['font']);
$line1 = htmlspecialchars($instance['line1']);
$line2 = htmlspecialchars($instance['line2']);
$accounts = array();
# Get the current memory limit
$current_mem_limit = substr(ini_get('memory_limit'), 0, -1);
# Check if this limit is less than 96M, if so, increase it
if ( $current_mem_limit < 96 || $current_mem_limit == '' ) {
if ( function_exists('memory_get_usage') )
@ini_set('memory_limit', '96M');
}
# Get the class for interacting with the Google Analytics
require_once('class.analytics.stats.php');
# Create a new Gdata call
$stats = new GoogleAnalyticsStats();
# Check if Google sucessfully logged in
$login = $stats->checkLogin();
if( !$login )
return false;
# Get a list of accounts
//$accounts = $stats->getAnalyticsAccounts();
$accounts = $stats->getSingleProfile();
# Output the options
echo '<p style="text-align:right;"><label for="' . $this->get_field_name('title') . '">' . __('Title', 'google-analyticator') . ': <input style="width: 250px;" id="' . $this->get_field_id('title') . '" name="' . $this->get_field_name('title') . '" type="text" value="' . $title . '" /></label></p>';
# Time frame
echo '<p style="text-align:right;"><label for="' . $this->get_field_name('timeFrame') . '">' . __('Days of data to get', 'google-analyticator') . ': <input style="width: 150px;" id="' . $this->get_field_id('timeFrame') . '" name="' . $this->get_field_name('timeFrame') . '" type="text" value="' . $timeFrame . '" /></label></p>';
# Page background
echo '<p style="text-align:right;"><label for="' . $this->get_field_name('pageBg') . '">' . __('Page background', 'google-analyticator') . ': <input style="width: 150px;" id="' . $this->get_field_id('pageBg') . '" name="' . $this->get_field_name('pageBg') . '" type="text" value="' . $pageBg . '" /></label></p>';
# Widget background
echo '<p style="text-align:right;"><label for="' . $this->get_field_name('widgetBg') . '">' . __('Widget background', 'google-analyticator') . ': <input style="width: 150px;" id="' . $this->get_field_id('widgetBg') . '" name="' . $this->get_field_name('widgetBg') . '" type="text" value="' . $widgetBg . '" /></label></p>';
# Inner background
echo '<p style="text-align:right;"><label for="' . $this->get_field_name('innerBg') . '">' . __('Inner background', 'google-analyticator') . ': <input style="width: 150px;" id="' . $this->get_field_id('innerBg') . '" name="' . $this->get_field_name('innerBg') . '" type="text" value="' . $innerBg . '" /></label></p>';
# Font color
echo '<p style="text-align:right;"><label for="' . $this->get_field_name('font') . '">' . __('Font color', 'google-analyticator') . ': <input style="width: 150px;" id="' . $this->get_field_id('font') . '" name="' . $this->get_field_name('font') . '" type="text" value="' . $font . '" /></label></p>';
# Text line 1
echo '<p style="text-align:right;"><label for="' . $this->get_field_name('line1') . '">' . __('Line 1 text', 'google-analyticator') . ': <input style="width: 200px;" id="' . $this->get_field_id('line1') . '" name="' . $this->get_field_name('line1') . '" type="text" value="' . $line1 . '" /></label></p>';
# Text line 2
echo '<p style="text-align:right;"><label for="' . $this->get_field_name('line2') . '">' . __('Line 2 text', 'google-analyticator') . ': <input style="width: 200px;" id="' . $this->get_field_id('line2') . '" name="' . $this->get_field_name('line2') . '" type="text" value="' . $line2 . '" /></label></p>';
}
/**
* This function is used to display the background color behind the widget. This is necessary
* for the Google Analytics text to have the same background color as the page.
*
* @param $font_color - Hexadecimal value for the font color used within the Widget (does not effect "Powered By Google Analytics Text"). This effects border color as well.
* @param $page_background_color - Hexadecimal value for the page background color
* @return void
**/
function initiateBackground($page_background_color = 'FFF', $font_color = '000')
{
echo '<br />';
echo '<div style="background:#' . $page_background_color . ';font-size:12px;color:#' . $font_color . ';font-family:\'Lucida Grande\',Helvetica,Verdana,Sans-Serif;">';
}
/**
* This function starts the widget. The font color and widget background color are customizable.
*
* @param $font_color - Hexadecimal value for the font color used within the Widget (does not effect "Powered By Google Analytics Text"). This effects border color as well.
* @param $widget_background_color - Hexadecimal value for the widget background color.
* @return void
**/
function beginWidget($font_color = '000', $widget_background_color = 'FFF')
{
echo '<table style="width:auto!important;border-width:2px;border-color:#' . $font_color . ';border-style:solid;background:#' . $widget_background_color . ';margin-bottom:0;"><tr>';
}
/**
* This function encases the text that appears on the right hand side of the widget.
* Both lines of text are customizable by each individual user.
*
* It also displays the visitor count that was pulled from the user's Google Analytics account.
*
* @param $visitor_count - Number of unique visits to the site pulled from the user's Google Analytics account.
* @param $line_one - First line of text displayed on the right hand side of the widget.
* @param $line_two - Second line of text displayed on the right hand side of the widget.
* @param $inner_background_color - Hexadecimal value for the background color that surrounds the Visitor Count.
* @param $font_color - Hexadecimal value for the font color used within the Widget (does not effect "Powered By Google Analytics Text"). This effects border color as well
* @return void
**/
function widgetInfo($visitor_count, $line_one = 'Unique', $line_two = 'Visitors', $inner_background_color = 'FFF', $font_color = '000')
{
echo '<td style="width:auto!important;border-width:1px;border-color:#' . $font_color . ';border-style:solid;padding:0px 5px 0px 5px;text-align:right;background:#' . $inner_background_color . ';min-width:80px;*width:80px!important;vertical-align:middle;"><div style="min-width:80px;">'. $visitor_count . '</div></td>';
echo '<td style="width:auto!important;padding:0px 5px 0px 5px;text-align:center;font-size:11px;">' . $line_one . '<br />' . $line_two . '</td>';
}
/**
* The function is used strictly for visual appearance. It also displays the Google Analytics text.
*
* @return void
**/
function endWidget()
{
// This closes off the widget.
echo '</tr></table>';
// The following is used to displayed the "Powered By Google Anayltics" text.
if (get_option(key_ga_show_ad) == '1') {
echo '<div style="font-size:9px;color:#666666;margin-top:0px;font-family:Verdana;">Powered By <a href="https://wordpress.org/plugins/google-analyticator/" title="Google Analyticator for Wordpress" style="text-decoration:none;" target="_blank"><img src="' . plugins_url('/google-analyticator/ga_logo.png') . '" alt="Google Analytics" style="border:0px;position:relative;top:4px;" /></a></div></div>';
}
}
/**
* Grabs the cached value of the unique visits for the previous day
*
* @param account - the account to get the unique visitors from
* @param time - the amount of days to get
* @return void
**/
function getUniqueVisitors($account, $time = 1)
{
// IF we have a cached version, return that, if not, continue on.
if ( get_transient( 'google_stats_uniques' ) )
return get_transient( 'google_stats_uniques' );
# Get the class for interacting with the Google Analytics
require_once('class.analytics.stats.php');
# Create a new Gdata call
$stats = new GoogleAnalyticsStats();
# Check if Google sucessfully logged in
if ( ! $stats->checkLogin() )
return false;
$account = $stats->getSingleProfile();
$account = $account[0]['id'];
# Set the account to the one requested
$stats->setAccount($account);
# Get the latest stats
$before = date('Y-m-d', strtotime('-' . $time . ' days'));
$yesterday = date('Y-m-d', strtotime('-1 day'));
try{
$result = $stats->getMetrics('ga:visitors', $before, $yesterday);
}
catch(Exception $e){
print 'GA Widget - there was a service error ' . $e->getCode() . ':' . $e->getMessage();
}
$uniques = number_format($result->totalsForAllResults['ga:visitors']);
# Store the array
set_transient( 'google_stats_uniques', $uniques, 60*60*12 );
# Return the visits
return $uniques;
}
}// END class
/**
* Register Google Analytics Stat Widget.
*/
function GoogleStatsWidget_init() {
register_widget('GoogleStatsWidget');
}
add_action('widgets_init', 'GoogleStatsWidget_init');