From 1d84217ed97be237d2696c85a997c9e52114b984 Mon Sep 17 00:00:00 2001
From: Silvio <silvio@devlet.com.br>
Date: Mon, 19 Jul 2010 18:04:40 -0300
Subject: Lots of API changes at IsisConnector and iterators

---
 classes/iterators/IsisItemIterator.php | 85 ++++++++++++++++++++++++++++++++++
 1 file changed, 85 insertions(+)
 create mode 100644 classes/iterators/IsisItemIterator.php

(limited to 'classes/iterators/IsisItemIterator.php')

diff --git a/classes/iterators/IsisItemIterator.php b/classes/iterators/IsisItemIterator.php
new file mode 100644
index 0000000..5c28b2c
--- /dev/null
+++ b/classes/iterators/IsisItemIterator.php
@@ -0,0 +1,85 @@
+<?php
+
+/**
+ * Isis field iterator. Iterates over a field for each result row.
+ */
+class IsisItemIterator implements Iterator
+{
+  private $keys;
+  private $fieldset;
+  private $row       = 0;
+  private $rows      = 0;
+  private $item  = 0;
+  private $items = 0;
+
+  /**
+   * Constructor.
+   *
+   * @param $class
+   *   Instance of IsisConnector or child class.
+   *
+   * @param $field
+   *   Field to iterate over.
+   *
+   * @param $main
+   *   Control to which item the main field should be mapped to.
+   *   By default no mapping is made.
+   */ 
+  public function __construct($class, $field, $main = false) {
+    $this->class     = $class;
+    $this->field     = $field;
+    $this->rows      = $class->getRows($field);
+
+    // Handle subfields
+    $this->fieldset  = $class->getSubfieldList($field);
+    $this->keys      = array_keys($this->fieldset);
+    $this->items     = count($this->keys);
+
+    // Sum up main item
+    $this->fieldset[] = $class->getMainItem($field);
+    $this->keys[]     = $class->getMainItemName($field);
+    $this->items++;
+  }
+
+  /**
+   * Rewind the Iterator to the first element.
+   */
+  function rewind() {
+    $this->row      = 0;
+    $this->item = 0;
+  }
+
+  /**
+   * Return the key of the current element.
+   */
+  function key() {
+    return $this->row;
+  }
+
+  /**
+   * Return the current element.
+   */
+  function current() {
+    return $this->fieldset[$this->keys[$this->item]];
+  }
+
+  /**
+   * Move forward to next element.
+   */
+  function next() {
+    if ($this->item >= $this->items) {
+      $this->item = 0;
+      ++$this->row;
+    }
+    else {
+      ++$this->item;
+    }
+  }
+
+  /**
+   * Check if there is a current element after calls to rewind() or next().
+   */
+  function valid() {
+    return $this->row <= $this->rows;
+  }  
+}
-- 
cgit v1.2.3