diff --git a/model/DataList.php b/model/DataList.php index 896e62ee3..a4b5d43c9 100644 --- a/model/DataList.php +++ b/model/DataList.php @@ -256,6 +256,24 @@ class DataList extends ViewableData implements SS_List, SS_Filterable, SS_Sortab return $this; } + /** + * Filter this DataList by a callback function. + * The function will be passed each record of the DataList in turn, and must return true for the record to be included. + * Returns the filtered list. + * + * Note that, in the current implementation, the filtered list will be an ArrayList, but this may change in a future + * implementation. + */ + public function filterByCallback($callback) { + if(!is_callable($callback)) throw new LogicException("DataList::filterByCallback() must be passed something callable."); + + $output = new ArrayList; + foreach($this as $item) { + if($callback($item)) $output->push($item); + } + return $output; + } + /** * Translates a Object relation name to a Database name and apply the relation join to * the query. Throws an InvalidArgumentException if the $field doesn't correspond to a relation