mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-11 03:53:13 +00:00
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:

committed by
Nicolas Le Goff

parent
9cef4528db
commit
b05fb498da
@@ -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),
|
||||||
|
Reference in New Issue
Block a user