Count per Day - Version 1.5

Version Description

Download this release

Release Info

Developer Tom Braider
Plugin Icon 128x128 Count per Day
Version 1.5
Comparing to
See all releases

Code changes from version 1.4 to 1.5

Files changed (6) hide show
  1. counter-options.php +5 -4
  2. counter.css +8 -11
  3. counter.php +165 -80
  4. readme.txt +27 -23
  5. screenshot-1.png +0 -0
  6. screenshot-2.png +0 -0
counter-options.php CHANGED
@@ -83,9 +83,9 @@ switch($mode) {
83
  <td><textarea name="cpd_bots" cols="50" rows="10"><?php echo get_option('cpd_bots'); ?></textarea></td>
84
  </tr>
85
  </table>
86
- <p>
87
  <input type="hidden" name="do" value="cpd_update" />
88
- <input type="submit" name="update" value="<?php _e('Update options', 'cpd') ?>" class="button" />
89
  </p>
90
  </form>
91
  </div>
@@ -100,7 +100,7 @@ switch($mode) {
100
  </p>
101
 
102
  <form method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
103
- <p>
104
  <input type="hidden" name="do" value="cpd_clean" />
105
  <input type="submit" name="clean" value="<?php _e('Clean the database', 'cpd') ?>" class="button" />
106
  </p>
@@ -113,6 +113,7 @@ switch($mode) {
113
  <div class="wrap" style="margin-top: 100px;">
114
  <h2>Count per Day - <?php _e('Uninstall', 'cpd') ?></h2>
115
  <p>
 
116
  <?php _e('If "Count per Day" only disabled the tables in the database will be preserved.', 'cpd') ?><br/>
117
  <?php _e('Here you can delete the tables and disable "Count per Day".', 'cpd') ?>
118
  </p>
@@ -123,7 +124,7 @@ switch($mode) {
123
  <?php _e('If "Count per Day" re-installed, the counter starts at 0.', 'cpd') ?>
124
  </p>
125
  <p>&nbsp;</p>
126
- <p style="text-align: center;">
127
  <input type="checkbox" name="uninstall_cpd_yes" value="yes" />&nbsp;<?php _e('Yes', 'cpd'); ?><br /><br />
128
  <input type="submit" name="do" value="<?php _e('UNINSTALL Count per Day', 'cpd') ?>" class="button" onclick="return confirm('<?php _e('You are sure to disable Count per Day and delete all data?', 'cpd') ?>')" />
129
  </p>
83
  <td><textarea name="cpd_bots" cols="50" rows="10"><?php echo get_option('cpd_bots'); ?></textarea></td>
84
  </tr>
85
  </table>
86
+ <p class="submit">
87
  <input type="hidden" name="do" value="cpd_update" />
88
+ <input type="submit" name="update" value="<?php _e('Update options', 'cpd') ?>" class="button-primary" />
89
  </p>
90
  </form>
91
  </div>
100
  </p>
101
 
102
  <form method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
103
+ <p class="submit">
104
  <input type="hidden" name="do" value="cpd_clean" />
105
  <input type="submit" name="clean" value="<?php _e('Clean the database', 'cpd') ?>" class="button" />
106
  </p>
113
  <div class="wrap" style="margin-top: 100px;">
114
  <h2>Count per Day - <?php _e('Uninstall', 'cpd') ?></h2>
115
  <p>
116
+ <b><?php _e('Since WP 2.7 you can delete the plugin directly after deactivation on the plugins page.', 'cpd') ?></b><br />
117
  <?php _e('If "Count per Day" only disabled the tables in the database will be preserved.', 'cpd') ?><br/>
118
  <?php _e('Here you can delete the tables and disable "Count per Day".', 'cpd') ?>
119
  </p>
124
  <?php _e('If "Count per Day" re-installed, the counter starts at 0.', 'cpd') ?>
125
  </p>
126
  <p>&nbsp;</p>
127
+ <p class="submit" style="text-align: center;">
128
  <input type="checkbox" name="uninstall_cpd_yes" value="yes" />&nbsp;<?php _e('Yes', 'cpd'); ?><br /><br />
129
  <input type="submit" name="do" value="<?php _e('UNINSTALL Count per Day', 'cpd') ?>" class="button" onclick="return confirm('<?php _e('You are sure to disable Count per Day and delete all data?', 'cpd') ?>')" />
130
  </p>
counter.css CHANGED
@@ -3,27 +3,24 @@
3
  }
4
 
5
  .cpd_table td {
6
- padding: 5px;
7
  vertical-align: top;
8
  }
9
 
10
- .cpd_table div {
11
- padding: 2px;
12
- border: 1px #ccc solid;
13
  }
14
 
15
- .cpd_table h3 {
16
- padding: 5px;
17
- margin-top: 0;
18
- background-color: #CFEBF7;
19
  }
20
 
21
- .cpd_table span {
22
- font-size: larger;
23
  color: #f00;
24
  }
25
 
26
  .cpd_table ul {
27
- padding-left: 10px;
28
  list-style: none;
29
  }
3
  }
4
 
5
  .cpd_table td {
6
+ padding-right: 10px;
7
  vertical-align: top;
8
  }
9
 
10
+ .cpd_table li {
11
+ color: #777;
 
12
  }
13
 
14
+ .cpd_table li b {
15
+ font-family: Georgia,"Times New Roman",Times,serif;
16
+ color: #2583ad;
17
+ font-size: 18px;
18
  }
19
 
20
+ .cpd_table li span {
 
21
  color: #f00;
22
  }
23
 
24
  .cpd_table ul {
 
25
  list-style: none;
26
  }
counter.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Count Per Day
4
  Plugin URI: http://www.tomsdimension.de/wp-plugins/count-per-day
5
  Description: Counter, shows reads per page; today, yesterday, last week, last months ... on dashboard.
6
- Version: 1.4
7
  License: GPL
8
  Author: Tom Braider
9
  Author URI: http://www.tomsdimension.de
@@ -29,7 +29,7 @@ function cpdShow( $before='', $after=' reads', $show = true, $count = true )
29
  {
30
  global $wpdb;
31
  $page = get_the_ID();
32
- // nur z�hlen wenn Parameter stimmt und Autocounter aus ist (doppelt muss nicht sein)
33
  if ( $count == true && get_option('cpd_autocount') == 0 )
34
  cpdCount();
35
  $visits = $wpdb->get_results("SELECT page FROM ".CPD_C_TABLE." WHERE page='$page';");
@@ -41,14 +41,14 @@ function cpdShow( $before='', $after=' reads', $show = true, $count = true )
41
  }
42
 
43
  /**
44
- * Seitenaufruf nur z�hlen, keine Anzeige
45
  */
46
  function cpdCount()
47
  {
48
  global $wpdb;
49
- cpdCreateTables(); // DB-Tabellen erstellen, falls sie noch nicht existieren
50
 
51
- // Post-ID finden
52
  if ( get_option('cpd_autocount') == 1 )
53
  {
54
  if (have_posts()) : while ( have_posts() && $page == 0 ) : the_post();
@@ -63,13 +63,13 @@ function cpdCount()
63
 
64
  $countUser = ( get_option('cpd_user') == 0 && is_user_logged_in() == true ) ? 0 : 1;
65
 
66
- // nur z�hlen wenn: kein Bot, PostID vorhanden, Anmeldung passt
67
  if ( cpdIsBot() == false && !empty($page) && $countUser == 1 )
68
  {
69
  $userip = $_SERVER['REMOTE_ADDR'];
70
  $client = $_SERVER['HTTP_USER_AGENT'];
71
  $date = date('ymd');
72
- // UserIP f�r merken
73
  $user_ip = $wpdb->get_results("SELECT * FROM ".CPD_C_TABLE." WHERE ip='$userip' AND date='$date' AND page='$page';");
74
  if ( count($user_ip) == 0 )
75
  $wpdb->query("INSERT INTO ".CPD_C_TABLE." (page, ip, client, date) VALUES ('"
@@ -85,13 +85,15 @@ function cpdCount()
85
  }
86
 
87
  /**
88
- * Bot oder Mensch?
89
- * @param string $client String der auf Bot getestet werden soll
 
90
  */
91
- function cpdIsBot( $client = '' )
92
  {
93
- // Strings die auf Suchmaschinen deuten
94
- $bots = explode( "\n", get_option('cpd_bots') );
 
95
  $isBot = false;
96
  foreach ( $bots as $bot )
97
  {
@@ -113,8 +115,9 @@ function cpdIsBot( $client = '' )
113
  return $isBot;
114
  }
115
 
 
116
  /**
117
- * Tabellen erstellen wenn nicht vorhanden
118
  */
119
  function cpdCreateTables() {
120
  require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
@@ -122,7 +125,7 @@ function cpdCreateTables() {
122
 
123
  if ( $wpdb->get_var( "SHOW TABLES LIKE '".CPD_C_TABLE."'" ) != CPD_C_TABLE )
124
  {
125
- // Counter-Tabelle existieren nicht - anlegen
126
  $sql ="CREATE TABLE IF NOT EXISTS `".CPD_C_TABLE."` (
127
  `id` int(10) NOT NULL auto_increment,
128
  `ip` varchar(15) NOT NULL,
@@ -137,7 +140,7 @@ function cpdCreateTables() {
137
 
138
  if ( $wpdb->get_var( "SHOW TABLES LIKE '".CPD_CO_TABLE."'" ) != CPD_CO_TABLE )
139
  {
140
- // CounterOnline-Tabelle existieren nicht - anlegen
141
  $sql ="CREATE TABLE IF NOT EXISTS `".CPD_CO_TABLE."` (
142
  `timestamp` int(15) NOT NULL default '0',
143
  `ip` varchar(15) NOT NULL default '',
@@ -155,46 +158,56 @@ function cpdCreateTables() {
155
  "suchen.de\nsuchbaer.de\nshelob\nsemager\nxenu\nsuch_de\nia_archiver\nMicrosoft URL Control\nnetluchs" );
156
  }
157
 
 
 
 
158
  /**
159
- * Statistikseite
160
  */
161
  function cpdDashbord()
162
  {
163
  ?>
164
  <div class="wrap">
165
  <h2>Count per Day - <?php _e('Statistics', 'cpd') ?></h2>
166
- <table class="cpd_table">
167
- <tr>
168
  <td>
169
- <div>
170
- <h3><?php _e('Reads at all', 'cpd') ?></h3>
171
- <ul>
172
- <li><?php _e('Reads at all', 'cpd') ?>: <span><?php cpdGetUserAll(); ?></span></li>
173
- <li><?php _e('Visitors currently online', 'cpd') ?>: <span><?php cpdGetUserOnline(); ?></span></li>
174
- <li><?php _e('Reads today', 'cpd') ?>: <b><?php cpdGetUserToday(); ?></b></li>
175
- <li><?php _e('Reads yesterday', 'cpd') ?>: <b><?php cpdGetUserYesterday(); ?></b></li>
176
- <li><?php _e('Reads last week', 'cpd') ?>: <b><?php cpdGetUserLastWeek(); ?></b></li>
177
- <li><?php _e('Counter starts at', 'cpd') ?>: <b><?php cpdGetFirstCount(); ?></b></li>
178
- <li>&Oslash; <?php _e('Reads per day', 'cpd') ?>: <b><?php cpdGetUserPerDay(); ?></b></li>
179
- </ul>
180
- </div>
 
 
181
  </td>
182
  <td>
183
- <div><h3><?php _e('Reads per month', 'cpd') ?></h3><?php cpdGetUserPerMonth(); ?></div>
 
 
 
184
  </td>
185
  <td>
186
- <div><h3><?php _e('Reads per post', 'cpd') ?></h3><?php cpdGetUserPerPost(50); ?></div>
 
 
 
187
  </td>
188
- </tr>
189
- </table>
190
  </div>
191
  <?php
192
  }
193
 
194
- // Statistik-Funktionen
195
 
196
  /**
197
- * zeigt momentane Besucher
198
  */
199
  function cpdGetUserOnline()
200
  {
@@ -204,7 +217,7 @@ function cpdGetUserOnline()
204
  }
205
 
206
  /**
207
- * zeigt gesamte Besucher
208
  */
209
  function cpdGetUserAll()
210
  {
@@ -214,7 +227,7 @@ function cpdGetUserAll()
214
  }
215
 
216
  /**
217
- * zeigt heutige Besucher
218
  */
219
  function cpdGetUserToday()
220
  {
@@ -225,7 +238,7 @@ function cpdGetUserToday()
225
  }
226
 
227
  /**
228
- * zeigt Besucher vom Vortag
229
  */
230
  function cpdGetUserYesterday()
231
  {
@@ -236,7 +249,7 @@ function cpdGetUserYesterday()
236
  }
237
 
238
  /**
239
- * zeigt Besucher der letzten Woche (7 Tage)
240
  */
241
  function cpdGetUserLastWeek()
242
  {
@@ -247,7 +260,7 @@ function cpdGetUserLastWeek()
247
  }
248
 
249
  /**
250
- * zeigt Besucher pro Monat
251
  */
252
  function cpdGetUserPerMonth()
253
  {
@@ -263,7 +276,7 @@ function cpdGetUserPerMonth()
263
  }
264
 
265
  /**
266
- * zeigt Besucher pro Artikel
267
  *
268
  * @param integer $limit Sql-Limit, 0 = kein Limit
269
  */
@@ -284,12 +297,12 @@ function cpdGetUserPerPost( $limit = 0 )
284
  $m = $wpdb->get_results($sql);
285
  echo '<ul>';
286
  foreach ( $m as $row )
287
- echo '<li><a href="'.get_bloginfo('wpurl').'?p='.$row->post_id.'">'.$row->post.'</a>: <b>'.$row->count.'</b></li>'."\n";
288
  echo '</ul>';
289
  }
290
 
291
  /**
292
- * zeigt Counterstart, erster Tag
293
  */
294
  function cpdGetFirstCount()
295
  {
@@ -301,7 +314,7 @@ function cpdGetFirstCount()
301
  }
302
 
303
  /**
304
- * zeigt Durchschnitt Besucher pro Tag
305
  */
306
  function cpdGetUserPerDay()
307
  {
@@ -313,7 +326,7 @@ function cpdGetUserPerDay()
313
  $max = strtotime( '20'.substr($row->max,0,2).'-'.substr($row->max,2,2).'-'.substr($row->max,4,2) );
314
  $tage = (($max - $min) / 86400 + 1);
315
  }
316
- $v = $wpdb->get_results("SELECT page FROM ".CPD_C_TABLE." GROUP BY ip, date;");
317
  $count = count($v) / $tage;
318
  if ( $count < 5 )
319
  echo number_format($count, 2);
@@ -322,19 +335,20 @@ function cpdGetUserPerDay()
322
  }
323
 
324
  /**
325
- * loescht alten Spam
326
  */
327
  function cpdCleanDB()
328
  {
329
  global $wpdb;
330
 
 
331
  $rows = 0;
332
- $v = $wpdb->get_results("SELECT * FROM ".CPD_C_TABLE.";");
333
  foreach ($v as $row)
334
  {
335
- if ( cpdIsBot($row->client) )
336
  {
337
- $wpdb->query("DELETE FROM ".CPD_C_TABLE." WHERE id = ".$row->id.";");
338
  $rows++;
339
  }
340
  }
@@ -342,30 +356,65 @@ function cpdCleanDB()
342
  }
343
 
344
  /**
345
- * f�gt Stylesheet in WP-Head ein
346
- *
347
  */
348
  function cpdAddCSS() {
349
- echo '<link type="text/css" rel="stylesheet" href="'.get_bloginfo('wpurl').'/'.PLUGINDIR.'/'.dirname(plugin_basename(__FILE__)).'/counter.css"></link>' . "\n";
 
 
350
  }
351
 
 
 
 
 
352
  /**
353
- * erstellt Men�eintr�ge
354
  * @param string $content WP-"Content"
355
  */
356
  function cpdMenu($content)
357
  {
358
- if (function_exists('add_options_page')) {
359
- add_options_page('CountPerDay', 'Count Per Day', 'manage_options', dirname(plugin_basename(__FILE__)).'/counter-options.php') ;
360
- // Dashboard Men�punkt
361
- add_submenu_page('index.php','CountPerDay','Count per Day',1,__FILE__,'cpdDashbord');
 
 
 
 
 
 
 
 
 
 
362
  }
363
  }
364
 
 
 
 
 
365
  /**
366
- * l�dt lokale Sprachdatei
367
  */
368
- function cpd_init_locale()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
369
  {
370
  $locale = get_locale();
371
  $mofile = dirname(__FILE__) . "/locale/".$locale.".mo";
@@ -373,25 +422,30 @@ function cpd_init_locale()
373
  load_plugin_textdomain('cpd', dirname(__FILE__));
374
  }
375
 
 
 
 
376
  /**
377
- * l�dt automatischen Counter
378
- * Zum reinen Z�hlen ist kein Eingriff ins Template mehr notwendig.
379
  */
380
- function cpd_autocount( )
381
  {
382
  if ( is_single() || is_page() )
383
  cpdCount();
384
  }
385
 
 
 
 
386
 
387
  /**
388
- * l�scht DB-Eintr�ge ab WP 2.7
389
  */
390
- function cpd_uninstall()
391
  {
392
  global $wpdb;
393
- $wpdb->query("DROP TABLE IF EXISTS ".CPD_C_TABLE.";");
394
- $wpdb->query("DROP TABLE IF EXISTS ".CPD_CO_TABLE.";");
395
  delete_option('cpd_cdb_version');
396
  delete_option('cpd_codb_version');
397
  delete_option('cpd_onlinetime');
@@ -400,21 +454,52 @@ function cpd_uninstall()
400
  delete_option('cpd_bots');
401
  }
402
 
403
- // Funktionen adden
404
- add_action('init', 'cpd_init_locale', 98);
405
- add_action('admin_menu', 'cpdMenu');
406
- register_activation_hook(__FILE__,'cpdCreateTables');
407
 
408
- // ab Version 2.7
409
- if ( function_exists('register_uninstall_hook') )
410
- register_uninstall_hook(__FILE__, 'cpd_uninstall');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
411
 
412
- // Stylesheet nur bei Statistik-Seite laden
413
- if ( eregi( "count-per-day", $_REQUEST['page']) )
414
- add_action( 'admin_head', 'cpdAddCSS', 100 );
415
 
416
- // Autocounter laden, wenn in Optionen angegeben
417
- if ( get_option('cpd_autocount') == 1 )
418
- add_action('wp', 'cpd_autocount');
 
 
 
 
 
 
 
 
419
 
420
  ?>
3
  Plugin Name: Count Per Day
4
  Plugin URI: http://www.tomsdimension.de/wp-plugins/count-per-day
5
  Description: Counter, shows reads per page; today, yesterday, last week, last months ... on dashboard.
6
+ Version: 1.5
7
  License: GPL
8
  Author: Tom Braider
9
  Author URI: http://www.tomsdimension.de
29
  {
30
  global $wpdb;
31
  $page = get_the_ID();
32
+ // only count once
33
  if ( $count == true && get_option('cpd_autocount') == 0 )
34
  cpdCount();
35
  $visits = $wpdb->get_results("SELECT page FROM ".CPD_C_TABLE." WHERE page='$page';");
41
  }
42
 
43
  /**
44
+ * shows visits (without counting)
45
  */
46
  function cpdCount()
47
  {
48
  global $wpdb;
49
+ cpdCreateTables(); // create tables if necessary
50
 
51
+ // find PostID
52
  if ( get_option('cpd_autocount') == 1 )
53
  {
54
  if (have_posts()) : while ( have_posts() && $page == 0 ) : the_post();
63
 
64
  $countUser = ( get_option('cpd_user') == 0 && is_user_logged_in() == true ) ? 0 : 1;
65
 
66
+ // only count if: non bot, PostID exists, Logon is ok
67
  if ( cpdIsBot() == false && !empty($page) && $countUser == 1 )
68
  {
69
  $userip = $_SERVER['REMOTE_ADDR'];
70
  $client = $_SERVER['HTTP_USER_AGENT'];
71
  $date = date('ymd');
72
+ // memorize UserIP
73
  $user_ip = $wpdb->get_results("SELECT * FROM ".CPD_C_TABLE." WHERE ip='$userip' AND date='$date' AND page='$page';");
74
  if ( count($user_ip) == 0 )
75
  $wpdb->query("INSERT INTO ".CPD_C_TABLE." (page, ip, client, date) VALUES ('"
85
  }
86
 
87
  /**
88
+ * bot or human?
89
+ * @param string $client USER_AGENT
90
+ * @param array $bots strings to check
91
  */
92
+ function cpdIsBot( $client = '', $bots = '' )
93
  {
94
+ if ( empty($bots) )
95
+ // load pattern
96
+ $bots = explode( "\n", get_option('cpd_bots') );
97
  $isBot = false;
98
  foreach ( $bots as $bot )
99
  {
115
  return $isBot;
116
  }
117
 
118
+
119
  /**
120
+ * create tables if not exists
121
  */
122
  function cpdCreateTables() {
123
  require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
125
 
126
  if ( $wpdb->get_var( "SHOW TABLES LIKE '".CPD_C_TABLE."'" ) != CPD_C_TABLE )
127
  {
128
+ // table "counter" is not exists
129
  $sql ="CREATE TABLE IF NOT EXISTS `".CPD_C_TABLE."` (
130
  `id` int(10) NOT NULL auto_increment,
131
  `ip` varchar(15) NOT NULL,
140
 
141
  if ( $wpdb->get_var( "SHOW TABLES LIKE '".CPD_CO_TABLE."'" ) != CPD_CO_TABLE )
142
  {
143
+ // table "counter-online" is not exists
144
  $sql ="CREATE TABLE IF NOT EXISTS `".CPD_CO_TABLE."` (
145
  `timestamp` int(15) NOT NULL default '0',
146
  `ip` varchar(15) NOT NULL default '',
158
  "suchen.de\nsuchbaer.de\nshelob\nsemager\nxenu\nsuch_de\nia_archiver\nMicrosoft URL Control\nnetluchs" );
159
  }
160
 
161
+ register_activation_hook(__FILE__,'cpdCreateTables');
162
+
163
+
164
  /**
165
+ * statistics page
166
  */
167
  function cpdDashbord()
168
  {
169
  ?>
170
  <div class="wrap">
171
  <h2>Count per Day - <?php _e('Statistics', 'cpd') ?></h2>
172
+ <table class="cpd_table"><tr>
 
173
  <td>
174
+ <table class="widefat">
175
+ <thead><tr><th><?php _e('Reads at all', 'cpd') ?></th></tr></thead>
176
+ <tbody><tr><td>
177
+ <ul>
178
+ <li><?php _e('Reads at all', 'cpd') ?>: <b><span><?php cpdGetUserAll(); ?></span></b></li>
179
+ <li><?php _e('Visitors currently online', 'cpd') ?>: <b><span><?php cpdGetUserOnline(); ?></span></b></li>
180
+ <li><?php _e('Reads today', 'cpd') ?>: <b><?php cpdGetUserToday(); ?></b></li>
181
+ <li><?php _e('Reads yesterday', 'cpd') ?>: <b><?php cpdGetUserYesterday(); ?></b></li>
182
+ <li><?php _e('Reads last week', 'cpd') ?>: <b><?php cpdGetUserLastWeek(); ?></b></li>
183
+ <li><?php _e('Counter starts at', 'cpd') ?>: <b><?php cpdGetFirstCount(); ?></b></li>
184
+ <li>&Oslash; <?php _e('Reads per day', 'cpd') ?>: <b><?php cpdGetUserPerDay(); ?></b></li>
185
+ </ul>
186
+ </td></tr></tbody>
187
+ </table>
188
  </td>
189
  <td>
190
+ <table class="widefat">
191
+ <thead><tr><th><?php _e('Reads per month', 'cpd') ?></th></tr></thead>
192
+ <tbody><tr><td><?php cpdGetUserPerMonth(); ?></td></tr></tbody>
193
+ </table>
194
  </td>
195
  <td>
196
+ <table class="widefat">
197
+ <thead><tr><th><?php _e('Reads per post', 'cpd') ?></th></tr></thead>
198
+ <tbody><tr><td><?php cpdGetUserPerPost(50); ?></td></tr></tbody>
199
+ </table>
200
  </td>
201
+ </tr></table>
202
+
203
  </div>
204
  <?php
205
  }
206
 
207
+ // statistic functions, you can use is in your template too
208
 
209
  /**
210
+ * shows current visitors
211
  */
212
  function cpdGetUserOnline()
213
  {
217
  }
218
 
219
  /**
220
+ * shows all visitors
221
  */
222
  function cpdGetUserAll()
223
  {
227
  }
228
 
229
  /**
230
+ * shows today visitors
231
  */
232
  function cpdGetUserToday()
233
  {
238
  }
239
 
240
  /**
241
+ * shows yesterday visitors
242
  */
243
  function cpdGetUserYesterday()
244
  {
249
  }
250
 
251
  /**
252
+ * shows last week visitors (last 7 days)
253
  */
254
  function cpdGetUserLastWeek()
255
  {
260
  }
261
 
262
  /**
263
+ * shows visitors per month
264
  */
265
  function cpdGetUserPerMonth()
266
  {
276
  }
277
 
278
  /**
279
+ * shows visitors per post
280
  *
281
  * @param integer $limit Sql-Limit, 0 = kein Limit
282
  */
297
  $m = $wpdb->get_results($sql);
298
  echo '<ul>';
299
  foreach ( $m as $row )
300
+ echo '<li><a href="'.get_bloginfo('url').'?p='.$row->post_id.'">'.$row->post.'</a>: <b>'.$row->count.'</b></li>'."\n";
301
  echo '</ul>';
302
  }
303
 
304
  /**
305
+ * shows counter start, first day
306
  */
307
  function cpdGetFirstCount()
308
  {
314
  }
315
 
316
  /**
317
+ * shows averaged visitors per day
318
  */
319
  function cpdGetUserPerDay()
320
  {
326
  $max = strtotime( '20'.substr($row->max,0,2).'-'.substr($row->max,2,2).'-'.substr($row->max,4,2) );
327
  $tage = (($max - $min) / 86400 + 1);
328
  }
329
+ $v = $wpdb->get_results('SELECT page FROM '.CPD_C_TABLE.' GROUP BY ip, date');
330
  $count = count($v) / $tage;
331
  if ( $count < 5 )
332
  echo number_format($count, 2);
335
  }
336
 
337
  /**
338
+ * deletes spam in table, if you add new bot pattern you can clean the db
339
  */
340
  function cpdCleanDB()
341
  {
342
  global $wpdb;
343
 
344
+ $bots = explode( "\n", get_option('cpd_bots') );
345
  $rows = 0;
346
+ $v = $wpdb->get_results('SELECT * FROM '.CPD_C_TABLE);
347
  foreach ($v as $row)
348
  {
349
+ if ( cpdIsBot($row->client, $bots) )
350
  {
351
+ $wpdb->query('DELETE FROM '.CPD_C_TABLE.' WHERE id = '.$row->id);
352
  $rows++;
353
  }
354
  }
356
  }
357
 
358
  /**
359
+ * adds stylesheet
 
360
  */
361
  function cpdAddCSS() {
362
+ $this_dir = get_bloginfo('wpurl').'/'.PLUGINDIR.'/'.dirname(plugin_basename(__FILE__));
363
+ wp_enqueue_style('cpd_css', $this_dir.'/counter.css', array());
364
+ wp_print_styles('cpd_css');
365
  }
366
 
367
+ // only on statistics page
368
+ if ( eregi( 'count-per-day', $_REQUEST['page']) )
369
+ add_action( 'admin_head', 'cpdAddCSS', 100 );
370
+
371
  /**
372
+ * adss menu
373
  * @param string $content WP-"Content"
374
  */
375
  function cpdMenu($content)
376
  {
377
+ global $wp_version;
378
+ if (function_exists('add_options_page'))
379
+ {
380
+ $menutitle = '';
381
+ if ( version_compare( $wp_version, '2.6.999', '>' ) )
382
+ $menutitle = '<img src="'.cpdGetResource('cpd_menu_2.gif').'" alt="" /> ';
383
+ $menutitle .= 'Count per Day';
384
+
385
+ add_options_page('CountPerDay', $menutitle, 'manage_options', dirname(plugin_basename(__FILE__)).'/counter-options.php') ;
386
+ add_submenu_page('index.php','CountPerDay',$menutitle,1,__FILE__,'cpdDashbord');
387
+
388
+ // $plugin = plugin_basename(__FILE__);
389
+ // add_filter( 'plugin_action_links_' . $plugin, 'cpd_plugin_actions' );
390
+
391
  }
392
  }
393
 
394
+ if ( is_admin() )
395
+ add_action('admin_menu', 'cpdMenu');
396
+
397
+
398
  /**
399
+ * adds an action link to the plugins page
400
  */
401
+ function cpdPluginActions($links, $file)
402
+ {
403
+ if( $file == plugin_basename(__FILE__) )
404
+ {
405
+ $link = '<a href="options-general.php?page='.dirname(plugin_basename(__FILE__)).'/counter-options.php">'.__('Settings').'</a>';
406
+ array_unshift( $links, $link );
407
+ }
408
+ return $links;
409
+ }
410
+
411
+ add_filter('plugin_action_links', 'cpdPluginActions', 10, 2);
412
+
413
+
414
+ /**
415
+ * adds locale support
416
+ */
417
+ function cpdInitLocale()
418
  {
419
  $locale = get_locale();
420
  $mofile = dirname(__FILE__) . "/locale/".$locale.".mo";
422
  load_plugin_textdomain('cpd', dirname(__FILE__));
423
  }
424
 
425
+ add_action('init', 'cpdInitLocale', 98);
426
+
427
+
428
  /**
429
+ * loads automatic counter
 
430
  */
431
+ function cpdAutocount( )
432
  {
433
  if ( is_single() || is_page() )
434
  cpdCount();
435
  }
436
 
437
+ if ( get_option('cpd_autocount') == 1 )
438
+ add_action('wp', 'cpdAutocount');
439
+
440
 
441
  /**
442
+ * uninstall functions, deletes tables and options
443
  */
444
+ function cpdUninstall()
445
  {
446
  global $wpdb;
447
+ $wpdb->query('DROP TABLE IF EXISTS '.CPD_C_TABLE);
448
+ $wpdb->query('DROP TABLE IF EXISTS '.CPD_CO_TABLE);
449
  delete_option('cpd_cdb_version');
450
  delete_option('cpd_codb_version');
451
  delete_option('cpd_onlinetime');
454
  delete_option('cpd_bots');
455
  }
456
 
 
 
 
 
457
 
458
+ /**
459
+ * defines base64 encoded image recources
460
+ */
461
+ if( isset($_GET['resource']) && !empty($_GET['resource'])) {
462
+ # base64 encoding
463
+ $resources = array(
464
+ 'cpd_menu.gif' =>
465
+ 'R0lGODlhDAAMAJECAHFxcUNDQ////wAAACH5BAEAAAIALAAAAA'.
466
+ 'AMAAwAAAIdjI4ppsqNngA0PYDwZDrjUEGLGJGHBKFNwLYuWwAA'.
467
+ 'Ow==',
468
+ 'cpd_menu_2.gif' =>
469
+ 'R0lGODlhDAAMAJECAP8AAAAAAP///wAAACH5BAEAAAIALAAAAA'.
470
+ 'AMAAwAAAIdjI4ppsqNngA0PYDwZDrjUEGLGJGHBKFNwLYuWwAA'.
471
+ 'Ow==');
472
+
473
+ if(array_key_exists($_GET['resource'], $resources)) {
474
+
475
+ $content = base64_decode($resources[ $_GET['resource'] ]);
476
+
477
+ $lastMod = filemtime(__FILE__);
478
+ $client = ( isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : false );
479
+ if (isset($client) && (strtotime($client) == $lastMod)) {
480
+ header('Last-Modified: '.gmdate('D, d M Y H:i:s', $lastMod).' GMT', true, 304);
481
+ exit;
482
+ } else {
483
+ header('Last-Modified: '.gmdate('D, d M Y H:i:s', $lastMod).' GMT', true, 200);
484
+ header('Content-Length: '.strlen($content));
485
+ header('Content-Type: image/' . substr(strrchr($_GET['resource'], '.'), 1) );
486
+ echo $content;
487
+ exit;
488
+ }
489
+ }
490
+ }
491
 
 
 
 
492
 
493
+ /**
494
+ * gets image recource with given name
495
+ */
496
+ function cpdGetResource( $resourceID ) {
497
+ return trailingslashit( get_bloginfo('url') ) . '?resource=' . $resourceID;
498
+ }
499
+
500
+ // since WP 2.7
501
+ if ( function_exists('register_uninstall_hook') )
502
+ register_uninstall_hook(__FILE__, 'cpdUninstall');
503
+
504
 
505
  ?>
readme.txt CHANGED
@@ -2,9 +2,9 @@
2
  Contributors: Tom Braider
3
  Donate link: http://www.unicef.org
4
  Tags: counter, count, posts, visits, reads
5
- Requires at least: 2.0
6
- Tested up to: 2.7b1
7
- Stable tag: 1.4
8
 
9
  Visit Counter, shows reads per page, visitors today, yesterday, last week, last months and other statistics.
10
 
@@ -14,6 +14,7 @@ Visit Counter, shows reads per page, visitors today, yesterday, last week, last
14
  * shows reads per page
15
  * shows visitors today, yesterday, last week, last months and other statistics on dashboard
16
  * you can show these statistics on frontend (e.g. on sidebar) too
 
17
 
18
  It counts 1 visit per IP per day. So any reload of the page don't increment the counter.
19
 
@@ -21,7 +22,7 @@ Languages: english, german, italian, portuguese
21
 
22
  == Installation ==
23
 
24
- 1. unzip plugin directory into the "/wp-content/plugins/" directory
25
  1. activate the plugin through the 'Plugins' menu in WordPress
26
 
27
  First activation will create the 2 tables wp _ cpd _ counter and wp _ cpd _ counter _ useronline.
@@ -32,15 +33,14 @@ See the Options Page. It's easy. :)
32
 
33
  If "Auto counter" is on reads on single-posts and pages will count without any changes on template.<br>
34
 
35
- * place functions within post-loop (e.g. in single.php)<br>
36
- &lt;?php if(function_exists('cpdShow')) { cpdShow(); } ?&gt;
37
  * for more informations see "Other Notes"
38
 
39
  == Frequently Asked Questions ==
40
 
41
- = no questions =
42
-
43
- no answers
44
 
45
  == Screenshots ==
46
 
@@ -53,51 +53,51 @@ no answers
53
 
54
  You can place these functions in your template.
55
 
56
- _cpdShow( $before, $after, $show, $count )_
57
 
58
- * $before = text before number e.g. "&lt;p&gt;" (standard '')
59
- * $after = text after number e.g. " reads&lt;/p&gt;" (standard ' reads')
60
  * $show = true/false, "echo" complete string or "return" number only (standard true)
61
  * $count = true/false, false will not count the reads (standard true)
62
 
63
- _cpdCount()_
64
 
65
  * only count reads, without any output
66
  * cpdShow call it
67
 
68
- _cpdGetFirstCount()_
69
 
70
  * shows date of first count
71
 
72
- _cpdGetUserPerDay()_
73
 
74
  * shows average number of visitors per day
75
 
76
- _cpdGetUserAll()_
77
 
78
  * shows number of total visitors
79
 
80
- _cpdGetUserOnline()_
81
 
82
  * shows number of visitors just online
83
 
84
- _cpdGetUserToday()_
85
 
86
  * shows number of visitors today
87
 
88
- _cpdGetUserYesterday()_
89
 
90
  * shows number of visitors yesterday
91
 
92
- _cpdGetUserLastWeek()_
93
 
94
  * shows number of visitors last week (7 days)
95
 
96
- _cpdGetUserPerMonth()_
97
 
98
  * lists number of visitors per month
99
 
100
- _cpdGetUserPerPost( $limit = 0 )_
101
 
102
  * lists _$limit_ posts with number of visits
103
 
@@ -115,6 +115,10 @@ _cpdGetUserPerPost( $limit = 0 )_
115
 
116
  **Changelog**
117
 
 
 
 
 
118
  _Version 1.4_
119
 
120
  + NEW: uninstall function of WP 2.7 implemented
@@ -167,4 +171,4 @@ Functions:
167
  + cpdGetUserToday
168
  + cpdGetUserYesterday
169
  + cpdGetUserLastWeek
170
- + cpdGetUserPerMonth
2
  Contributors: Tom Braider
3
  Donate link: http://www.unicef.org
4
  Tags: counter, count, posts, visits, reads
5
+ Requires at least: 2.7
6
+ Tested up to: 2.7
7
+ Stable tag: 1.5
8
 
9
  Visit Counter, shows reads per page, visitors today, yesterday, last week, last months and other statistics.
10
 
14
  * shows reads per page
15
  * shows visitors today, yesterday, last week, last months and other statistics on dashboard
16
  * you can show these statistics on frontend (e.g. on sidebar) too
17
+ * if you use Wordpress < 2.7 please use Count-per-Day v1.4
18
 
19
  It counts 1 visit per IP per day. So any reload of the page don't increment the counter.
20
 
22
 
23
  == Installation ==
24
 
25
+ 1. unzip plugin directory into the '/wp-content/plugins/' directory
26
  1. activate the plugin through the 'Plugins' menu in WordPress
27
 
28
  First activation will create the 2 tables wp _ cpd _ counter and wp _ cpd _ counter _ useronline.
33
 
34
  If "Auto counter" is on reads on single-posts and pages will count without any changes on template.<br>
35
 
36
+ * place functions within post-loop (e.g. in single.php)<br/>
37
+ '&lt;?php if(function_exists("cpdShow")) { cpdShow(); } ?&gt;'
38
  * for more informations see "Other Notes"
39
 
40
  == Frequently Asked Questions ==
41
 
42
+ = Need Help? Find Bug? =
43
+ read and write comments on <a href="http://www.tomsdimension.de/wp-plugins/count-per-day">plugin page</a>
 
44
 
45
  == Screenshots ==
46
 
53
 
54
  You can place these functions in your template.
55
 
56
+ 'cpdShow( $before, $after, $show, $count )'
57
 
58
+ * $before = text before number e.g. '&lt;p&gt;' (standard "")
59
+ * $after = text after number e.g. 'reads&lt;/p&gt;' (standard " reads")
60
  * $show = true/false, "echo" complete string or "return" number only (standard true)
61
  * $count = true/false, false will not count the reads (standard true)
62
 
63
+ 'cpdCount()'
64
 
65
  * only count reads, without any output
66
  * cpdShow call it
67
 
68
+ 'cpdGetFirstCount()'
69
 
70
  * shows date of first count
71
 
72
+ 'cpdGetUserPerDay()'
73
 
74
  * shows average number of visitors per day
75
 
76
+ 'cpdGetUserAll()'
77
 
78
  * shows number of total visitors
79
 
80
+ 'cpdGetUserOnline()'
81
 
82
  * shows number of visitors just online
83
 
84
+ 'cpdGetUserToday()'
85
 
86
  * shows number of visitors today
87
 
88
+ 'cpdGetUserYesterday()'
89
 
90
  * shows number of visitors yesterday
91
 
92
+ 'cpdGetUserLastWeek()'
93
 
94
  * shows number of visitors last week (7 days)
95
 
96
+ 'cpdGetUserPerMonth()'
97
 
98
  * lists number of visitors per month
99
 
100
+ 'cpdGetUserPerPost( $limit = 0 )'
101
 
102
  * lists _$limit_ posts with number of visits
103
 
115
 
116
  **Changelog**
117
 
118
+ _Version 1.5_
119
+
120
+ + WP 2.7 optimized, for WP<2.7 please use CPD 1.4
121
+
122
  _Version 1.4_
123
 
124
  + NEW: uninstall function of WP 2.7 implemented
171
  + cpdGetUserToday
172
  + cpdGetUserYesterday
173
  + cpdGetUserLastWeek
174
+ + cpdGetUserPerMonth
screenshot-1.png CHANGED
Binary file
screenshot-2.png CHANGED
Binary file