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

Diff of /contributions/modules/click/click.module

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

revision 1.3.2.1, Sat Jan 21 02:47:20 2006 UTC revision 1.3.2.2, Thu Apr 13 15:45:05 2006 UTC
# Line 0  Line 1 
1    <?php
2    
3    //$Id: click.module,v 1.2 2005/12/15 16:49:07 kbahey Exp $
4    
5    // Copyright 2005 Khalid Baheyeldin http://2bits.com
6    
7    define(CLICK_IGNORE_SITE, 'click_ignore_site');
8    
9    function click_help($section) {
10      switch ($section) {
11        case 'admin/modules#description':
12          $output = t('Track click thrus from newletters and ads on other sites');
13          break;
14        case 'admin/settings/click':
15          $output = t('Track click thrus from newletters and ads on other sites');
16          break;
17      }
18      return $output;
19    }
20    
21    function click_perm() {
22      return array ('view click links', 'view click stats');
23    }
24    
25    function click_menu($may_cache) {
26      $items = array();
27    
28      if (is_numeric(arg(1))) {
29        $nid = (int)arg(1);
30      }
31      if (is_numeric(arg(2))) {
32        $gid = (int)arg(2);
33      }
34      else {
35        $gid = 0;
36      }
37    
38      if (arg(0) == 'node') {
39        $items[] = array(
40          'path'     => "node/$nid/click",
41          'callback' => 'click_view',
42          'title'    => t('clicks'),
43          'access'   => user_access('view click stats'),
44          'weight'   => 10,
45          'type'     => MENU_LOCAL_TASK);
46      }
47    
48      $items[] = array(
49        'path'     => "click/$nid/$gid",
50        'callback' => 'click_do',
51        'access'   => TRUE,
52        'type'     => MENU_CALLBACK);
53    
54      $items[] = array(
55        'path'     => 'admin/logs/click',
56        'title'    => t('clicks'),
57        'callback' => 'click_report',
58        'access'   => user_access('view click stats'),
59        'type'     => MENU_NORMAL_ITEM);
60    
61      return $items;
62    }
63    
64    function click_settings() {
65      global $user;
66      $group = 'click_group_' . $user->uid;
67    
68      $form['click_settings'] = array(
69        '#type' => 'fieldset',
70        '#title' => t('Click settings'),
71        '#tree' => TRUE,
72      );
73    
74      $form['click_settings'][$group] = array(
75        '#type' => 'select',
76        '#title' => t('Active click group'),
77        '#default_value' => variable_get($group, 0),
78        '#options' => drupal_map_assoc(array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)),
79        '#description' => t('Current active click group for this user'),
80        '#extra' => 0,
81        '#multiple' => false,
82        '#required' => true,
83      );
84    
85      $form['click_settings'][CLICK_IGNORE_SITE] = array(
86         '#type' => 'select',
87         '#title' => t('Ignore clicks from own site'),
88         '#default_value' => variable_get(CLICK_IGNORE_SITE, 0),
89         '#options' => array('No', 'Yes'),
90         '#description' => t('Whether to ignore clicks from your own site, or treat them as external ones'),
91         '#extra' => 0,
92         '#multiple' => false,
93         '#required' => true,
94      );
95      return $form;
96    
97    }
98    
99    function click_link($type, $node = null, $teaser = false) {
100      global $user;
101      $group = 'click_group_' . $user->uid;
102    
103      $links = array();
104    
105      $click_group = variable_get($group, 0);
106    
107      if (user_access('view click links')) {
108        $links[] = l(t('click link'), "click/$node->nid/$click_group",
109          array('class' => 'click_link', 'title' => t('Link to track click thrus.')));
110      }
111    
112      if (user_access('view click stats')) {
113        $clicks = _click_count($node->nid);
114        if ($clicks > 0) {
115          $links[] = t('%num clicks', array('%num'=>$clicks));
116        }
117      }
118      return $links;
119    }
120    
121    function click_view() {
122      $nid = arg(1);
123      $fmt = 'Y-m-d H:i:s';
124    
125      $result = db_query('SELECT * FROM {clicks} WHERE nid = %d ORDER BY gid ASC', $nid);
126      while ($click = db_fetch_object($result)) {
127        $group  = "group: $click->gid";
128        $rows   = array();
129        $rows[] = array(array('data' => t('clicks today')),     array('data' => $click->day_clicks));
130        $rows[] = array(array('data' => t('clicks this week')), array('data' => $click->week_clicks));
131        $rows[] = array(array('data' => t('clicks total')),     array('data' => $click->total_clicks));
132        $rows[] = array(array('data' => t('First click at: ')), array('data' => format_date($click->start, 'custom', $fmt)));
133        $rows[] = array(array('data' => ('Last  click at: ')),  array('data' => format_date($click->last, 'custom', $fmt)));
134        $output .= $group . theme('table', array(), $rows);
135      }
136      print theme('page', $output);
137    }
138    
139    function click_report() {
140    
141      $header = array(
142          array('data' => t('group'),        'field' => 'gid'),
143          array('data' => t('node title'),   'field' => 'title'),
144          array('data' => t('day clicks'),   'field' => 'day_clicks', 'sort' => 'desc'),
145          array('data' => t('week clicks'),  'field' => 'week_clicks'),
146          array('data' => t('total clicks'), 'field' => 'total_clicks')
147        );
148      $sql = 'SELECT n.title, c.* FROM {clicks} c, {node} n WHERE c.nid = n.nid' . tablesort_sql($header);
149      $result = pager_query($sql, 50);
150      while ($click = db_fetch_object($result)) {
151        $rows[] = array(
152          array('data' => $click->gid),
153          array('data' => l($click->title, "node/$click->nid/click")),
154          array('data' => $click->day_clicks),
155          array('data' => $click->week_clicks),
156          array('data' => $click->total_clicks)
157        );
158      }
159      if (!$rows) {
160        $rows[] = array(array('data' => t('No data.'), 'colspan' => '4'));
161      }
162      $pager = theme('pager', NULL, 50, 0);
163      if (!empty($pager)) {
164        $rows[] = array(array('data' => $pager, 'colspan' => '4'));
165      }
166      print theme('page', theme('table', $header, $rows), t('Click Thru Report'));
167    }
168    
169    function click_do() {
170      global $base_url;
171    
172      $nid   = (int)arg(1);
173      $group = (int)arg(2);
174      $path  = "node/$nid";
175    
176      $ignore = variable_get(CLICK_IGNORE_SITE, 0);
177      $referer = $_SERVER['HTTP_REFERER'];
178      if ($ignore && stristr($referer, $base_url)) {
179        // ignore clicks from the same domain
180      }
181      else {
182        click_insert_update($nid, $group);
183      }
184    
185      // Redirect to the real url
186      drupal_goto($path);
187    }
188    
189    function click_insert_update($nid, $group = 0) {
190    
191      $num = db_result(db_query('SELECT nid FROM {clicks} WHERE nid = %d AND gid = %d', $nid, $group));
192      if ($num > 0) {
193        db_query('UPDATE {clicks} SET day_clicks = day_clicks + 1,
194          week_clicks = week_clicks + 1, total_clicks = total_clicks + 1,
195          last = %d WHERE nid = %d AND gid = %d', time(), $nid, $group);
196      }
197      else {
198        db_query('INSERT INTO {clicks} VALUES (%d, %d, %d, %d, %d, %d, %d)',
199          $group, $nid, 1, 1, 1, time(), time());
200      }
201    }
202    
203    function _click_count($nid) {
204      // Total clicks
205      return db_result(db_query('SELECT SUM(total_clicks) FROM {clicks} WHERE nid = %d', $nid));
206    }
207    
208    function click_cron() {
209      // 24 hours * 60 minutes * 60 seconds - 5 minutes
210      if ((time() - variable_get('click_cron_timestamp_day', 0)) >= 86100) {
211        variable_set('click_cron_timestamp_day', time());
212        db_query('UPDATE {clicks} SET day_clicks  = 0');
213      }
214    
215      // 7 days * 24 hours * 60 minutes * 60 seconds - 5 minutes
216      if ((time() - variable_get('click_cron_timestamp_week', 0)) >= 604500) {
217        variable_set('click_cron_timestamp_week', time());
218        db_query('UPDATE {clicks} SET week_clicks = 0');
219      }
220    }

Legend:
Removed from v.1.3.2.1  
changed lines
  Added in v.1.3.2.2

  ViewVC Help
Powered by ViewVC 1.1.2