<!-- Copyright (C) 2009 DNA Bank Network
http://www.dnabank-network.org

The contents of this file are subject to the Mozilla Public License Version 1.1
See LICENSE.TXT at the top of this package for the full license terms. -->

<?php

$Datasets = $dom->getElementsByTagName('DataSet');

foreach ($Datasets as $Dataset) {


  $SourceInstitutionCode = $Dataset->getElementsByTagName('SourceInstitutionCode');
  $SourceName = $Dataset->getElementsByTagName('SourceName');

  if(!empty($SourceInstitutionCode))  {
  $sqlSourceInstitutionCode = addslashes(utf8_decode($SourceInstitutionCode->item(0)->nodeValue)); }
  else { $sqlSourceInstitutionCode = "";}
    if(!empty($SourceName))  {
  $sqlSourceName = addslashes(utf8_decode($SourceName->item(0)->nodeValue)); }
  else { $sqlSourceName = "";}
  

$Units = $Dataset->getElementsByTagName('Unit');
if(!$Units) { echo "<tr><td colspan='2'><span class='error'>Provider sendet keine Suchergebnisse. Bitte prüfen Sie, ob der Provider nicht verfügbar ist und ob sie die richten UnitIDs abgefragt haben, mitunter sind z.B. für die UnitIDs keine Buchstaben zulässig sind (letzteres erzeugt einen Fehler auf Provider-Seite!)</span></td></tr>"; }

foreach ($Units as $Unit) {

  $UnitID = $Unit->getElementsByTagName('UnitID');
  
  if(!empty($UnitID)) {
  $sqlUnitID = addslashes($UnitID->item(0)->nodeValue); }
  else { $sqlUnitID = ""; }
  
  echo "<tr><td>Unit ID: </td><td>" . $UnitID->item(0)->nodeValue . "</td></tr>";
  echo "<tr><td>Source Institution: </td><td>" . $SourceInstitutionCode->item(0)->nodeValue . "</td></tr>";
  echo "<tr><td>Source Collection: </td><td>" . $SourceName->item(0)->nodeValue . "</td></tr>";
  
  $resultTest = "SELECT ID_Cache FROM tablecache WHERE UnitID_Specimen = '$sqlUnitID' AND CollectionCode_Specimen = '$sqlSourceName' AND InstitutionCode_Specimen = '$sqlSourceInstitutionCode' AND ID_Dataset_Specimen = '$formProviderIntern'";
    $sqlTest = mysql_query($resultTest);
    
    if(mysql_num_rows($sqlTest)) { echo "<tr><td colspan='2'><span class='error'>Specimen already exist in database</span></td></tr><tr><td colspan='2'><hr /></td></tr>"; }
    
    if(!mysql_num_rows($sqlTest)) {
    

/*----------------------------GATHERING---------------------------------------------------------*/
  
  $Gatherings = $Unit->getElementsByTagName('Gathering');

  foreach ($Gatherings as $Gathering) {

    $GatheringDate = $Gathering->getElementsByTagName('DateText');
    $GatheringDateAll = $Gathering->getElementsByTagName('GatheringDateTime');  //if (empty($GatheringDate))
    $GatheringISODateTimeBegin = $Gathering->getElementsByTagName('ISODateTimeBegin');
    $GatheringDayNumberBegin = $Gathering->getElementsByTagName('DayNumberBegin');
    $GatheringTimeOfDayBegin = $Gathering->getElementsByTagName('ISOTimeOfDayBegin');    
    $GatheringISODateTimeEnd = $Gathering->getElementsByTagName('ISODateTimeEnd');
    $GatheringDayNumberEnd = $Gathering->getElementsByTagName('DayNumberEnd');
    $GatheringTimeOfDayEnd = $Gathering->getElementsByTagName('TimeOfDayEnd');
    $GatheringAgents = $Gathering->getElementsByTagName('GatheringAgent');
    $GatheringSites = $Gathering->getElementsByTagName('GatheringSite');
    
    if(empty($GatheringDate)) {
    //echo "Date2: " . $GatheringDateAll->item(0)->nodeValue . "<br>";  //if (empty($GatheringDate))
    $sqlGatheringDate = addslashes($GatheringDateAll->item(0)->nodeValue); }
    else {
    if($GatheringDate) {
    //echo "Date: " . $GatheringDate->item(0)->nodeValue . "<br>";
    $sqlGatheringDate = addslashes($GatheringDate->item(0)->nodeValue); }}
    
    if($GatheringISODateTimeBegin) {
    $sqlGatheringDate .= " " . $GatheringISODateTimeBegin->item(0)->nodeValue; }
    
    if($GatheringDayNumberBegin) {
    $sqlGatheringDate .= " " . $GatheringDayNumberBegin->item(0)->nodeValue; }
    
    if($GatheringTimeOfDayBegin) {
    $sqlGatheringDate .= " " . $GatheringTimeOfDayBegin->item(0)->nodeValue; }
    
    if($GatheringISODateTimeEnd) {
    $sqlGatheringDate .= " " . $GatheringISODateTimeEnd->item(0)->nodeValue; }    
    
    if($GatheringDayNumberEnd) {
    $sqlGatheringDate .= " " . $GatheringDayNumberEnd->item(0)->nodeValue; }    
    
    if($GatheringTimeOfDayEnd) {
    $sqlGatheringDate .= " " . $GatheringTimeOfDayEnd->item(0)->nodeValue; }    
  
 
    foreach ($GatheringAgents as $GatheringAgent) {

      $PersonName = $GatheringAgent->getElementsByTagName('PersonName');
      $AgentText = $GatheringAgent->getElementsByTagName('AgentText');   //if (empty($GatheringAgent)
      
      if(empty($GatheringAgent)) {
      //  echo "Person2: " . $AgentText->item(0)->nodeValue . "<br>";
        $sqlPersonName = addslashes($AgentText->item(0)->nodeValue); }

      else {
        if($PersonName) {
    //    echo "Person: " . $PersonName->item(0)->nodeValue . "<br>"; 
        $sqlPersonName = addslashes($PersonName->item(0)->nodeValue); } }}
  
  
    foreach ($GatheringSites as $GatheringSite) {
  
      $LocalityText = $GatheringSite->getElementsByTagName('LocalityText');
      $ContinentOrOcean = $GatheringSite->getElementsByTagName('ContinentOrOcean');
      $CountryName = $GatheringSite->getElementsByTagName('CountryName');
      $Country = $GatheringSite->getElementsByTagName('Country');  //if (empty($CountryName))
      $ISO2 = $GatheringSite->getElementsByTagName('ISO2Letter');
      $NamedAreas = $GatheringSite->getElementsByTagName('NamedAreas');  //if (empty($Country))
      $NearNamedPlaces = $GatheringSite->getElementsByTagName('NearNamedPlaces');  //if (empty($Country))
      $LongitudeDecimal = $GatheringSite->getElementsByTagName('LongitudeDecimal');
      $LatitudeDecimal = $GatheringSite->getElementsByTagName('LatitudeDecimal');
      $SiteCoordinates = $GatheringSite->getElementsByTagName('SiteCoordinates');  //if (empty($LongitudeDecimal & LatitudeDecimal))  
      $Altitude = $GatheringSite->getElementsByTagName('Altitude');
  
      if($LocalityText) {
   //   echo "Locality: " . $LocalityText->item(0)->nodeValue . "<br>"; 
      $sqlLocalityText = addslashes($LocalityText->item(0)->nodeValue); }
      if($ContinentOrOcean) {
  //    echo "Continent: " . $ContinentOrOcean->item(0)->nodeValue . "<br>"; 
      $sqlContinentOrOcean = addslashes($ContinentOrOcean->item(0)->nodeValue); }
      

      if(empty($CountryName)) {
   //     echo "Country2: " . $Country->item(0)->nodeValue . "<br>"; 
        $sqlCountryName = addslashes($Country->item(0)->nodeValue); }
        
      else {
   //     echo "Country: " . $CountryName->item(0)->nodeValue . "<br>";
        $sqlCountryName = addslashes($CountryName->item(0)->nodeValue); }
      
   //    echo "ISO2: " . $ISO2->item(0)->nodeValue . "<br>";
        $sqlISO2 = addslashes($ISO2->item(0)->nodeValue);
        
      if(empty($NamedAreas)) {
        $sqlGatheringOther = addslashes($NearNamedPlaces->item(0)->nodeValue);
        }
       if($NamedAreas->item(0)->nodeValue != "") 
      {$sqlNamedAreas = addslashes($NamedAreas->item(0)->nodeValue);}
      
       if($sqlNamedAreas = 'Africa' or $sqlNamedAreas = 'Asia' or $sqlNamedAreas = 'Australia' or $sqlNamedAreas = 'Australia and Oceania' or $sqlNamedAreas = 'Europe' or $sqlNamedAreas = 'Middle America' or $sqlNamedAreas = 'South America' or $sqlNamedAreas = 'Middle America' or $sqlNamedAreas = 'Middle and South America' or $sqlNamedAreas = 'North America' or $sqlNamedAreas = ' Atlantic Ocean' or $sqlNamedAreas = 'Arctic Ocean' or $sqlNamedAreas = 'Indian Ocean' or $sqlNamedAreas = 'Pacific Ocean' or $sqlNamedAreas = 'Southern Ocean' or $sqlNamedAreas = 'Landlocked Sea')
      
      { $sqlContinentOrOcean = $NamedAreas->item(0)->nodeValue; }        
        
        else {
        
 //       echo "NamedAreas: " . $NamedAreas->item(0)->nodeValue . "<br>";
        $sqlGatheringOther = addslashes($NamedAreas->item(0)->nodeValue);
        }      
      
      if($LongitudeDecimal) {
  //    echo "Longitude: " . $LongitudeDecimal->item(0)->nodeValue . "<br>";
      $sqlLongitudeDecimal = $LongitudeDecimal->item(0)->nodeValue; }
      if($LatitudeDecimal) {
   //   echo "Latitude: " . $LatitudeDecimal->item(0)->nodeValue . "<br>";
      $sqlLatitudeDecimal = $LatitudeDecimal->item(0)->nodeValue; }
   //   echo "Coordinates: " . $SiteCoordinates->item(0)->nodeValue . "<br>";
   //   echo "Altitude: " . $Altitude->item(0)->nodeValue . "<br>";
      if($Altitude) {
      $sqlAltitude = addslashes($Altitude->item(0)->nodeValue); }
      
   
      
    } // foreach $GatheringSites
  } //foreach $Gatherings
  
  $TypeDesignations = $Unit->getElementsByTagName('NomenclaturalTypeDesignation');
  
  foreach ($TypeDesignations as $TypeDesignation) {
  
  $TypeStatus = $TypeDesignation->getElementsByTagName('TypeStatus');
  $sqlTypeStatus = $TypeStatus->item(0)->nodeValue;
  
  }
  

$result1 = "INSERT INTO tablecache (UnitID_Specimen, CollectionCode_Specimen, InstitutionCode_Specimen, ContinentOrOcean, CountryName, CountryISO2, GatheringAgent, GatheringDate, LocalityText, LongitudeDecimal, LatitudeDecimal, Altitude, Gathering_Other, ID_Dataset_Specimen, TypeStatus, Created_Who) VALUES ('$sqlUnitID','$sqlSourceName','$sqlSourceInstitutionCode','$sqlContinentOrOcean','$sqlCountryName','$sqlISO2','$sqlPersonName','$sqlGatheringDate','$sqlLocalityText','$sqlLongitudeDecimal','$sqlLatitudeDecimal','$sqlAltitude','$sqlGatheringOther','$formProviderIntern','$sqlTypeStatus','$log')";
 $sql1 = mysql_query($result1);
$IDTableCache=mysql_insert_id(); 

#######################################Error 1###############################################################
if(!$sql1)
          { $msg = $result1."\n";
  $msg .= "####Error 1####";
  trigger_error($msg, E_USER_ERROR);
  include ("Errorreport.php");   }
#############################################################################################################    
  
  
/*----------------------------IDENTIFICATIONS---------------------------------------------------------*/  



  $Identifications = $Unit->getElementsByTagName('Identifications');
  
  foreach ($Identifications as $IndexIdentification => $Identification) {     
  
  $IdentificationSingle = $Unit->getElementsByTagName('Identification');
  
  foreach ($IdentificationSingle as $Index2Indentification => $Identification2) {
  // more than one Identification possible
  
//     $TaxaIdentified = $Identification->getElementsByTagName('TaxonIdentified');
  
   // foreach ($TaxaIdentified as $TaxonIdentified) {
  
     $NameAuthorYearString = $Identification2->getElementsByTagName('NameAuthorYearString');            // Name, Author, Year
     $ScientificNames = $Identification2->getElementsByTagName('ScientificNameAtomized');
     $HigherTaxa = $Identification2->getElementsByTagName('HigherTaxon');     

     if($NameAuthorYearString) {
  //   echo "Name All: " . $NameAuthorYearString->item(0)->nodeValue . "<br>";
     $sqlNameAuthorYearString = addslashes($NameAuthorYearString->item(0)->nodeValue); }
     if($Identification2) {
  //   echo "Preferred: " . $Identification->getAttribute('PreferredIdentificationFlag') . "<br>";
     $sqlPreferredIdentificationFlag = $Identification2->getAttribute('PreferredIdentificationFlag'); }

     foreach ($ScientificNames as $ScientificName) {
    
   //  $ScientificNamesAtomized = $ScientificName->getElementsByTagName('NameAtomised');

   //     foreach ($ScientificNamesAtomized as $ScientificNameAtomized) {
   
      $Bacteria = $ScientificName->getElementsByTagName('Bacterial');
      $Botany = $ScientificName->getElementsByTagName('Botanical');
      $Zoology = $ScientificName->getElementsByTagName('Zoological');   
      $Virology = $ScientificName->getElementsByTagName('Viral');         
      

      if($Bacteria) {

        foreach ($Bacteria as $Bacterical) {
      
         $GenusBac = $Bacterical->getElementsByTagName('Genus');
         $SubgenusBac = $Bacterical->getElementsByTagName('Subgenus');
         $SpeciesEpithetBac = $Bacterical->getElementsByTagName('SpeciesEpithet');
         $SubspeciesEpithetBac = $Bacterical->getElementsByTagName('SubspeciesEpithet');
        
         if($GenusBac) {
  //       echo "Genus: " . $GenusBac->item(0)->nodeValue . "<br>";
         $sqlGenus = $GenusBac->item(0)->nodeValue; }
         if($SubgenusBac) {
 //        echo "Subgenus: " . $SubgenusBac->item(0)->nodeValue . "<br>";
         $sqlSubgenus = $SubgenusBac->item(0)->nodeValue; }
         if($SpeciesEpithetBac) {
 //        echo "Spec.Epi: " . $SpeciesEpithetBac->item(0)->nodeValue . "<br>";
         $sqlFirstEpithet = $SpeciesEpithetBac->item(0)->nodeValue; }
         if($SubspeciesEpithetBac) {
 //        echo "SspEpi: " . $SubspeciesEpithetBac->item(0)->nodeValue . "<br>";
         $sqlSecondEpithet = $SubspeciesEpithetBac->item(0)->nodeValue; }
         if(empty($sqlGenus) and empty($sqlSubgenus) and empty($sqlFirstEpithet) and empty($sqlSubspecies))
         {              
 //        echo "Bacteria_All: " . $Bacteria->item(0)->nodeValue . "<br>"; //if (empty -> $GenusBac, $SubgenusBac, $SpeciesEpithetBac, $SubspeciesEpithetBac)      
         $sqlName_All = $Bacteria->item(0)->nodeValue;    } 

        } //foreach $Bacteria
      } //if($Bacteria)

      if($Botany) {
      
        foreach ($Botany as $Botanical) {
        
          $GenusBot = $Botanical->getElementsByTagName('Genus');
          $FirstEpithet = $Botanical->getElementsByTagName('FirstEpithet');
          $SecondEpithet = $Botanical->getElementsByTagName('SecondEpithet');
          $Rank = $Botanical->getElementsByTagName('Rank');
          $HybridFlag = $Botanical->getElementsByTagName('HybridFlag');
        
          if($GenusBot) {
  //        echo "Genus: " . $GenusBot->item(0)->nodeValue . "<br>";
          $sqlGenus = $GenusBot->item(0)->nodeValue; }
          if($FirstEpithet) {
 //         echo "Spec.Epi: " . $FirstEpithet->item(0)->nodeValue . "<br>";
          $sqlFirstEpithet = $FirstEpithet->item(0)->nodeValue; }
          if($Rank) {
   //       echo "Rank: " . $Rank->item(0)->nodeValue . "<br>";            
          $sqlRank = $Rank->item(0)->nodeValue; }
          if($SecondEpithet) {
  //        echo "Sec.Epi: " . $SecondEpithet->item(0)->nodeValue . "<br>";    
          $sqlSecondEpithet = $SecondEpithet->item(0)->nodeValue; }
          if($HybridFlag) {
  //        echo "Hybrid: " . $HybridFlag->item(0)->nodeValue . "<br>";
          $sqlHybridFlag = $HybridFlag->item(0)->nodeValue; }
          if(empty($sqlGenus) and empty($sqlFirstEpithet) and empty($sqlRank) and empty($sqlSecondEpithet))
          {        
  //        echo "Botany_All: " . $Botany->item(0)->nodeValue . "<br>"; //if (empty -> $GenusBot, $FirstEpithet, $SecondEpithet, $Rank, $HybridFlag)      
          $sqlName_All = $Botany->item(0)->nodeValue;   }
      
        } //foreach $Botany
      } //if($Botany)
      
      if($Zoology) {
      
        foreach ($Zoology as $Zoological => $Zoo) {
      
          $GenusZoo = $Zoo->getElementsByTagName('Genus');
          $SubgenusZoo = $Zoo->getElementsByTagName('Subgenus');
          $SpeciesEpithetZoo = $Zoo->getElementsByTagName('SpeciesEpithet');
          $SubspeciesEpithetZoo = $Zoo->getElementsByTagName('SubspeciesEpithet');

          if($GenusZoo) {
  //        echo "Genus: " .$GenusZoo->item(0)->nodeValue."<br>"; 
          $sqlGenus = $GenusZoo->item(0)->nodeValue; }
          if($SubgenusZoo) {
 //         echo "Subgenus: " . $SubgenusZoo->item(0)->nodeValue . "<br>";
          $sqlSubgenus = $SubgenusZoo->item(0)->nodeValue; }
          if($SpeciesEpithetZoo) {
  //        echo "Spec.Epi: " . $SpeciesEpithetZoo->item(0)->nodeValue . "<br>"; 
          $sqlFirstEpithet = $SpeciesEpithetZoo->item(0)->nodeValue; }
          if($SubspeciesEpithetZoo) {
  //        echo "SspEpi: " . $SubspeciesEpithetZoo->item(0)->nodeValue . "<br>";
          $sqlSecondEpithet = $SubspeciesEpithetZoo->item(0)->nodeValue; }
          if($sqlSecondEpithet) {
            $sqlRank = "ssp."; }
          if(empty($sqlGenus) and empty($sqlSubgenus) and empty($sqlFirstEpithet) and empty($sqlSecondEpithet))
            {        
   //         echo "Zoology_All: " . $Zoo . "<br>"; //if (empty -> $GenusZ, $SubgenusZ, $SpeciesEpithetZ, $SubspeciesEpithetZ)      
            $sqlName_All = $Zoology->item(0)->nodeValue; }
      
        } //foreach $Zoology
      } //if($Zoology)
      
      if($Virology)
      {
      
        foreach ($Virology as $Viral) {
        
          $GenusV = $Viral->getElementsByTagName('Genus');
        
          if($GenusV) {
    //      echo "Genus: " . $GenusV->item(0)->nodeValue . "<br>";
          $sqlGenus = $GenusV->item(0)->nodeValue; }
          if(empty($sqlGenus)) 
          {              
 //         echo "Virology_All: " . $Virology->item(0)->nodeValue . "<br>";
          $sqlName_All = $Virology->item(0)->nodeValue; }
      
        } //foreach $Virology
      } //if($Virology)
    
//    } //foreach $ScientificNamesAtomized
    
$result2 = "INSERT INTO tablecachetaxonidentified (ID_Cache, Genus, Subgenus, FirstEpithet, SecondEpithet, Rank, HybridFlag, NameAuthorYear, Other, PreferredFlag, Created_Who) VALUES ('$IDTableCache','$sqlGenus','$sqlSubgenus','$sqlFirstEpithet','$sqlSecondEpithet','$sqlRank','$sqlHybridFlag','$sqlNameAuthorYearString','$sqlName_All','$sqlPreferredIdentificationFlag','$log')"; 
$sql2 = mysql_query($result2);
 $IDTableCacheTaxonIdentified=mysql_insert_id();

#######################################Error 2###############################################################

if(!$sql2)
{ $msg = $result2."\n";
  $msg .= "####Error 2####";
  trigger_error($msg, E_USER_ERROR);
  include ("Errorreport.php");   }
  
############################################################################################################# 
} //foreach $ScientificName
    
foreach ($HigherTaxa as $index => $HigherTaxon) { // more than one HigherTaxon per Identification possible

       if($HigherTaxon) { 
     //    echo "Higher Taxon: " .$HigherTaxon->item(0)->nodeValue." (".$HigherTaxon->getAttribute('TaxonRank').")<br>";
         $sqlHigherTaxon = $HigherTaxon->nodeValue;
         $sqlHigherTaxonRank  = $HigherTaxon->getAttribute('TaxonRank'); }

         
 $result3 = "INSERT INTO tablecachehighertaxa (ID_CacheTaxonIdentified, HigherTaxon, TaxonRank, Created_Who) VALUES ('$IDTableCacheTaxonIdentified','$sqlHigherTaxon','$sqlHigherTaxonRank','$log')";
 $sql3 = mysql_query($result3); 
#######################################Error 3###############################################################

if(!$sql3)
{ $msg = $result3."\n";
  $msg .= "####Error 3####";
  trigger_error($msg, E_USER_ERROR);
  include ("Errorreport.php");   }
  
#############################################################################################################
      } //foreach $HugherTaxa
    
  } //foreach $IdentificationSingle
  
  } //foreach $Identifications
  
/*----------------------------------------MULTI MEDIA OBJECTS -----------------------------*/
  $MultiMediaObjects = $Unit->getElementsByTagName('UnitDigitalImage');

foreach ($MultiMediaObjects as $IndexMultiMediaObjects => $MultiMediaObject) {     // more than one Identification possible
  
     $FileURI = $MultiMediaObject->getElementsByTagName('ImageURI');
     
     if(!empty($FileURI)) {
     $sqlFileURI = $FileURI->item(0)->nodeValue; }

  $result4 = "INSERT INTO tablecacheimages (ID_Cache, Images, Created_Who) VALUES ('$IDTableCache','$sqlFileURI','$log')";
  $sql4 = mysql_query($result4);
  
#######################################Error 4###############################################################

if(!$sql4)
{ $msg = $result4."\n";
  $msg .= "####Error 4####";
  trigger_error($msg, E_USER_ERROR);
  include ("Errorreport.php");   
  $error = "true"; }
  
#############################################################################################################      
     
  }   // foreach $MultiMediaObjects

  if($sql1 and $sql2)
  { echo "<tr><td colspan='2'><span class='fine'>Data have been saved!</span></td></tr><tr><td colspan='2'><hr /></td></tr>"; }
  
 } // if(!mysql_num_rows($sqlTest)) 
    
} //foreach $Units

} //foreach $Datasets


?>