? flag-trim-api.patch
Index: flag.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/flag/Attic/flag.module,v
retrieving revision 1.11.2.72
diff -u -p -r1.11.2.72 flag.module
--- flag.module	15 Jun 2009 20:05:42 -0000	1.11.2.72
+++ flag.module	12 Aug 2009 12:46:02 -0000
@@ -1046,6 +1046,27 @@ function flag_get_content_flags($content
 }
 
 /**
+ * Trim a flag to a certain size.
+ *
+ * @param $fid
+ *   The flag object.
+ * @param $uid
+ *   The user ID on behlaf the trimming will occur.
+ * @param $cutoff_size
+ *   The number of flaggings allowed. Any flaggings beyond that will be trimmed.
+ */
+function flag_trim_flag($flag, $uid, $cutoff_size) {
+  // We can't use db_query_range(), because we can't specify 'infinity'.
+  $result = db_query("SELECT * FROM {flag_content} WHERE fid = %d AND (uid = %d OR uid = 0) ORDER BY timestamp DESC", $flag->fid, $uid);
+  $i = 1;
+  while ($row = db_fetch_object($result)) {
+    if ($i++ > $cutoff_size) {
+      flag('unflag', $flag->name, $row->content_id, $uid);
+    }
+  }
+}
+
+/**
  * A utility function for outputting a flag link.
  *
  * You should call this function from your template when you want to put the
Index: includes/flag.rules.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/flag/includes/Attic/flag.rules.inc,v
retrieving revision 1.1.2.2
diff -u -p -r1.1.2.2 flag.rules.inc
--- includes/flag.rules.inc	6 May 2009 23:37:47 -0000	1.1.2.2
+++ includes/flag.rules.inc	12 Aug 2009 12:46:03 -0000
@@ -214,17 +214,10 @@ function flag_rules_action_unflag($flag,
 }
 
 /**
- * Base action implementation.
+ * Base action implementation: Trim flag.
  */
 function flag_rules_action_trim($flag, $flagging_user, $cutoff_size, $settings) {
-  // We can't use db_query_range(), because we can't specify 'infinity'.
-  $result = db_query("SELECT * FROM {flag_content} WHERE fid = %d AND (uid = %d OR uid = 0) ORDER BY timestamp DESC", $flag->fid, $flagging_user->uid);
-  $i = 1;
-  while ($row = db_fetch_object($result)) {
-    if ($i++ > $cutoff_size) {
-      flag('unflag', $flag->name, $row->content_id, $flagging_user);
-    }
-  }
+  flag_trim_flag($flag, $flagging_user->uid, $cutoff_size);
 }
 
 /**
