private function getFieldByName(Tracker $tracker, $field_name)
 {
     $field = $this->formelement_factory->getUsedFieldByName($tracker->getId(), $field_name);
     if (!$field) {
         throw new Tracker_FormElement_InvalidFieldException("Field {$field_name} does not exist in the tracker");
     }
     return $field;
 }
 private function getArtifactDataFromSoapRequest(Tracker $tracker, $values, Tracker_Artifact $artifact = null)
 {
     $fields_data = array();
     foreach ($values as $field_value) {
         // field are identified by name, we need to retrieve the field id
         if ($field_value->field_name) {
             $field = $this->formelement_factory->getUsedFieldByName($tracker->getId(), $field_value->field_name);
             if ($field) {
                 $field_data = $field->getFieldDataFromSoapValue($field_value, $artifact);
                 if ($field_data !== null) {
                     // $field_value is an object: SOAP must cast it in ArtifactFieldValue
                     if (isset($fields_data[$field->getId()])) {
                         if (!is_array($fields_data[$field->getId()])) {
                             $fields_data[$field->getId()] = array($fields_data[$field->getId()]);
                         }
                         $fields_data[$field->getId()][] = $field_data;
                     } else {
                         $fields_data[$field->getId()] = $field_data;
                     }
                 } else {
                     throw new SoapFault(update_artifact_fault, 'Unknown value ' . print_r($field_value->field_value, true) . ' for field: ' . $field_value->field_name);
                 }
             } else {
                 throw new SoapFault(update_artifact_fault, 'Unknown field: ' . $field_value->field_name);
             }
         }
     }
     return $fields_data;
 }
 /**
  * @return array
  */
 public function getFieldsData(SimpleXMLElement $xml_field_change)
 {
     $data = array();
     if (!$xml_field_change->field_change) {
         return $data;
     }
     foreach ($xml_field_change->field_change as $field_change) {
         $field = $this->formelement_factory->getUsedFieldByName($this->tracker->getId(), (string) $field_change['field_name']);
         if ($field) {
             $this->appendValidValue($data, $field, $field_change);
         } else {
             $this->logger->debug("Skipped unknown/unused field " . (string) $field_change['field_name']);
         }
     }
     return $data;
 }