aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--classes/IsisConnector.php448
-rw-r--r--classes/IsisFinder.php3
-rw-r--r--classes/IsisMap.php293
-rw-r--r--classes/IsisReader.php165
4 files changed, 459 insertions, 450 deletions
diff --git a/classes/IsisConnector.php b/classes/IsisConnector.php
index 09bb8ea..ff5a576 100644
--- a/classes/IsisConnector.php
+++ b/classes/IsisConnector.php
@@ -4,78 +4,7 @@
* IsisConnector: provides an easy interface to connect an
* application with Cinisis.
*/
-class IsisConnector {
- /**
- * Constructor.
- */
- public function __construct($config = null) {
- return $this->open($config);
- }
-
- /**
- * Open a database.
- *
- * @param $config
- * Config file or array.
- */
- public function open($config) {
- $this->isis = new Cinisis($config);
-
- if ($this->isis->db) {
- $this->entries = $this->isis->db->entries();
- $this->format = $this->isis->db->format;
- $this->fields = $this->format['fields'];
- }
- else {
- return FALSE;
- }
- }
-
- /**
- * Alias to $isis->db->read().
- *
- * @param $entry
- * Row number.
- *
- * @return
- * Resulting data.
- */
- public function read($entry) {
- // Always store the last result.
- $this->result = $this->isis->db->read($entry);
-
- // Return the result.
- return $this->result;
- }
-
- /**
- * Get the main field name.
- *
- * @param $field
- * Field data from ISIS database schema.
- *
- * @return
- * Main field name.
- */
- public function getMainItemName($field) {
- $key = $this->getFieldKey($field);
- return Cinisis::main_field_name($this->format, $key);
- }
-
- /**
- * Whether to join field and subfields in a single array.
- *
- * @return
- * Boolean.
- */
- public function joinSubfields() {
- if (Cinisis::join_subfields($this->format)) {
- return TRUE;
- }
-
- return FALSE;
- }
-
+class IsisConnector extends IsisMap {
/**
* Get all values of a given field.
*
@@ -251,322 +180,6 @@ class IsisConnector {
}
/**
- * Get the list of subfields from a given field.
- *
- * @param $field
- * Field array.
- */
- public function getSubfieldList($field) {
- if (isset($field['subfields'])) {
- return $field['subfields'];
- }
-
- return array();
- }
-
- /**
- * Determine which model field an ISIS db field should be mapped to.
- * When importing an ISIS database to another system, a mapping
- * provided in the database schema can be used to put the originating
- * entries (fields and subfields) in the right place at the destination
- * database.
- *
- * 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
- *
- * @param $field
- * Field array.
- *
- * @param $subfield
- * Subfield name.
- *
- * @return
- * A map destination to the field or subfield.
- */
- public function getMap($field, $subfield = NULL) {
- if ($subfield == NULL) {
- if (isset($field['map']['main'])) {
- // Custom map provided for the main item.
- $dest = $this->mapName($field['map']['main']);
- }
- else {
- // Default map.
- $dest = $this->mapName($field['name']);
- }
- }
- else {
- $key = $this->getSubfieldKey($field, $subfield);
-
- if (isset($field['map']['subfields'][$key])) {
- // Custom map provided.
- $dest = $this->mapName($field['map']['subfields'][$key]);
- }
- else {
- // Default map.
- $dest = $this->mapName($subfield);
- }
- }
-
- return $dest;
- }
-
- /**
- * Get the mapping type of a given field.
- *
- * @param $field
- * Field array.
- *
- * @return
- * The mapping type.
- */
- public function getMapType($field) {
- return isset($field['map']['type']) ? $field['map']['type'] : FALSE;
- }
-
- /**
- * Guess a method name from a type.
- *
- * @param $type
- * Mapping type.
- *
- * @return
- * Method name.
- */
- static function methodName($type) {
- return 'import'. ucfirst($type);
- }
-
- /**
- * Check on an ISIS schema whether a field has a map.
- *
- * @param $field
- * Field array.
- *
- * @return
- * TRUE if field has a map, FALSE otherwise.
- */
- public function fieldHasMap($field) {
- if (isset($field['map']['main'])) {
- return TRUE;
- }
- return FALSE;
- }
-
- /**
- * Check on an ISIS schema whether a subfield has a map.
- *
- * @param $field
- * Field array.
- *
- * @param $subfield
- * Subfield name.
- *
- * @return
- * TRUE if subfield has a map, FALSE otherwise.
- */
- 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.
- *
- * @param $field
- * Field array.
- *
- * @param $subfield
- * Subfield name.
- *
- * @return
- * Subfield key.
- */
- public function getSubfieldKey($field, $subfield) {
- $keys = array_flip($field['subfields']);
- if (isset($keys[$subfield])) {
- return $keys[$subfield];
- }
- }
-
- /**
- * Get the item key.
- *
- * @param $field
- * Field array.
- *
- * @param $item
- * Item name.
- *
- * @return
- * Item key.
- */
- public function getItemKey($field, $item) {
- if ($item == 'main') {
- return $item;
- }
- else {
- return $this->getSubfieldKey($field, $item);
- }
- }
-
- /**
- * Get the key of a field entry.
- *
- * @param $field
- * Field array.
- *
- * @return
- * Field key.
- */
- public function getFieldKey($field) {
- return array_search($field, $this->format['fields']);
- }
-
- /**
- * Get the array which defines a field.
- *
- * @param $field_key
- * Field key.
- *
- * @return
- * Field array.
- */
- public function getFieldArray($field_key) {
- if (isset($this->format['fields'][$field_key])) {
- return $this->format['fields'][$field_key];
- }
-
- return NULL;
- }
-
- /**
- * Remove brackets from strings whithin an array.
- *
- * @param $value
- * Array with bracketed strings.
- */
- public function removeBrackets($value) {
- $value = str_replace('<', '', $value);
- $value = str_replace('>', '', $value);
- return $value;
- }
-
- /**
- * Remove brackets from strings whithin an array.
- *
- * @param &$values
- * Array with bracketed strings.
- */
- public function removeBracketsFromArray(&$values) {
- foreach ($values as $key => $value) {
- $values[$key] = $this->removeBrackets($value);
- }
- }
-
- /**
- * Explode a bracketed string into values. Just strings
- * inside brackets are returned.
- *
- * @param $subject
- * Strings containing brackets.
- *
- * @return
- * Array of matched strings.
- */
- public function explodeBrackets($subject) {
- preg_match_all('/<[^<>]*>/', $subject, $values);
- return $this->filterBrackets($values[0]);
- }
-
- /**
- * Filter out brackets from strings.
- *
- * @param $values
- * String (or array filled with strings) to be filtered.
- *
- * @result
- * Filtered string or array.
- */
- public function filterBrackets($values) {
- if (is_array($values)) {
- foreach ($values as $key => $value) {
- $values[$key] = $this->filterBrackets($value);
- }
- }
- else {
- $values = preg_replace(array('/</', '/>/'), '', $values);
- }
-
- return $values;
- }
-
- /**
- * Check if a string has brackets.
- *
- * @param $value
- * String to be compared.
- *
- * @return
- * True if string has brackets, false otherwise.
- */
- public function hasBrackets($value) {
- if (strstr($value, '<') && strstr($value, '>')) {
- return TRUE;
- }
-
- return FALSE;
- }
-
- /**
- * Explode values from fields or subfields. Split values
- * inside brackets if needed, but then doesn't return any
- * value outside brackets.
- *
- * @param $value
- * String with values.
- *
- * @return
- * Array with values.
- */
- public function explodeValue($value) {
- if ($this->hasBrackets($value)) {
- return $this->explodeBrackets($value);
- }
- else {
- if (!is_array($value)) {
- $value = array($value);
- }
- }
-
- return $value;
- }
-
- /**
* Explode brackets for a given subfield, avoiding null entries.
*
* @param $field
@@ -624,32 +237,6 @@ class IsisConnector {
}
/**
- * Normalize field names.
- *
- * @param $name
- * Field name
- *
- * @return
- * Normalized field name
- */
- static function normalizeFieldName($name) {
- return ucfirst(preg_replace('/[^a-z0-9_]/', '', strtolower($name)));
- }
-
- /**
- * Build a map name.
- *
- * @param $name
- * Field name
- *
- * @return
- * Map name
- */
- static function mapName($name) {
- return 'set'. self::normalizeFieldName($name);
- }
-
- /**
* Check if a field result and row has a given subfield.
*
* @param $field
@@ -753,39 +340,6 @@ class IsisConnector {
}
/**
- * Get a subfield name.
- *
- * @param $field_key
- * Field key.
- *
- * @param $subfield_key
- * Subfield key.
- *
- * @return
- * Subfield name.
- */
- public function getSubfieldName($field_key, $subfield_key) {
- if (isset($this->format['fields'][$field_key]['subfields'][$subfield_key])) {
- return $this->format['fields'][$field_key]['subfields'][$subfield_key];
- }
-
- return FALSE;
- }
-
- /**
- * Get a field name.
- *
- * @param $field_key
- * Field key.
- *
- * @return
- * Field name.
- */
- public function getFieldName($field_key) {
- return $this->format['fields'][$field_key]['name'];
- }
-
- /**
* Check if a field and subfield match a given condition.
*
* @param $field
diff --git a/classes/IsisFinder.php b/classes/IsisFinder.php
index a87488f..f877630 100644
--- a/classes/IsisFinder.php
+++ b/classes/IsisFinder.php
@@ -78,9 +78,6 @@ class IsisFinder extends IsisConnector {
*
* @return
* Next occurrence.
- *
- * @todo
- * Test.
*/
public function nextSubfield($entry = 1, $field, $subfield) {
$entry--;
diff --git a/classes/IsisMap.php b/classes/IsisMap.php
new file mode 100644
index 0000000..e73e178
--- /dev/null
+++ b/classes/IsisMap.php
@@ -0,0 +1,293 @@
+<?php
+
+/**
+ * Provides mappings and schema functionalities around Cinisis.
+ */
+class IsisMap extends IsisReader {
+ /**
+ * Get the main field name.
+ *
+ * @param $field
+ * Field data from ISIS database schema.
+ *
+ * @return
+ * Main field name.
+ */
+ public function getMainItemName($field) {
+ $key = $this->getFieldKey($field);
+ return Cinisis::main_field_name($this->format, $key);
+ }
+
+ /**
+ * Get the list of subfields from a given field.
+ *
+ * @param $field
+ * Field array.
+ */
+ public function getSubfieldList($field) {
+ if (isset($field['subfields'])) {
+ return $field['subfields'];
+ }
+
+ return array();
+ }
+
+ /**
+ * Determine which model field an ISIS db field should be mapped to.
+ * When importing an ISIS database to another system, a mapping
+ * provided in the database schema can be used to put the originating
+ * entries (fields and subfields) in the right place at the destination
+ * database.
+ *
+ * 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
+ *
+ * @param $field
+ * Field array.
+ *
+ * @param $subfield
+ * Subfield name.
+ *
+ * @return
+ * A map destination to the field or subfield.
+ */
+ public function getMap($field, $subfield = NULL) {
+ if ($subfield == NULL) {
+ if (isset($field['map']['main'])) {
+ // Custom map provided for the main item.
+ $dest = $this->mapName($field['map']['main']);
+ }
+ else {
+ // Default map.
+ $dest = $this->mapName($field['name']);
+ }
+ }
+ else {
+ $key = $this->getSubfieldKey($field, $subfield);
+
+ if (isset($field['map']['subfields'][$key])) {
+ // Custom map provided.
+ $dest = $this->mapName($field['map']['subfields'][$key]);
+ }
+ else {
+ // Default map.
+ $dest = $this->mapName($subfield);
+ }
+ }
+
+ return $dest;
+ }
+
+ /**
+ * Get the mapping type of a given field.
+ *
+ * @param $field
+ * Field array.
+ *
+ * @return
+ * The mapping type.
+ */
+ public function getMapType($field) {
+ return isset($field['map']['type']) ? $field['map']['type'] : FALSE;
+ }
+
+ /**
+ * Guess a method name from a type.
+ *
+ * @param $type
+ * Mapping type.
+ *
+ * @return
+ * Method name.
+ */
+ static function methodName($type) {
+ return 'import'. ucfirst($type);
+ }
+
+ /**
+ * Check on an ISIS schema whether a field has a map.
+ *
+ * @param $field
+ * Field array.
+ *
+ * @return
+ * TRUE if field has a map, FALSE otherwise.
+ */
+ public function fieldHasMap($field) {
+ if (isset($field['map']['main'])) {
+ return TRUE;
+ }
+ return FALSE;
+ }
+
+ /**
+ * Check on an ISIS schema whether a subfield has a map.
+ *
+ * @param $field
+ * Field array.
+ *
+ * @param $subfield
+ * Subfield name.
+ *
+ * @return
+ * TRUE if subfield has a map, FALSE otherwise.
+ */
+ 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.
+ *
+ * @param $field
+ * Field array.
+ *
+ * @param $subfield
+ * Subfield name.
+ *
+ * @return
+ * Subfield key.
+ */
+ public function getSubfieldKey($field, $subfield) {
+ $keys = array_flip($field['subfields']);
+ if (isset($keys[$subfield])) {
+ return $keys[$subfield];
+ }
+ }
+
+ /**
+ * Get the item key.
+ *
+ * @param $field
+ * Field array.
+ *
+ * @param $item
+ * Item name.
+ *
+ * @return
+ * Item key.
+ */
+ public function getItemKey($field, $item) {
+ if ($item == 'main') {
+ return $item;
+ }
+ else {
+ return $this->getSubfieldKey($field, $item);
+ }
+ }
+
+ /**
+ * Get the key of a field entry.
+ *
+ * @param $field
+ * Field array.
+ *
+ * @return
+ * Field key.
+ */
+ public function getFieldKey($field) {
+ return array_search($field, $this->format['fields']);
+ }
+
+ /**
+ * Get the array which defines a field.
+ *
+ * @param $field_key
+ * Field key.
+ *
+ * @return
+ * Field array.
+ */
+ public function getFieldArray($field_key) {
+ if (isset($this->format['fields'][$field_key])) {
+ return $this->format['fields'][$field_key];
+ }
+
+ return NULL;
+ }
+
+ /**
+ * Normalize field names.
+ *
+ * @param $name
+ * Field name
+ *
+ * @return
+ * Normalized field name
+ */
+ static function normalizeFieldName($name) {
+ return ucfirst(preg_replace('/[^a-z0-9_]/', '', strtolower($name)));
+ }
+
+ /**
+ * Build a map name.
+ *
+ * @param $name
+ * Field name
+ *
+ * @return
+ * Map name
+ */
+ static function mapName($name) {
+ return 'set'. self::normalizeFieldName($name);
+ }
+
+ /**
+ * Get a subfield name.
+ *
+ * @param $field_key
+ * Field key.
+ *
+ * @param $subfield_key
+ * Subfield key.
+ *
+ * @return
+ * Subfield name.
+ */
+ public function getSubfieldName($field_key, $subfield_key) {
+ if (isset($this->format['fields'][$field_key]['subfields'][$subfield_key])) {
+ return $this->format['fields'][$field_key]['subfields'][$subfield_key];
+ }
+
+ return FALSE;
+ }
+
+ /**
+ * Get a field name.
+ *
+ * @param $field_key
+ * Field key.
+ *
+ * @return
+ * Field name.
+ */
+ public function getFieldName($field_key) {
+ return $this->format['fields'][$field_key]['name'];
+ }
+}
diff --git a/classes/IsisReader.php b/classes/IsisReader.php
new file mode 100644
index 0000000..bb818a5
--- /dev/null
+++ b/classes/IsisReader.php
@@ -0,0 +1,165 @@
+<?php
+
+/**
+ * Provides basic Isis read capabilities around Cinisis.
+ */
+class IsisReader {
+ /**
+ * Constructor.
+ */
+ public function __construct($config = null) {
+ return $this->open($config);
+ }
+
+ /**
+ * Open a database.
+ *
+ * @param $config
+ * Config file or array.
+ */
+ public function open($config) {
+ $this->isis = new Cinisis($config);
+
+ if ($this->isis->db) {
+ $this->entries = $this->isis->db->entries();
+ $this->format = $this->isis->db->format;
+ $this->fields = $this->format['fields'];
+ }
+ else {
+ return FALSE;
+ }
+ }
+
+ /**
+ * Alias to $isis->db->read().
+ *
+ * @param $entry
+ * Row number.
+ *
+ * @return
+ * Resulting data.
+ */
+ public function read($entry) {
+ // Always store the last result.
+ $this->result = $this->isis->db->read($entry);
+
+ // Return the result.
+ return $this->result;
+ }
+
+ /**
+ * Remove brackets from strings whithin an array.
+ *
+ * @param $value
+ * Array with bracketed strings.
+ */
+ public function removeBrackets($value) {
+ $value = str_replace('<', '', $value);
+ $value = str_replace('>', '', $value);
+ return $value;
+ }
+
+ /**
+ * Remove brackets from strings whithin an array.
+ *
+ * @param &$values
+ * Array with bracketed strings.
+ */
+ public function removeBracketsFromArray(&$values) {
+ foreach ($values as $key => $value) {
+ $values[$key] = $this->removeBrackets($value);
+ }
+ }
+
+ /**
+ * Explode a bracketed string into values. Just strings
+ * inside brackets are returned.
+ *
+ * @param $subject
+ * Strings containing brackets.
+ *
+ * @return
+ * Array of matched strings.
+ */
+ public function explodeBrackets($subject) {
+ preg_match_all('/<[^<>]*>/', $subject, $values);
+ return $this->filterBrackets($values[0]);
+ }
+
+ /**
+ * Filter out brackets from strings.
+ *
+ * @param $values
+ * String (or array filled with strings) to be filtered.
+ *
+ * @result
+ * Filtered string or array.
+ */
+ public function filterBrackets($values) {
+ if (is_array($values)) {
+ foreach ($values as $key => $value) {
+ $values[$key] = $this->filterBrackets($value);
+ }
+ }
+ else {
+ $values = preg_replace(array('/</', '/>/'), '', $values);
+ }
+
+ return $values;
+ }
+
+ /**
+ * Check if a string has brackets.
+ *
+ * @param $value
+ * String to be compared.
+ *
+ * @return
+ * True if string has brackets, false otherwise.
+ */
+ public function hasBrackets($value) {
+ if (strstr($value, '<') && strstr($value, '>')) {
+ return TRUE;
+ }
+
+ return FALSE;
+ }
+
+ /**
+ * Explode values from fields or subfields. Split values
+ * inside brackets if needed, but then doesn't return any
+ * value outside brackets.
+ *
+ * @param $value
+ * String with values.
+ *
+ * @return
+ * Array with values.
+ */
+ public function explodeValue($value) {
+ if ($this->hasBrackets($value)) {
+ return $this->explodeBrackets($value);
+ }
+ else {
+ if (!is_array($value)) {
+ $value = array($value);
+ }
+ }
+
+ return $value;
+ }
+
+ /**
+ * Whether to join field and subfields in a single array.
+ *
+ * @return
+ * Boolean.
+ */
+ public function joinSubfields() {
+ if (Cinisis::join_subfields($this->format)) {
+ return TRUE;
+ }
+
+ return FALSE;
+ }
+}