diff --git a/lib/classes/task/period/writemeta.php b/lib/classes/task/period/writemeta.php index 5a02f30a3a..c17d51ab8d 100644 --- a/lib/classes/task/period/writemeta.php +++ b/lib/classes/task/period/writemeta.php @@ -13,12 +13,13 @@ use PHPExiftool\Driver\Metadata; use PHPExiftool\Driver\Value; use PHPExiftool\Driver\Tag; use PHPExiftool\Driver\TagFactory; -use PHPExiftool\Writer; +use PHPExiftool\Writer as ExifWriter; use PHPExiftool\Exception\TagUnknown; class task_period_writemeta extends task_databoxAbstract { protected $clear_doc; + protected $mwg; protected $metasubdefs = array(); private $_todo = 0; // set by "retrieveSbasContent", dec by "postProcessOneContent" @@ -31,6 +32,7 @@ class task_period_writemeta extends task_databoxAbstract protected function loadSettings(SimpleXMLElement $sx_task_settings) { $this->clear_doc = p4field::isyes($sx_task_settings->cleardoc); + $this->mwg = p4field::isyes($sx_task_settings->mwg); parent::loadSettings($sx_task_settings); } @@ -43,13 +45,13 @@ class task_period_writemeta extends task_databoxAbstract { $request = http_request::getInstance(); - $parm2 = $request->get_parms('period', 'cleardoc', 'maxrecs', 'maxmegs'); + $parm2 = $request->get_parms('period', 'cleardoc', 'mwg', 'maxrecs', 'maxmegs'); $dom = new DOMDocument(); $dom->preserveWhiteSpace = false; $dom->formatOutput = true; if ($dom->loadXML($oldxml)) { $xmlchanged = false; - foreach (array('str:period', 'str:maxrecs', 'str:maxmegs', 'boo:cleardoc') as $pname) { + foreach (array('str:period', 'str:maxrecs', 'str:maxmegs', 'boo:cleardoc', 'boo:mwg') as $pname) { $ptype = substr($pname, 0, 3); $pname = substr($pname, 4); $pvalue = $parm2[$pname]; @@ -105,6 +107,7 @@ class task_period_writemeta extends task_databoxAbstract @@ -131,6 +134,7 @@ class task_period_writemeta extends task_databoxAbstract { period.value = xml.find("period").text(); cleardoc.checked = Number(xml.find("cleardoc").text()) > 0; + cleardoc.mwg = Number(xml.find("mwg").text()) > 0; maxrecs.value = xml.find("maxrecs").text(); maxmegs.value = xml.find("maxmegs").text(); } @@ -187,6 +191,14 @@ class task_period_writemeta extends task_databoxAbstract +
+
+ +
+
@@ -209,8 +221,6 @@ class task_period_writemeta extends task_databoxAbstract protected function retrieveSbasContent(databox $databox) { - $this->dependencyContainer['exiftool.writer']->setModule(Writer::MODULE_MWG, true); - $connbas = $databox->get_connection(); $subdefgroups = $databox->get_subdef_structure(); $metasubdefs = array(); @@ -289,10 +299,13 @@ class task_period_writemeta extends task_databoxAbstract ); } - foreach ($record->get_caption()->get_fields() as $field) { + /* @var $caption \caption_record */ + $caption = $record->get_caption(); + /* @var $struct_field \databox_field */ + foreach($databox->get_meta_structure() as $struct_field_id=>$struct_field) { - $meta = $field->get_databox_field(); - $tagName = $meta->get_tag()->getTagname(); + $tagName = $struct_field->get_tag()->getTagname(); + $fieldName = $struct_field->get_name(); // skip fields with no src if($tagName == '') { @@ -306,34 +319,46 @@ class task_period_writemeta extends task_databoxAbstract continue; } - /* @var $meta \databox_field */ + try { + /* @var $struct_field \databox_field */ + $field = $caption->get_field($fieldName); + $datas = $field->get_values(); - $datas = $field->get_values(); + if ($struct_field->is_multi()) { + $values = array(); + foreach ($datas as $data) { + $values[] = $data->getValue(); + } - if ($meta->is_multi()) { - $values = array(); - foreach ($datas as $data) { - $values[] = $data->getValue(); + $value = new Value\Multi($values); + } else { + $data = array_pop($datas); + $value = $data->getValue(); + + $value = new Value\Mono($value); + } + } catch(\Exception $e) { + // the field is not set in the record, erase it + if ($struct_field->is_multi()) { + $value = new Value\Multi(Array("")); + } + else { + $value = new Value\Mono(""); } - - $value = new Value\Multi($values); - } else { - $data = array_pop($datas); - $value = $data->getValue(); - - $value = new Value\Mono($value); } $metadatas->add( - new Metadata\Metadata($meta->get_tag(), $value) + new Metadata\Metadata($struct_field->get_tag(), $value) ); } $this->dependencyContainer['exiftool.writer']->reset(); + if($this->mwg) { + $this->dependencyContainer['exiftool.writer']->setModule(ExifWriter::MODULE_MWG, true); + } + foreach ($tsub as $name => $file) { - $this->dependencyContainer['exiftool.writer']->erase($name != 'document' || $this->clear_doc, true); - try { $this->dependencyContainer['exiftool.writer']->write($file, $metadatas); @@ -382,6 +407,7 @@ class task_period_writemeta extends task_databoxAbstract %s %s 0 + 0 ', min(max($period, self::MINPERIOD), self::MAXPERIOD), min(max($maxrecs, self::MINRECS), self::MAXRECS),