You are here

function activity_cron in Activity 6.2

Same name and namespace in other branches
  1. 5.4 activity.module \activity_cron()
  2. 6 activity.module \activity_cron()

Implementation of hook_cron().

File

./activity.module, line 838
Primarily Drupal hooks and global API functions to manipulate activity.

Code

function activity_cron() {

  // default is 2 weeks 0
  $expire = variable_get('activity_expire', 0);
  $min = variable_get('activity_min_count', 0);
  if (!empty($expire) && empty($min)) {
    db_query("DELETE m, at, aa, a FROM {activity} a\n             LEFT JOIN {activity_access} aa ON aa.aid = a.aid\n             INNER JOIN {activity_targets} at ON at.aid = a.aid\n             INNER JOIN {activity_messages} m ON m.amid = at.amid\n             WHERE a.created < %d", $_SERVER['REQUEST_TIME'] - $expire);
  }
  elseif (!empty($expire)) {

    // SELECT members with the min number of activies and they have an min(created) older then the expire
    $uid_sql = "SELECT uid, min(created) as min, count(aid) as count FROM {activity} GROUP BY uid HAVING min < %d AND count > %d";
    $uid_result = db_query($uid_sql, $_SERVER['REQUEST_TIME'] - $expire, $min);
    $uids = array();
    while ($uid_obj = db_fetch_object($uid_result)) {
      $uids[] = $uid_obj->uid;
    }
    if (!empty($uids)) {

      // DELETE where uid IN () ^^ AND a.created < expire
      $args = array_merge($uids, array(
        $_SERVER['REQUEST_TIME'] - $expire,
      ));
      db_query("DELETE m, at, aa, a FROM {activity} a\n             LEFT JOIN {activity_access} aa ON aa.aid = a.aid\n             INNER JOIN {activity_targets} at ON at.aid = a.aid\n             INNER JOIN {activity_messages} m ON m.amid = at.amid\n             WHERE a.uid IN(" . db_placeholders($uids) . ")\n             AND a.created < %d", $args);
    }
  }
}