diff options
author | Silvio <silvio@devlet.com.br> | 2010-06-23 16:06:50 -0300 |
---|---|---|
committer | Silvio <silvio@devlet.com.br> | 2010-06-23 16:06:50 -0300 |
commit | ca3602e07c9a4c12e227761db8b43a875d19c548 (patch) | |
tree | 8258b3ee4969ad8ad9d01b646d7bde75a2730745 /classes/IsisConnector.php | |
parent | 818e522ffd58658cf17e2e0ee0630d656a797697 (diff) | |
download | cinisis-ca3602e07c9a4c12e227761db8b43a875d19c548.tar.gz cinisis-ca3602e07c9a4c12e227761db8b43a875d19c548.tar.bz2 |
Adding IsisConnector class
Diffstat (limited to 'classes/IsisConnector.php')
-rw-r--r-- | classes/IsisConnector.php | 154 |
1 files changed, 154 insertions, 0 deletions
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]; + } + } +} |