PHRAS-270 #time 3h

erase blank fields when writing metadatas = write back every field of the STRUCTURE, not only fields of the record.
This commit is contained in:
Jean-Yves Gaulier
2014-09-03 20:05:25 +02:00
committed by Nicolas Le Goff
parent 9cef4528db
commit b05fb498da

View File

@@ -13,12 +13,13 @@ use PHPExiftool\Driver\Metadata;
use PHPExiftool\Driver\Value; use PHPExiftool\Driver\Value;
use PHPExiftool\Driver\Tag; use PHPExiftool\Driver\Tag;
use PHPExiftool\Driver\TagFactory; use PHPExiftool\Driver\TagFactory;
use PHPExiftool\Writer; use PHPExiftool\Writer as ExifWriter;
use PHPExiftool\Exception\TagUnknown; use PHPExiftool\Exception\TagUnknown;
class task_period_writemeta extends task_databoxAbstract class task_period_writemeta extends task_databoxAbstract
{ {
protected $clear_doc; protected $clear_doc;
protected $mwg;
protected $metasubdefs = array(); protected $metasubdefs = array();
private $_todo = 0; // set by "retrieveSbasContent", dec by "postProcessOneContent" 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) protected function loadSettings(SimpleXMLElement $sx_task_settings)
{ {
$this->clear_doc = p4field::isyes($sx_task_settings->cleardoc); $this->clear_doc = p4field::isyes($sx_task_settings->cleardoc);
$this->mwg = p4field::isyes($sx_task_settings->mwg);
parent::loadSettings($sx_task_settings); parent::loadSettings($sx_task_settings);
} }
@@ -43,13 +45,13 @@ class task_period_writemeta extends task_databoxAbstract
{ {
$request = http_request::getInstance(); $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 = new DOMDocument();
$dom->preserveWhiteSpace = false; $dom->preserveWhiteSpace = false;
$dom->formatOutput = true; $dom->formatOutput = true;
if ($dom->loadXML($oldxml)) { if ($dom->loadXML($oldxml)) {
$xmlchanged = false; $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); $ptype = substr($pname, 0, 3);
$pname = substr($pname, 4); $pname = substr($pname, 4);
$pvalue = $parm2[$pname]; $pvalue = $parm2[$pname];
@@ -105,6 +107,7 @@ class task_period_writemeta extends task_databoxAbstract
<script type="text/javascript"> <script type="text/javascript">
<?php echo $form ?>.period.value = "<?php echo p4string::MakeString($sxml->period, "js", '"') ?>"; <?php echo $form ?>.period.value = "<?php echo p4string::MakeString($sxml->period, "js", '"') ?>";
<?php echo $form ?>.cleardoc.checked = <?php echo p4field::isyes($sxml->cleardoc) ? "true" : 'false' ?>; <?php echo $form ?>.cleardoc.checked = <?php echo p4field::isyes($sxml->cleardoc) ? "true" : 'false' ?>;
<?php echo $form ?>.mwg.checked = <?php echo p4field::isyes($sxml->mwg) ? "true" : 'false' ?>;
<?php echo $form ?>.maxrecs.value = "<?php echo p4string::MakeString($sxml->maxrecs, "js", '"') ?>"; <?php echo $form ?>.maxrecs.value = "<?php echo p4string::MakeString($sxml->maxrecs, "js", '"') ?>";
<?php echo $form ?>.maxmegs.value = "<?php echo p4string::MakeString($sxml->maxmegs, "js", '"') ?>"; <?php echo $form ?>.maxmegs.value = "<?php echo p4string::MakeString($sxml->maxmegs, "js", '"') ?>";
</script> </script>
@@ -131,6 +134,7 @@ class task_period_writemeta extends task_databoxAbstract
{ {
period.value = xml.find("period").text(); period.value = xml.find("period").text();
cleardoc.checked = Number(xml.find("cleardoc").text()) > 0; cleardoc.checked = Number(xml.find("cleardoc").text()) > 0;
cleardoc.mwg = Number(xml.find("mwg").text()) > 0;
maxrecs.value = xml.find("maxrecs").text(); maxrecs.value = xml.find("maxrecs").text();
maxmegs.value = xml.find("maxmegs").text(); maxmegs.value = xml.find("maxmegs").text();
} }
@@ -187,6 +191,14 @@ class task_period_writemeta extends task_databoxAbstract
</label> </label>
</div> </div>
</div> </div>
<div class="control-group">
<div class="controls">
<label class="checkbox">
<input class="formElem" type="checkbox" name="mwg">
<?php echo _('task::writemeta:Compatibilité MWG') ?>
</label>
</div>
</div>
<div class="control-group"> <div class="control-group">
<label class="control-label"><?php echo _('Restart the task every X records') ?></label> <label class="control-label"><?php echo _('Restart the task every X records') ?></label>
<div class="controls"> <div class="controls">
@@ -209,8 +221,6 @@ class task_period_writemeta extends task_databoxAbstract
protected function retrieveSbasContent(databox $databox) protected function retrieveSbasContent(databox $databox)
{ {
$this->dependencyContainer['exiftool.writer']->setModule(Writer::MODULE_MWG, true);
$connbas = $databox->get_connection(); $connbas = $databox->get_connection();
$subdefgroups = $databox->get_subdef_structure(); $subdefgroups = $databox->get_subdef_structure();
$metasubdefs = array(); $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 = $struct_field->get_tag()->getTagname();
$tagName = $meta->get_tag()->getTagname(); $fieldName = $struct_field->get_name();
// skip fields with no src // skip fields with no src
if($tagName == '') { if($tagName == '') {
@@ -306,11 +319,12 @@ class task_period_writemeta extends task_databoxAbstract
continue; 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 ($meta->is_multi()) { if ($struct_field->is_multi()) {
$values = array(); $values = array();
foreach ($datas as $data) { foreach ($datas as $data) {
$values[] = $data->getValue(); $values[] = $data->getValue();
@@ -323,17 +337,28 @@ class task_period_writemeta extends task_databoxAbstract
$value = new Value\Mono($value); $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("");
}
}
$metadatas->add( $metadatas->add(
new Metadata\Metadata($meta->get_tag(), $value) new Metadata\Metadata($struct_field->get_tag(), $value)
); );
} }
$this->dependencyContainer['exiftool.writer']->reset(); $this->dependencyContainer['exiftool.writer']->reset();
if($this->mwg) {
$this->dependencyContainer['exiftool.writer']->setModule(ExifWriter::MODULE_MWG, true);
}
foreach ($tsub as $name => $file) { foreach ($tsub as $name => $file) {
$this->dependencyContainer['exiftool.writer']->erase($name != 'document' || $this->clear_doc, true); $this->dependencyContainer['exiftool.writer']->erase($name != 'document' || $this->clear_doc, true);
try { try {
$this->dependencyContainer['exiftool.writer']->write($file, $metadatas); $this->dependencyContainer['exiftool.writer']->write($file, $metadatas);
@@ -382,6 +407,7 @@ class task_period_writemeta extends task_databoxAbstract
<maxrecs>%s</maxrecs> <maxrecs>%s</maxrecs>
<maxmegs>%s</maxmegs> <maxmegs>%s</maxmegs>
<cleardoc>0</cleardoc> <cleardoc>0</cleardoc>
<mwg>0</mwg>
</tasksettings>', </tasksettings>',
min(max($period, self::MINPERIOD), self::MAXPERIOD), min(max($period, self::MINPERIOD), self::MAXPERIOD),
min(max($maxrecs, self::MINRECS), self::MAXRECS), min(max($maxrecs, self::MINRECS), self::MAXRECS),