private function addAllChangesets(DOMElement $artifact_node, $tracker_id, $artifact_id, array $artifact)
 {
     $this->initial_changeset = $this->getBareChangeset($artifact['submitted_by'], 0, $artifact['open_date']);
     $artifact_node->appendChild($this->initial_changeset);
     $previous_changeset = $this->initial_changeset;
     $history = $this->dao->searchHistory($artifact_id);
     foreach ($history as $row) {
         try {
             if (!$this->comment_exporter->updateComment($row)) {
                 $node = $this->getChangeset($previous_changeset, $tracker_id, $artifact_id, $row);
                 $artifact_node->appendChild($node);
                 $previous_changeset = $node;
             }
         } catch (Exception_TV3XMLException $exception) {
             $this->logger->warn("Artifact {$artifact_id}: skip changeset (" . $row['field_name'] . ", " . $row['submitted_by'] . ", " . date('c', $row['date']) . "): " . $exception->getMessage());
         } catch (Exception $exception) {
             $this->logger->error("Artifact {$artifact_id}: skip changeset (" . $row['field_name'] . ", " . $row['submitted_by'] . ", " . date('c', $row['date']) . "): " . $exception->getMessage());
         }
     }
     try {
         $current_fields_values = $this->getCurrentFieldsValues($tracker_id, $artifact_id, $artifact);
         $this->updateInitialChangesetVersusCurrentStatus($tracker_id, $artifact_id, $current_fields_values);
     } catch (Exception_TV3XMLException $exception) {
         $this->logger->warn("Artifact {$artifact_id}: skip update of first changeset: " . $exception->getMessage());
     } catch (Exception $exception) {
         $this->logger->error("Artifact {$artifact_id}: skip update of first changeset: " . $exception->getMessage());
     }
     try {
         $this->addLastChangesetIfNoHistoryRecorded($artifact_node, $tracker_id, $artifact_id, $current_fields_values);
     } catch (Exception_TV3XMLException $exception) {
         $this->logger->warn("Artifact {$artifact_id}: skip last changeset if no history: " . $exception->getMessage());
     } catch (Exception $exception) {
         $this->logger->error("Artifact {$artifact_id}: skip last changeset if no history: " . $exception->getMessage());
     }
     try {
         $this->addPermissionOnArtifactAtTheVeryEnd($artifact_node, $artifact_id);
     } catch (Exception_TV3XMLException $exception) {
         $this->logger->warn("Artifact {$artifact_id}: skip permissions on artifact: " . $exception->getMessage());
     } catch (Exception $exception) {
         $this->logger->error("Artifact {$artifact_id}: skip permissions on artifact: " . $exception->getMessage());
     }
 }