annotate og_statistics.module @ 1:0aae3e2e6309

Fix d'un warning dans le cas node_load(node_save());
author Franck Deroche <franck@defr.org>
date Tue, 24 Nov 2009 14:26:41 +0100
parents 9ce879ecbce6
children 13824d66b299
rev   line source
franck@0 1 <?php
franck@0 2 // $Id: og_statistics.module,v 1.2.2.1 2009/06/05 22:38:12 dereine Exp $
franck@0 3
franck@0 4 /**
franck@0 5 * @file
franck@0 6 * Logs statistics of the organic group module.
franck@0 7 *
franck@0 8 * @todo
franck@0 9 * Write more inline comments.
franck@0 10 * Build a central api function.
franck@0 11 * Use the abstract api function to remove all this functions,
franck@0 12 * like og_stat_add_*, og_stat_update_*.
franck@0 13 *
franck@0 14 * Remove all og_statistics_load in update/add/remove functions, its not needed there.
franck@0 15 *
franck@0 16 * Make more functions use arrays instaed of single values.
franck@0 17 */
franck@0 18
franck@0 19 /**
franck@0 20 * Central og_statistics api function.
franck@0 21 *
franck@0 22 * This function is not used yet.
franck@0 23 *
franck@0 24 * @param $gid
franck@0 25 * The group nid.
franck@0 26 *
franck@0 27 * @param $key
franck@0 28 * The statistics key, for example members_count.
franck@0 29 *
franck@0 30 * @param $method
franck@0 31 * How should the value be handled, possible values:
franck@0 32 * - set: Ignore the previos value.
franck@0 33 * - add: add a integer to the previos value.
franck@0 34 *
franck@0 35 * @param $value
franck@0 36 * The new statistics value.
franck@0 37 *
franck@0 38 */
franck@0 39 function og_statistics_update_statistic($gid, $key, $method = 'set', $value) {
franck@0 40 $stat = og_statistics_load($gid);
franck@0 41 $stat[$key] = $method == 'set' ? $value : $stat[$key] + $value;
franck@0 42 return drupal_write_record('og_statistics', $stat, 'nid');
franck@0 43 }
franck@0 44
franck@0 45 /**
franck@0 46 * Implementation of hook_nodeapi().
franck@0 47 */
franck@0 48 function og_statistics_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
franck@0 49 switch ($op) {
franck@0 50 case 'insert':
franck@0 51 // Adds a new record for the new group.
franck@0 52 if (og_is_group_type($node->type)) {
franck@0 53 og_statistics_write_pure_record($node->nid);
franck@0 54 }
franck@0 55 // Update statistics.
franck@0 56 elseif (og_is_group_post_type($node->type)) {
franck@0 57 if (isset($node->og_groups)) {
franck@0 58 $node->og_groups = array_unique($node->og_groups);
franck@0 59 foreach ($node->og_groups as $gid) {
franck@0 60 og_statistics_add_node($gid);
franck@0 61 og_statistics_update_last_node($node->created, $gid);
franck@0 62 }
franck@0 63 }
franck@0 64 }
franck@0 65 break;
franck@0 66 case 'delete':
franck@0 67 // Remove a record for group.
franck@0 68 if (og_is_group_type($node->type)) {
franck@0 69 og_statistics_delete_record($node);
franck@0 70 }
franck@0 71 // Update statistics.
franck@0 72 elseif (og_is_group_post_type($node->type)) {
franck@0 73 if (isset($node->og_groups)) {
franck@0 74 $node->og_groups = array_unique($node->og_groups);
franck@0 75 foreach ($node->og_groups as $gid) {
franck@0 76 og_statistics_remove_node($gid);
franck@0 77 }
franck@0 78 }
franck@0 79 }
franck@0 80 break;
franck@0 81 case 'update':
franck@0 82 // Update statistics.
franck@0 83 if (og_is_group_post_type($node->type)) {
franck@1 84 if (isset($node->og_groups) && isset($node->og_initial_groups)) {
franck@0 85 $updated_gid = array_intersect($node->og_groups, $node->og_initial_groups);
franck@0 86 $added_gid = array_diff($node->og_groups, $node->og_initial_groups);
franck@0 87 $removed_gid = array_diff($node->og_initial_groups, $node->og_groups);
franck@0 88 foreach ($updated_gid as $gid) {
franck@0 89 og_statistics_update_last_node($node->changed, $gid);
franck@0 90 }
franck@0 91 foreach ($added_gid as $gid) {
franck@0 92 og_statistics_add_node($gid);
franck@0 93 og_statistics_update_last_node($node->changed, $gid);
franck@0 94 }
franck@0 95 foreach ($removed_gid as $gid) {
franck@0 96 og_statistics_remove_node($gid);
franck@0 97 }
franck@0 98 }
franck@0 99 }
franck@0 100 }
franck@0 101 }
franck@0 102
franck@0 103 /**
franck@0 104 * Implementation of hook_comment().
franck@0 105 */
franck@0 106 function og_statistics_comment(&$a1, $op) {
franck@0 107 switch ($op) {
franck@0 108 case 'insert':
franck@0 109 $node = node_load($a1['nid']);
franck@0 110 if (og_is_group_post_type($node->type)) {
franck@0 111 foreach ($node->og_groups as $gid) {
franck@0 112 og_statistics_add_comment($gid);
franck@0 113 og_statistics_update_last_comment($a1['timestamp'], $gid);
franck@0 114 }
franck@0 115 }
franck@0 116 break;
franck@0 117 case 'delete':
franck@0 118 $node = node_load($a1->nid);
franck@0 119 if (og_is_group_post_type($node->type)) {
franck@0 120 foreach ($node->og_groups as $gid) {
franck@0 121 og_statistics_remove_comment($gid);
franck@0 122 }
franck@0 123 }
franck@0 124 break;
franck@0 125 case 'update':
franck@0 126 $node = node_load($a1['nid']);
franck@0 127 if (og_is_group_post_type($node->type)) {
franck@0 128 foreach ($node->og_groups as $gid) {
franck@0 129 og_statistics_update_last_comment($a1['timestamp'], $gid);
franck@0 130 }
franck@0 131 }
franck@0 132 break;
franck@0 133 }
franck@0 134 }
franck@0 135
franck@0 136 /**
franck@0 137 * Implementation of hook_og().
franck@0 138 */
franck@0 139 function og_statistics_og($op, $gid, $uid, $args) {
franck@0 140 switch ($op) {
franck@0 141 case 'user insert':
franck@0 142 $time = time();
franck@0 143 og_statistics_add_user($gid);
franck@0 144 og_statistics_update_last_member($time, $gid);
franck@0 145 break;
franck@0 146 case 'user delete':
franck@0 147 og_statistics_remove_user($gid);
franck@0 148 break;
franck@0 149 }
franck@0 150 }
franck@0 151
franck@0 152 /**
franck@0 153 * Returns a statistic for a group().
franck@0 154 *
franck@0 155 * @param $gid
franck@0 156 * The group nid.
franck@0 157 *
franck@0 158 * @todo
franck@0 159 * Build perhaps a static cache here.
franck@0 160 *
franck@0 161 */
franck@0 162 function og_statistics_load($gid) {
franck@0 163 $result = db_query("SELECT * FROM {og_statistics} WHERE nid = %d", $gid);
franck@0 164 return db_fetch_array($result);
franck@0 165 }
franck@0 166
franck@0 167 /**
franck@0 168 * Writes a record of statistics without any content, but nid.
franck@0 169 *
franck@0 170 * @param $gid
franck@0 171 * The group nid.
franck@0 172 */
franck@0 173 function og_statistics_write_pure_record($gid) {
franck@0 174 // All statistics are set to zero.
franck@0 175 $stat = array(
franck@0 176 'nid' => $gid,
franck@0 177 'members_count' => 0,
franck@0 178 'posts_count' => 0,
franck@0 179 'comments_count' => 0,
franck@0 180 'last_node_timestamp' => 0,
franck@0 181 'last_comment_timestamp' => 0,
franck@0 182 'last_member_timestamp' => 0,
franck@0 183 );
franck@0 184 drupal_write_record('og_statistics', $stat);
franck@0 185 }
franck@0 186
franck@0 187 /**
franck@0 188 * Add 1 to posts_count of a group.
franck@0 189 *
franck@0 190 * @param $gid
franck@0 191 * The group nid.
franck@0 192 */
franck@0 193 function og_statistics_add_node($gid) {
franck@0 194 $stat = og_statistics_load($gid);
franck@0 195 $stat['posts_count']++;
franck@0 196 drupal_write_record('og_statistics', $stat, 'nid');
franck@0 197 }
franck@0 198
franck@0 199 /**
franck@0 200 * Removes 1 form posts_count of a group.
franck@0 201 *
franck@0 202 * @param $gid
franck@0 203 * The group nid.
franck@0 204 */
franck@0 205 function og_statistics_remove_node($gid) {
franck@0 206 $stat = og_statistics_load($gid);
franck@0 207 $stat['posts_count']--;
franck@0 208 // Load the count of comments and remove this amount of comments.
franck@0 209 $node = node_load($gid);
franck@0 210 $stat['comments_count'] -= $node->comment_count;
franck@0 211
franck@0 212 drupal_write_record('og_statistics', $stat, 'nid');
franck@0 213 }
franck@0 214
franck@0 215 /**
franck@0 216 * Updates the last node of a group.
franck@0 217 *
franck@0 218 * @param $gid
franck@0 219 * The group nid.
franck@0 220 */
franck@0 221 function og_statistics_update_last_node($timestamp, $gid) {
franck@0 222 $stat = og_statistics_load($gid);
franck@0 223 $stat['last_node_timestamp'] = $timestamp;
franck@0 224 drupal_write_record('og_statistics', $stat, 'nid');
franck@0 225 }
franck@0 226
franck@0 227 /**
franck@0 228 * Add 1 to comments_count of a group.
franck@0 229 *
franck@0 230 * @param $gid
franck@0 231 * The group nid.
franck@0 232 */
franck@0 233 function og_statistics_add_comment($gid) {
franck@0 234 $stat = og_statistics_load($gid);
franck@0 235 $stat['comments_count']++;
franck@0 236 drupal_write_record('og_statistics', $stat, 'nid');
franck@0 237 }
franck@0 238
franck@0 239 /**
franck@0 240 * Removes 1 from comments_count of a group.
franck@0 241 *
franck@0 242 * @param $gid
franck@0 243 * The group nid.
franck@0 244 */
franck@0 245 function og_statistics_remove_comment($gid) {
franck@0 246 $stat = og_statistics_load($gid);
franck@0 247 $stat['comments_count']--;
franck@0 248 drupal_write_record('og_statistics', $stat, 'nid');
franck@0 249 }
franck@0 250
franck@0 251 /**
franck@0 252 * Updates the last comment of a group.
franck@0 253 *
franck@0 254 * @param $gid
franck@0 255 * The group nid.
franck@0 256 */
franck@0 257 function og_statistics_update_last_comment($timestamp, $gid) {
franck@0 258 $stat = og_statistics_load($gid);
franck@0 259 $stat['last_comment_timestamp'] = $timestamp;
franck@0 260 drupal_write_record('og_statistics', $stat, 'nid');
franck@0 261 }
franck@0 262
franck@0 263 /**
franck@0 264 * Add 1 to members_count of a group.
franck@0 265 *
franck@0 266 * @param $gid
franck@0 267 * The group nid.
franck@0 268 */
franck@0 269 function og_statistics_add_user($gid) {
franck@0 270 $stat = og_statistics_load($gid);
franck@0 271 $stat['members_count']++;
franck@0 272 drupal_write_record('og_statistics', $stat, 'nid');
franck@0 273 }
franck@0 274
franck@0 275 /**
franck@0 276 * Removes 1 from members_count of a group.
franck@0 277 *
franck@0 278 * @param $gid
franck@0 279 * The group nid.
franck@0 280 */
franck@0 281 function og_statistics_remove_user($gid) {
franck@0 282 $stat = og_statistics_load($gid);
franck@0 283 $stat['members_count']--;
franck@0 284 drupal_write_record('og_statistics', $stat, 'nid');
franck@0 285 }
franck@0 286
franck@0 287 /**
franck@0 288 * Updates the last member of a group.
franck@0 289 *
franck@0 290 * @param $gid
franck@0 291 * The group nid.
franck@0 292 */
franck@0 293 function og_statistics_update_last_member($timestamp, $gid) {
franck@0 294 $stat = og_statistics_load($gid);
franck@0 295 $stat['last_member_timestamp'] = $timestamp;
franck@0 296 drupal_write_record('og_statistics', $stat, 'nid');
franck@0 297 }
franck@0 298
franck@0 299 /**
franck@0 300 * Removes a complete record.
franck@0 301 *
franck@0 302 * @param $gid
franck@0 303 * The group nid.
franck@0 304 */
franck@0 305 function og_statistics_delete_record($gid) {
franck@0 306 db_query("DELETE FROM {og_statistics} WHERE nid = %d", $gid);
franck@0 307 }
franck@0 308
franck@0 309 /**
franck@0 310 * views stuff.
franck@0 311 */
franck@0 312
franck@0 313 /**
franck@0 314 * Implementation of hook_views_api().
franck@0 315 */
franck@0 316 function og_statistics_views_api() {
franck@0 317 return array(
franck@0 318 'api' => 2,
franck@0 319 );
franck@0 320 }
franck@0 321