WorklistDefinitionMapping::updateValues PHP Method

updateValues() public method

public updateValues ( array $values = [] ) : boolean
$values array
return boolean
    public function updateValues($values = array())
    {
        $kept = array();
        foreach ($this->values as $mv) {
            if (!in_array($mv->mapping_value, $values)) {
                if (!$mv->delete()) {
                    throw new Exception("Could not delete value {$mv->mapping_value}");
                }
            } else {
                $kept[] = $mv->mapping_value;
            }
        }
        foreach ($values as $val) {
            if (!in_array($val, $kept)) {
                $mv = $this->getInstanceForClass('WorklistDefinitionMappingValue');
                $mv->worklist_definition_mapping_id = $this->id;
                $mv->mapping_value = $val;
                if (!$mv->save()) {
                    throw new Exception('Could not save mapping value' . print_r($mv->getErrors(), true));
                }
            }
        }
        $this->setValueList($values);
        return true;
    }

Usage Example

コード例 #1
0
ファイル: WorklistManager.php プロジェクト: openeyes/openeyes
 /**
  * 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;
 }