From ca3602e07c9a4c12e227761db8b43a875d19c548 Mon Sep 17 00:00:00 2001
From: Silvio <silvio@devlet.com.br>
Date: Wed, 23 Jun 2010 16:06:50 -0300
Subject: Adding IsisConnector class

---
 classes/IsisConnector.php | 154 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 154 insertions(+)
 create mode 100644 classes/IsisConnector.php

(limited to 'classes')

diff --git a/classes/IsisConnector.php b/classes/IsisConnector.php
new file mode 100644
index 0000000..6052454
--- /dev/null
+++ b/classes/IsisConnector.php
@@ -0,0 +1,154 @@
+<?php
+
+class IsisConnector {
+  /**
+   * Constructor.
+   */ 
+  public function __construct() {
+    $this->isis = new CinisisDb();
+
+    if ($this->isis->db) {
+      $this->rows   = $this->isis->db->rows();
+      $this->format = $this->isis->db->format;
+      $this->fields = $this->format['fields'];
+    }
+    else {
+      return FALSE;
+    }
+  }
+
+  /**
+   * Alias to $isis->db->read().
+   */
+  public function read($row) {
+    // Always store the last result.
+    $this->result = $this->isis->db->read($row);
+
+    // Return the result.
+    return $this->result;
+  }
+
+  /**
+   * Get the value of a given field.
+   */
+  public function getField($field, $row = 0) {
+    if (isset($this->result[$field['name']][$row]['field'])) {
+      return $this->result[$field['name']][$row]['field'];
+    }
+  }
+
+  /**
+   * Get the value of a given subfield.
+   */
+  public function getSubfield($field, $subfield, $row = 0) {
+    if (isset($this->result[$field['name']][$row]['subfields'][$subfield])) {
+      return $this->result[$field['name']][$row]['subfields'][$subfield];
+    }
+  }
+
+  /**
+   * Get the list of subfields from a given field.
+   */
+  public function getSubfields($field) {
+    if (isset($field['subfields'])) {
+      return $field['subfields'];
+    }
+    return array();
+  }
+
+  /**
+   * Determine which model field an ISIS db field should
+   * be mapped to.
+   *
+   * Map format:
+   *
+   *   map:
+   *     type: relation
+   *  
+   *   map:
+   *     type: value
+   *     field: dest
+   *     subfields:
+   *       a: dest
+   *       b: dest
+   *
+   * Examples:
+   *
+   *   map:
+   *     type: Performer
+   *  
+   *   map:
+   *     type: value
+   *     field: title
+   *     subfields:
+   *       a: subtitle
+   *  
+   * @todo Convert field and subfield names to valid field names.
+   */
+  public function getMap($field, $subfield = NULL) {
+    if ($subfield == NULL) {
+      if (isset($field['map']['field'])) {
+        // Custom map provided.
+        $dest = 'set'. ucfirst($field['map']['field']);
+      }
+      else {
+        // Default map.
+        $dest = 'set'. ucfirst($field['name']);
+      }
+    }
+    else {
+      $key = $this->getSubfieldKey($field, $subfield);
+
+      if (isset($field['map']['subfields'][$key])) {
+        // Custom map provided.
+        $dest = 'set'. ucfirst($field['map']['subfields'][$key]);
+      }
+      else {
+        // Default map.
+        $dest = 'set'. ucfirst($subfield);
+      }
+    }
+
+    return $dest;
+  }
+
+  /**
+   * Get the mapping type of a given field.
+   */
+  public function getMapType($field) {
+    return isset($field['map']['type']) ? $field['map']['type'] : FALSE;
+  }
+
+  /**
+   * Check on an ISIS schema whether a field has a map.
+   */
+  public function fieldHasMap($field) {
+    if (isset($field['map']['field'])) {
+      return TRUE;
+    }
+    return FALSE;
+  }
+
+  /**
+   * Check on an ISIS schema whether a subfield has a map.
+   */
+  public function subfieldHasMap($field, $subfield) {
+    if (isset($field['map']['subfields'])) {
+      $key = $this->getSubfieldKey($field, $subfield);
+      if (isset($field['map']['subfields'][$key])) {
+        return TRUE;
+      }
+    }
+    return FALSE;
+  }
+
+  /**
+   * Get the key of a subfield entry.
+   */
+  public function getSubfieldKey($field, $subfield) {
+    $keys = array_flip($field['subfields']);
+    if (isset($keys[$subfield])) {
+      return $keys[$subfield];
+    }
+  }
+}
-- 
cgit v1.2.3