PageRenderTime 43ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/tree/src/lmbTreeSortedCollection.class.php

http://github.com/limb-php-framework/limb
PHP | 72 lines | 47 code | 12 blank | 13 comment | 8 complexity | eb98f835a9b3a086ddb0000ed418d222 MD5 | raw file
Possible License(s): LGPL-2.1, AGPL-3.0, MPL-2.0-no-copyleft-exception, GPL-2.0
  1. <?php
  2. /*
  3. * Limb PHP Framework
  4. *
  5. * @link http://limb-project.com
  6. * @copyright Copyright &copy; 2004-2009 BIT(http://bit-creative.com)
  7. * @license LGPL http://www.gnu.org/copyleft/lesser.html
  8. */
  9. lmb_require('limb/tree/src/lmbTreeHelper.class.php');
  10. /**
  11. * class lmbTreeSortedCollection.
  12. *
  13. * @package tree
  14. * @version $Id: lmbTreeSortedCollection.class.php 7486 2009-01-26 19:13:20Z pachanga $
  15. */
  16. class lmbTreeSortedCollection extends lmbCollectionDecorator
  17. {
  18. protected $node_field = 'id';
  19. protected $parent_field = 'parent_id';
  20. protected $order_pairs = array();
  21. function setNodeField($name)
  22. {
  23. $this->node_field = $name;
  24. }
  25. function setParentField($name)
  26. {
  27. $this->parent_field = $name;
  28. }
  29. function setOrder($order_string)
  30. {
  31. $order_items = explode(',', $order_string);
  32. foreach($order_items as $order_pair)
  33. {
  34. $arr = explode('=', $order_pair);
  35. if(isset($arr[1]))
  36. {
  37. if(strtolower($arr[1]) == 'asc' || strtolower($arr[1]) == 'desc'
  38. || strtolower($arr[1]) == 'rand()')
  39. $this->order_pairs[$arr[0]] = strtoupper($arr[1]);
  40. else
  41. throw new lmbException('Wrong order type', array('order' => $arr[1]));
  42. }
  43. else
  44. $this->order_pairs[$arr[0]] = 'ASC';
  45. }
  46. }
  47. function rewind()
  48. {
  49. parent :: rewind();
  50. if($this->iterator->valid())
  51. {
  52. $nested_array = array();
  53. $iterator = lmbTreeHelper :: sort($this->iterator, $this->order_pairs, $this->node_field, $this->parent_field);
  54. }
  55. else
  56. $iterator = new lmbCollection();
  57. $this->iterator = $iterator;
  58. return $this->iterator->rewind();
  59. }
  60. }