From 0b119477efd810faeb06a7e74c1716092566d438 Mon Sep 17 00:00:00 2001
From: Tim Steiner <tsteiner2@unl.edu>
Date: Wed, 25 Jun 2008 17:47:35 +0000
Subject: [PATCH] Added some unility methods to Unl_Model_Collection

---
 library/Unl/Model/Collection.php | 68 ++++++++++++++++++++++----------
 1 file changed, 48 insertions(+), 20 deletions(-)

diff --git a/library/Unl/Model/Collection.php b/library/Unl/Model/Collection.php
index 8d09dacc..ef5be58f 100644
--- a/library/Unl/Model/Collection.php
+++ b/library/Unl/Model/Collection.php
@@ -2,68 +2,68 @@
 
 class Unl_Model_Collection implements Iterator, Countable, ArrayAccess
 {
-	
+
 	/**
 	 * name of the class of model this collection will be storing
 	 */
 	protected $_modelClass;
-	
+
 	/**
 	 * an array of the models in this collection
 	 */
 	protected $_models = array();
-	
+
 	public function __construct($modelClass)
 	{
 		$this->_modelClass = $modelClass;
 	}
-	
+
 	// Functions to implement the Iterator interface (allows foreach)
-	
+
 	public function current()
 	{
 		return current($this->_models);
 	}
-	
+
 	public function key()
 	{
 		return key($this->_models);
 	}
-	
+
 	public function next()
 	{
 		return next($this->_models);
 	}
-	
+
 	public function rewind()
 	{
 		return reset($this->_models);
 	}
-	
+
 	public function valid()
 	{
 		return (bool) $this->current();
 	}
-	
+
 	// Function to implement the Countable interface (allows count())
-	
+
 	public function count()
 	{
 		return count($this->_models);
 	}
-	
+
 	// Functions to implement ArrayAccess interface (allows $instance['key'])
-	
+
 	public function offsetExists($offset)
 	{
 		return array_key_exists($offset, $this->_models);
 	}
-	
+
 	public function offsetGet($offset)
 	{
 		return $this->_models[$offset];
 	}
-	
+
 	public function offsetSet($offset, $value)
 	{
 		if (!$value instanceof $this->_modelClass) {
@@ -74,19 +74,19 @@ class Unl_Model_Collection implements Iterator, Countable, ArrayAccess
 				throw new Exception('Cannot add a non-ojbect to a collection of "' . $this->_modelClass . '" objects');
 			}
 		}
-		
+
 		if ($offset === null) {
 			return ($this->_models[] = $value);
 		} else {
 			return ($this->_models[$offset] = $value);
 		}
 	}
-	
+
 	public function offsetUnset($offset)
 	{
 		unset($this->_models[$offset]);
 	}
-	
+
 	public function merge(Unl_Model_Collection $collection)
 	{
 		foreach ($collection as $model) {
@@ -94,7 +94,7 @@ class Unl_Model_Collection implements Iterator, Countable, ArrayAccess
 			$this->_models[$modelId] = $model;
 		}
 	}
-	
+
 	/**
 	 * Removes and returns the last element from the collection
 	 *
@@ -104,7 +104,7 @@ class Unl_Model_Collection implements Iterator, Countable, ArrayAccess
 	{
         return array_pop($this->_models);
 	}
-	
+
 	public function getId()
 	{
 		$ids = array();
@@ -113,5 +113,33 @@ class Unl_Model_Collection implements Iterator, Countable, ArrayAccess
 		}
 		return $ids;
 	}
+
+	public function orderBy($method)
+	{
+	    $valuesToSortOn = array();
+	    $modelKeys = array();
+	    foreach ($this->_models as $key => $model)
+	    {
+	        $valuesToSortOn[] = $model->$method();
+	        $modelKeys[] = $key;
+	    }
+	    $valuesToSortOn = array_map('strtolower', $valuesToSortOn);
+	    array_multisort($valuesToSortOn, $modelKeys);
+	    $sortedModels = array();
+	    foreach ($modelKeys as $modelKey) {
+	        $sortedModels[$modelKey] = $this->_models[$modelKey];
+	    }
+	    $this->_models = $sortedModels;
+	}
+
+	public function arrayFromMethod($method)
+	{
+	    $data = array();
+	    foreach ($this->_models as $model)
+	    {
+	        $data[$model->getId()] = $model->$method();
+	    }
+	    return $data;
+	}
 }
 
-- 
GitLab