/**
* Update the mapping specification for an automatic worklist definition.
*
* @param WorklistDefinitionMapping $mapping
* @param $key
* @param string $values
*
* @return bool
*/
public function updateWorklistDefinitionMapping(WorklistDefinitionMapping $mapping, $key, $values, $display = true)
{
$values = strlen($values) ? explode(',', $values) : array();
$definition = $mapping->worklist_definition;
if (!$this->canUpdateWorklistDefinition($definition)) {
$this->addError('Cannot update mapping for un-editable Worklist Definition');
return false;
}
if (!$definition->validateMappingKey($key, $mapping->id)) {
$this->addError("Mapping key {$key} already exists for definition");
return false;
}
$mapping->key = $key;
if (!$display) {
$mapping->display_order = null;
} elseif (!$mapping->display_order) {
$mapping->display_order = $definition->getNextDisplayOrder();
}
$transaction = $this->startTransaction();
try {
if (!$mapping->save()) {
throw new Exception('Could not save mapping');
}
if (!$mapping->updateValues($values)) {
throw new Exception('Could not save mapping values');
}
$this->audit(self::$AUDIT_TARGET_AUTO, 'mapping-update');
if ($transaction) {
$transaction->commit();
}
} catch (Exception $e) {
$this->addError($e->getMessage());
echo $e->getMessage();
if ($transaction) {
$transaction->rollback();
}
return false;
}
return true;
}