- function sequenceKey() { return array(false, false); }
-
- static function top($transport) {
-
- $qi = new Queue_item();
- $qi->transport = $transport;
- $qi->orderBy('created');
- $qi->whereAdd('claimed is NULL');
-
- $qi->limit(1);
-
- $cnt = $qi->find(TRUE);
-
- if ($cnt) {
- # XXX: potential race condition
- # can we force it to only update if claimed is still NULL
- # (or old)?
- common_log(LOG_INFO, 'claiming queue item = ' . $qi->notice_id);
- $orig = clone($qi);
- $qi->claimed = common_sql_now();
- $result = $qi->update($orig);
- if ($result) {
- common_log(LOG_INFO, 'claim succeeded.');
- return $qi;
- } else {
- common_log(LOG_INFO, 'claim failed.');
- }
- }
- $qi = NULL;
- return NULL;
- }
+ /**
+ * @param mixed $transports name of a single queue or array of queues to pull from
+ * If not specified, checks all queues in the system.
+ */
+ static function top($transports=null) {
+
+ $qi = new Queue_item();
+ if ($transports) {
+ if (is_array($transports)) {
+ // @fixme use safer escaping
+ $list = implode("','", array_map('addslashes', $transports));
+ $qi->whereAdd("transport in ('$list')");
+ } else {
+ $qi->transport = $transports;
+ }
+ }
+ $qi->orderBy('created');
+ $qi->whereAdd('claimed is null');
+
+ $qi->limit(1);
+
+ $cnt = $qi->find(true);
+
+ if ($cnt) {
+ # XXX: potential race condition
+ # can we force it to only update if claimed is still null
+ # (or old)?
+ common_log(LOG_INFO, 'claiming queue item id = ' . $qi->id .
+ ' for transport ' . $qi->transport);
+ $orig = clone($qi);
+ $qi->claimed = common_sql_now();
+ $result = $qi->update($orig);
+ if ($result) {
+ common_log(LOG_INFO, 'claim succeeded.');
+ return $qi;
+ } else {
+ common_log(LOG_INFO, 'claim failed.');
+ }
+ }
+ $qi = null;
+ return null;
+ }