/[drupal]/contributions/modules/counter/counter.module
ViewVC logotype

Contents of /contributions/modules/counter/counter.module

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.23 - (show annotations) (download) (as text)
Mon Oct 26 04:58:57 2009 UTC (4 weeks, 5 days ago) by thenicespider
Branch: MAIN
CVS Tags: DRUPAL-6--2-2, DRUPAL-6--2-3, HEAD
Changes since 1.22: +59 -8 lines
File MIME type: text/x-php
6.x-2.2: New: Show Block/Unblock Users
         New: Redesign "Counter Settings" page
         New: Variable to show how many items per page on Counter Report
         Bug fix: Error on Counter Report when i18n module enable
1 <?php
2 // $Id: counter.module,v 1.22 2009/09/25 22:37:20 thenicespider Exp $
3
4 /**
5 * @file
6 * The counter module used for displaying Site Counter.
7 */
8
9 /**
10 * Implementation of hook_help().
11 */
12 function counter_help($section) {
13 switch ($section) {
14 case 'admin/help#Counter':
15 $output = "The counter module used for displaying Site Counter.";
16 return $output;
17 case 'admin/modules#description':
18 return 'The counter module used for displaying Site Counter';
19 }
20 }
21
22 /**
23 * Implementation of hook_perm
24 */
25 function counter_perm() {
26 return array('access counter', 'administer counter');
27 }
28
29 /**
30 * Menu callback. Prints a listing of active nodes on the site.
31 */
32
33 function counter_menu() {
34 $items = array();
35
36 $items['admin/settings/counter'] = array(
37 'title' => 'Counter settings',
38 'description' => 'Show Site Counter, Client IP, and Unique Visitor.',
39 'access arguments' => array('administer counter'),
40 'page callback' => 'drupal_get_form',
41 'page arguments' => array('counter_admin_settings'),
42 'type' => MENU_NORMAL_ITEM,
43 'file' => 'counter.settings.inc',
44 );
45
46 $items['admin/settings/counter/settings'] = array(
47 'title' => 'Basic Settings',
48 'access arguments' => array('administer whizzywig'),
49 'weight' => -10,
50 'type' => MENU_DEFAULT_LOCAL_TASK,
51 'file' => 'counter.settings.inc',
52 );
53
54 $items['admin/settings/counter/advanced'] = array(
55 'title' => 'Advanced',
56 'access arguments' => array('administer counter'),
57 'page callback' => 'drupal_get_form',
58 'page arguments' => array('counter_settings_advanced'),
59 'type' => MENU_LOCAL_TASK,
60 'file' => 'counter.settings.inc',
61 );
62
63 $items['admin/settings/counter/initial'] = array(
64 'title' => 'Initial Value',
65 'access arguments' => array('administer counter'),
66 'page callback' => 'drupal_get_form',
67 'page arguments' => array('counter_settings_initial'),
68 'type' => MENU_LOCAL_TASK,
69 'file' => 'counter.settings.inc',
70 );
71
72 $items['admin/settings/counter/report'] = array(
73 'title' => 'Report',
74 'access arguments' => array('administer counter'),
75 'page callback' => 'drupal_get_form',
76 'page arguments' => array('counter_settings_report'),
77 'type' => MENU_LOCAL_TASK,
78 'file' => 'counter.settings.inc',
79 );
80
81 $items['counter/report'] = array(
82 'title' => 'Counter Report',
83 'description' => 'View Counter Report',
84 'access arguments' => array('administer counter'),
85 'page callback' => 'counter_report',
86 'type' => MENU_NORMAL_ITEM,
87 'file' => 'counter.report.inc',
88 );
89
90 return $items;
91 }
92
93 /**
94 * Implementation of hook_block().
95 *
96 */
97 function counter_block($op = 'list', $delta = 0) {
98 if ($op == 'list')
99 {
100 $blocks[0]['info'] = 'Counter';
101 return $blocks;
102 }
103
104 if ($op == 'view')
105 {
106 global $db_url;
107 $counter_show_site_counter = variable_get('counter_show_site_counter',1);
108 $counter_show_unique_visitor = variable_get('counter_show_unique_visitor',1);
109 $counter_registered_user = variable_get('counter_registered_user',1);
110 $counter_unregistered_user = variable_get('counter_unregistered_user',1);
111 $counter_blocked_user = variable_get('counter_blocked_user',1);
112 $counter_published_node = variable_get('counter_published_node',1);
113 $counter_unpublished_node = variable_get('counter_unpublished_node',1);
114
115 $counter_show_server_ip = variable_get('counter_show_server_ip',1);
116 $counter_show_ip = variable_get('counter_show_ip',1);
117 $counter_show_counter_since = variable_get('counter_show_counter_since',1);
118
119 $counter_show_administer_only = variable_get('counter_show_administer_only',0);
120 $counter_skip_admin = variable_get('counter_skip_admin',0);
121 $counter_refresh_delay = variable_get('counter_refresh_delay', 10);
122 $counter_insert_delay = variable_get('counter_insert_delay',1);
123
124 $counter_initial_counter = variable_get('counter_initial_counter', 0);
125 $counter_initial_unique_visitor = variable_get('counter_initial_unique_visitor', 0);
126 $counter_initial_since = variable_get('counter_initial_since', '');
127
128 switch($delta) {
129 case 0:
130 $block['subject'] = 'Counter';
131
132 $counter_ip = $_SERVER['REMOTE_ADDR'];
133 $counter_svr_ip = $_SERVER['SERVER_ADDR'];
134 $counter_date = date('Y-m-d H:i:s');
135 $counter_page = check_plain(request_uri());
136
137 //counter_insert_delay
138
139 $db_types = $GLOBALS['db_type']; //substr($db_url,0, strpos($db_url,':'));
140
141 switch ($db_types) {
142 case 'mssql':
143 $sql = " SELECT TOP 1 counter_date FROM {counter} ORDER BY counter_date DESC";
144 break;
145 case 'oracle':
146 $sql = " SELECT counter_date FROM {counter} WHERE ROWNUM=1 ORDER BY counter_date DESC";
147 break;
148 default: //mysql, mysqli, pgsql
149 $sql = " SELECT counter_date FROM {counter} ORDER BY counter_date DESC LIMIT 1";
150 }
151
152 $results = db_query($sql);
153 $data = db_fetch_object($results);
154 $counter_lastdate = $data->counter_date;
155
156 //Check if permited to insert data
157
158 $interval = strtotime($counter_date) - strtotime($counter_lastdate);
159
160 $data_insert = ($interval >= $counter_insert_delay ? 1 : 0);
161 $data_update = ($interval >= $counter_refresh_delay ? 1 : 0);
162
163 if ($data_insert && !$counter_skip_admin) {
164 $sql = " INSERT INTO {counter} (counter_ip, counter_date, counter_page) VALUES ('%s', '%s', '%s') ";
165 $results = db_query($sql,$counter_ip,$counter_date,$counter_page);
166
167 $sql = " UPDATE {counter_data} SET counter_value = counter_value+1 WHERE counter_name='site_counter'";
168 $results = db_query($sql);
169 }
170
171 //Read counter_data
172 //published_node, registered_user, site_counter, unique_visitor, unpublished_node, unregistered_user
173 $sql = " SELECT * FROM {counter_data} ORDER BY counter_name";
174
175 $results = db_query($sql);
176 $i=0;
177 while ($data = db_fetch_object($results)) {
178 $i++;
179 $counter_name[$i] = $data->counter_name;
180 $counter_value[$i] = $data->counter_value;
181 }
182
183 //Write output
184 $output = '';
185 $output .= '<ul id="counter">';
186 if ($counter_show_site_counter) {
187 $output .= '<li>'.t('Site Counter: '). number_format($counter_initial_counter+$counter_value[4]).'</li>';
188 }
189
190 if ($counter_show_unique_visitor) {
191 if ($data_update) {
192 $sql = " SELECT count(*) as total FROM (SELECT counter_ip FROM {counter} GROUP BY counter_ip) c";
193 $results = db_query($sql);
194 $data = db_fetch_object($results);
195 $counter_unique = $data->total;
196
197 $sql = " UPDATE {counter_data} SET counter_value='%s' WHERE counter_name='unique_visitor' ";
198 $results = db_query($sql, $counter_unique);
199 } else {
200 $counter_unique = $counter_value[5];
201 }
202 $output .= '<li>'.t('Unique Visitor: '). number_format($counter_initial_unique_visitor+$counter_unique).'</li>';
203 }
204
205 if ($counter_registered_user) {
206 if ($data_update) {
207 $sql = " SELECT count(*) as total FROM {users} WHERE access<>0 and uid<>0";
208 $results = db_query($sql);
209 $data = db_fetch_object($results);
210 $total = $data->total;
211
212 $sql = " UPDATE {counter_data} SET counter_value='%s' WHERE counter_name='registered_user' ";
213 $results = db_query($sql, $total);
214 } else {
215 $total = $counter_value[3];
216 }
217 $output .= '<li>'.t('Registered Users: '). number_format($total).'</li>';
218 }
219
220 if ($counter_unregistered_user) {
221 if ($data_update) {
222 $sql = " SELECT count(*) as total FROM {users} WHERE access=0 and uid<>0";
223 $results = db_query($sql);
224 $data = db_fetch_object($results);
225 $total = $data->total;
226
227 $sql = " UPDATE {counter_data} SET counter_value='%s' WHERE counter_name='unregistered_user' ";
228 $results = db_query($sql, $total);
229 } else {
230 $total = $counter_value[7];
231 }
232 $output .= '<li>'.t('Unregistered Users: '). number_format($total).'</li>';
233 }
234
235 if ($counter_blocked_user) {
236 if ($data_update) {
237 $sql = " SELECT count(*) as total FROM {users} WHERE status=0 and uid<>0";
238 $results = db_query($sql);
239 $data = db_fetch_object($results);
240 $total = $data->total;
241
242 $sql = " UPDATE {counter_data} SET counter_value='%s' WHERE counter_name='blocked_user' ";
243 // $results = db_query($sql, $total);
244 } else {
245 $total = $counter_value[1];
246 }
247 $output .= '<li>'.t('Blocked Users: '). number_format($total).'</li>';
248 }
249
250 if ($counter_published_node) {
251 if ($data_update) {
252 $sql = " SELECT count(*) as total FROM {node} WHERE status=1";
253 $results = db_query($sql);
254 $data = db_fetch_object($results);
255 $total = $data->total;
256
257 $sql = " UPDATE {counter_data} SET counter_value='%s' WHERE counter_name='published_node' ";
258 $results = db_query($sql, $total);
259 } else {
260 $total = $counter_value[2];
261 }
262 $output .= '<li>'.t('Published Nodes: '). number_format($total).'</li>';
263 }
264
265 if ($counter_unpublished_node) {
266 if ($data_update) {
267 $sql = " SELECT count(*) as total FROM {node} WHERE status=0";
268 $results = db_query($sql);
269 $data = db_fetch_object($results);
270 $total = $data->total;
271
272 $sql = " UPDATE {counter_data} SET counter_value='%s' WHERE counter_name='unpublished_node' ";
273 $results = db_query($sql, $total);
274 } else {
275 $total = $counter_value[6];
276 }
277 $output .= '<li>'.t('Unpublished Nodes: '). number_format($total).'</li>';
278 }
279
280 if ($counter_show_server_ip) {
281 $output .= '<li>'.t("Server IP: ").$counter_svr_ip.'</li>';
282 }
283
284 if ($counter_show_ip) {
285 $output .= '<li>'.t("Your IP: ").$counter_ip.'</li>';
286 }
287
288 if ($counter_show_counter_since) {
289 switch ($db_types) {
290 case 'mssql':
291 $sql = " SELECT TOP 1 counter_date FROM {counter} ORDER BY counter_date ASC";
292 break;
293 case 'oracle':
294 $sql = " SELECT counter_date FROM {counter} WHERE ROWNUM=1 ORDER BY counter_date ASC";
295 break;
296 default: //mysql, mysqli, pgsql
297 $sql = " SELECT counter_date FROM {counter} ORDER BY counter_date ASC LIMIT 1";
298 }
299
300 $results = db_query($sql);
301 $data = db_fetch_object($results);
302 $counter_since = $data->counter_date;
303
304 if ($counter_initial_since=="") {
305 $output .= '<li>'.t("Since: "). $counter_since.'</li>';
306 } else {
307 $output .= '<li>'.t("Since: "). $counter_initial_since.'</li>';
308 }
309
310 }
311
312 $output .= '</ul>';
313 $block['content'] = $output;
314
315 break;
316 }
317
318 if ($counter_show_administer_only && !user_access('administer counter')) {
319 return;
320 } else {
321 return $block;
322 }
323 }
324 }
325
326
327
328 ?>

  ViewVC Help
Powered by ViewVC 1.1.2