From d83a35ce8486256ff865596066c6dbf23bfe5b18 Mon Sep 17 00:00:00 2001 From: Silvio Date: Thu, 15 Jul 2010 18:07:01 -0300 Subject: Adding IsisNormalSubfieldFilterIterator --- classes/IsisConnector.php | 39 ++++++++++++++++++++++++++++ classes/IsisNormalSubfieldFilterIterator.php | 14 ++++++++++ classes/IsisSubfieldIterator.php | 2 ++ schemas/fbe.yaml | 12 ++++++++- 4 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 classes/IsisNormalSubfieldFilterIterator.php diff --git a/classes/IsisConnector.php b/classes/IsisConnector.php index cc4bf62..c731d9a 100644 --- a/classes/IsisConnector.php +++ b/classes/IsisConnector.php @@ -543,4 +543,43 @@ class IsisConnector { return false; } + + /** + * Deal with special subfields. + * + * @param $field + * Field data from ISIS database schema. + * + * @param $subfield + * Subfield name. + * + * @param $return + * Specify return type. + * + * @return + * True if special subfield, false otherwise of special return type + */ + public function specialSubfield($field, $subfield, $return = 'boolean') { + if (isset($field['special'])) { + $field_key = $this->getFieldKey($field); + $subfield_key = $this->getSubfieldKey($field, $subfield); + $name = $field['name'] .':'. $subfield; + $code = $field_key .':'. $subfield_key; + + if (array_search($subfield_key, $field['special'])) { + $this->log("Found special subfield $name", 'debug'); + + if ($return == 'boolean') { + return true; + } + elseif ($return == 'code') { + return $code; + } + + return $name; + } + } + + return false; + } } diff --git a/classes/IsisNormalSubfieldFilterIterator.php b/classes/IsisNormalSubfieldFilterIterator.php new file mode 100644 index 0000000..98494a6 --- /dev/null +++ b/classes/IsisNormalSubfieldFilterIterator.php @@ -0,0 +1,14 @@ +getInnerIterator()->field; + $class = $this->getInnerIterator()->class; + $subfield = $this->getInnerIterator()->current(); + return !$class->specialSubfield($field, $subfield); + } +} diff --git a/classes/IsisSubfieldIterator.php b/classes/IsisSubfieldIterator.php index 8a35399..36d3d06 100644 --- a/classes/IsisSubfieldIterator.php +++ b/classes/IsisSubfieldIterator.php @@ -23,6 +23,8 @@ class IsisSubfieldIterator implements Iterator * Field to iterate over. */ public function __construct($class, $field) { + $this->class = $class; + $this->field = $field; $this->rows = $class->getRows($field); $this->fieldset = $class->getSubfieldList($field); $this->keys = array_keys($this->fieldset); diff --git a/schemas/fbe.yaml b/schemas/fbe.yaml index 9fb771f..2052e09 100644 --- a/schemas/fbe.yaml +++ b/schemas/fbe.yaml @@ -164,6 +164,7 @@ fields: type: Performers description: n: Direção especializada (ação, filmagem aérea, etc.) + special: [w] 67: name: Argumento/roteiro repeat: Yes @@ -176,7 +177,7 @@ fields: f: diálogos g: adaptado por h: autoria do texto de locução / redator - i: baseada # TODO: not a performer field + i: baseada j: diálogos adicionais k: supervisão de roteiro l: enquadração (nomenclatura de época) @@ -191,6 +192,7 @@ fields: a: Argumentista/entrecho/argumento d: Roteirista/entrecho organizado em cenas/roteiro i: Baseada (Inspirada) em, na, no, / romance; obra, peça + special: [w, i] 62: name: Fotografia repeat: Yes @@ -220,6 +222,7 @@ fields: h: Operador (nomenclatura de época), operador de câmera j: Assistência de iluminação / assistente de iluminação l: Animador / empresa encarregada da animação + special: [w] 72: name: Dados adicionais de fotografia repeat: Yes @@ -239,6 +242,7 @@ fields: w: (qualificador) map: type: Performers + special: [w] 64: name: Som repeat: Yes @@ -258,6 +262,7 @@ fields: w: (qualificador) map: type: Performers + special: [w] 74: name: Dados adicionais de som repeat: Yes @@ -284,6 +289,7 @@ fields: type: Performers description: o: Microfonista (operador de microfone/operador de boom = microfonista) + special: [w] 65: name: Montagem repeat: Yes @@ -302,6 +308,7 @@ fields: a: Montagem/montador (nos filmes até cerca de 1960, usava-se os termos coordenação/coordenador/corte ou corte final) b: Edição (editor) c: Assistente de montagem (assistência de montagem) + special: [w] 75: name: Montagem - dados adicionais repeat: Yes @@ -316,6 +323,7 @@ fields: w: (qualificador) map: type: Performers + special: [w] 61: name: Direção de arte repeat: Yes @@ -335,6 +343,7 @@ fields: w: (qualificador) map: type: Performers + special: [w] 71: name: Direção de arte - dados adicionais subfields: @@ -361,6 +370,7 @@ fields: w: (qualificador) map: type: Performers + special: [w] # # Sound/music -- cgit v1.2.3