<?PHP

$GLOBALS["UPDATED"]+=$GLOBALS["upd"];

if($GLOBALS["UPDATED"] < $GLOBALS["DIRTY"]) {
	if(isset($GLOBALS["DBFNAGL"])) {
	  $fd = @fopen($GLOBALS["DBFNAGL"],"r");
	  if($fd) {
	    $GLOBALS["npdb"]->ReadFile($fd,1);
	    $keys= $GLOBALS["npdb"]->GetRecordIDs();
	    for($ii=0;$ii<count($keys);$ii++) {
	      $ra = $GLOBALS["npdb"]->GetRecordAttr($keys[$ii]);
	      if($GLOBALS["PALM_DATABASE_INIT"]==0) {
		if($GLOBALS["TREAT_ALL_AS_DIRTY"]==1) {
		  $ra = $ra | PDB_RECORD_ATTRIB_DIRTY;
		}
		if($ra)  {
		  if(($ra & PDB_RECORD_ATTRIB_DIRTY) || ($ra & PDB_RECORD_ATTRIB_DELETED)){
		    $brudne[] = $keys[$ii];
		    $attryby[$keys[$ii]] = $ra;
		  }
		}
	      } else {
		if($ra==0 || !($ra & PDB_RECORD_ATTRIB_DELETED)){
		  $brudne[] = $keys[$ii];
		  $attryby[$keys[$ii]] = $ra;
		}
	      }
	    }
	    $GLOBALS["ILENAGL"] = count($brudne);
	    fclose($fd);
	  } else {
            applog(sprintf("Error: Nieudana próba otworzenia pliku z danymi [%s][potw_2_db.inc]",$GLOBALS["DBFNAGL"]));
	    echo "NO - nie otwarto pliku nagłówka"; //nie otwarto pliku z
	    exit;
	  }
	} else {
	  $GLOBALS["ILENAGL"] = 0;
	}

	$fd = @fopen($GLOBALS["DBFILE"],"r");
	if($fd) {
	  $GLOBALS["tpdb"]->ReadFile($fd,1);
	  $keys= $GLOBALS["tpdb"]->GetRecordIDs();

	  for($ii=0;$ii<count($keys);$ii++) {
	    $ra = $GLOBALS["tpdb"]->GetRecordAttr($keys[$ii]);
	    if($GLOBALS["PALM_DATABASE_INIT"]==0) {
	      if($GLOBALS["TREAT_ALL_AS_DIRTY"]==1) {
		$ra = $ra | PDB_RECORD_ATTRIB_DIRTY;
	      }
	      if($ra)  {
		if(($ra & PDB_RECORD_ATTRIB_DIRTY) || ($ra & PDB_RECORD_ATTRIB_DELETED)) {
		  $brudne[] = $keys[$ii];
		  $attryby[$keys[$ii]] = $ra;
		}
	      }
	    } else {
	      if($ra==0 || !($ra & PDB_RECORD_ATTRIB_DELETED)) {
		$brudne[] = $keys[$ii];
		$attryby[$keys[$ii]] = $ra;
	      }
	    }
	  }
	  fclose($fd);
	} else {
          applog(sprintf("Error: Nieudana próba otworzenia pliku z danymi [%s][potw_2_db.inc]",$GLOBALS["DBFILE"]));
	  echo "NO - nie otwarto pliku"; //nie otwarto pliku z
	  exit;
	}
}

if($GLOBALS["UPDATED"] >= $GLOBALS["DIRTY"]) {

	if(isset($GLOBALS["DBFNAGL"])) {
	  $fd = @fopen($GLOBALS["DBFNAGL"],"r");
	  if($fd) {
	    $GLOBALS["npdb"]->ReadFile($fd);
	    $keys= $GLOBALS["npdb"]->GetRecordIDs();
	    for($ii=0;$ii<count($keys);$ii++) {
	      $ra = $GLOBALS["npdb"]->GetRecordAttr($keys[$ii]);
	      if($GLOBALS["PALM_DATABASE_INIT"]==0) {
		if($GLOBALS["TREAT_ALL_AS_DIRTY"]==1) {
		  $ra = $ra | PDB_RECORD_ATTRIB_DIRTY;
		}
		if($ra)  {
		  if(($ra & PDB_RECORD_ATTRIB_DIRTY) || ($ra & PDB_RECORD_ATTRIB_DELETED)){
		    $brudne[] = $keys[$ii];
		    $attryby[$keys[$ii]] = $ra;
		  }
		}
	      } else {
		if($ra==0 || !($ra & PDB_RECORD_ATTRIB_DELETED)){
		  $brudne[] = $keys[$ii];
		  $attryby[$keys[$ii]] = $ra;
		}
	      }
	    }
	    $GLOBALS["ILENAGL"] = count($brudne);
	    fclose($fd);
	  } else {
            applog(sprintf("Error: Nieudana próba otworzenia pliku z danymi [%s][potw_2_db.inc]*",$GLOBALS["DBFNAGL"]));
	    echo "NO - nie otwarto pliku nagłówka"; //nie otwarto pliku z
	    exit;
	  }
	} else {
	  $GLOBALS["ILENAGL"] = 0;
	}

	$fd = @fopen($GLOBALS["DBFILE"],"r");
	if($fd) {
	  $GLOBALS["tpdb"]->ReadFile($fd);
	  $keys= $GLOBALS["tpdb"]->GetRecordIDs();

	  for($ii=0;$ii<count($keys);$ii++) {
	    $ra = $GLOBALS["tpdb"]->GetRecordAttr($keys[$ii]);
	    if($GLOBALS["PALM_DATABASE_INIT"]==0) {
	      if($GLOBALS["TREAT_ALL_AS_DIRTY"]==1) {
		$ra = $ra | PDB_RECORD_ATTRIB_DIRTY;
	      }
	      if($ra)  {
		if(($ra & PDB_RECORD_ATTRIB_DIRTY) || ($ra & PDB_RECORD_ATTRIB_DELETED)) {
		  $brudne[] = $keys[$ii];
		  $attryby[$keys[$ii]] = $ra;
		}
	      }
	    } else {
	      if($ra==0 || !($ra & PDB_RECORD_ATTRIB_DELETED)) {
		$brudne[] = $keys[$ii];
		$attryby[$keys[$ii]] = $ra;
	      }
	    }
	  }
	  fclose($fd);
	} else {
          applog(sprintf("Error: Nieudana próba otworzenia pliku z danymi [%s][potw_2_db.inc]*",$GLOBALS["DBFILE"]));
	  echo "NO - nie otwarto pliku"; //nie otwarto pliku z
	  exit;
	}



  // zapisać do bazy PDB info ze nie są brudne
  if($GLOBALS["PALM_DATABASE_INIT"]==0) {
    for($ii=0;$ii<count($brudne);$ii++) {
      if($ii<$GLOBALS["ILENAGL"]) {
        if(isset($GLOBALS["npdb"])) {
          if($attryby[$brudne[$ii]]&PDB_RECORD_ATTRIB_DELETED) {
            $GLOBALS["npdb"]->DeleteRecord($brudne[$ii]);
          } else {
            $GLOBALS["npdb"]->CleanRecord($brudne[$ii]);
          }
        }
      } else{
        if($attryby[$brudne[$ii]]&PDB_RECORD_ATTRIB_DELETED) {
          $GLOBALS["tpdb"]->DeleteRecord($brudne[$ii]);
        } else {
          $GLOBALS["tpdb"]->CleanRecord($brudne[$ii]);
        }
      }
    }
  } else {
    if(isset($GLOBALS["npdb"])) {
      unset($keys);
      $keys= $GLOBALS["npdb"]->GetRecordIDs();
      for($ii=0;$ii<count($keys);$ii++) {
        $ra = $GLOBALS["npdb"]->GetRecordAttr($keys[$ii]);
        if($ra & PDB_RECORD_ATTRIB_DELETED) {
          $GLOBALS["npdb"]->DeleteRecord($brudne[$ii]);
        } else {
          $GLOBALS["npdb"]->CleanRecord($brudne[$ii]);
        }
      }
    }
    unset($keys);
    $keys= $GLOBALS["tpdb"]->GetRecordIDs();
    for($ii=0;$ii<count($keys);$ii++) {
      $ra = $GLOBALS["tpdb"]->GetRecordAttr($keys[$ii]);
      if($ra & PDB_RECORD_ATTRIB_DELETED) {
        $GLOBALS["tpdb"]->DeleteRecord($brudne[$ii]);
      } else {
        $GLOBALS["tpdb"]->CleanRecord($brudne[$ii]);
      }
    }
  }

  if(isset($GLOBALS["npdb"])) {
    $ndbf = sprintf("%s.new",$GLOBALS["DBFNAGL"]);
    $file = fopen($ndbf, "wb");
    if (! $file) {echo "NO"; exit;}
    $GLOBALS["npdb"]->Version   = intval($GLOBALS["PDB_DATABASE"][$GLOBALS["APPDATAVIDX"]][$GLOBALS["DDBNAGL"]]["VERSION"],16);
    $GLOBALS["tpdb"]->TypeID    = $GLOBALS["PDB_DATABASE"][$GLOBALS["APPDATAVIDX"]][$GLOBALS["DDBNAGL"]]["TYPE"];
    $GLOBALS["tpdb"]->CreatorID = $GLOBALS["PDB_DATABASE"][$GLOBALS["APPDATAVIDX"]][$GLOBALS["DDBNAGL"]]["CREATOR"];
    $GLOBALS["npdb"]->WriteToFile($file);
    fclose($file);
    @unlink($GLOBALS["DBFNAGL"]);
    xrename($ndbf,$GLOBALS["DBFNAGL"]);
    chmod($GLOBALS["DBFNAGL"],0666);
  }

  $ndbf = sprintf("%s.new",$GLOBALS["DBFILE"]);
  $file = fopen($ndbf, "wb");
  if (! $file) {echo "NO"; exit;}
  $GLOBALS["tpdb"]->Version   = intval($GLOBALS["PDB_DATABASE"][$GLOBALS["APPDATAVIDX"]][$GLOBALS["DDBNAME"]]["VERSION"],16);
  $GLOBALS["tpdb"]->TypeID    = $GLOBALS["PDB_DATABASE"][$GLOBALS["APPDATAVIDX"]][$GLOBALS["DDBNAME"]]["TYPE"];
  $GLOBALS["tpdb"]->CreatorID = $GLOBALS["PDB_DATABASE"][$GLOBALS["APPDATAVIDX"]][$GLOBALS["DDBNAME"]]["CREATOR"];
  $GLOBALS["tpdb"]->WriteToFile($file);
  fclose($file);
  @unlink($GLOBALS["DBFILE"]);
  xrename($ndbf,$GLOBALS["DBFILE"]);
  chmod($GLOBALS["DBFILE"],0666);
}

// zapisać nowe dane o sesji;
$fp = @fopen($sesfile,"a+");
if($fp) {
  fputs($fp,'<?PHP');
  fputs($fp,"\n");
  fputs($fp,sprintf('$GLOBALS["UPDATED"]=%d;',$GLOBALS["UPDATED"]));
  fputs($fp,"\n");
  fputs($fp,'?>');
  fclose($fp);
  echo "OK";
} else {
  applog(sprintf("Error: Nie zapisano danych do pliku sesji [%s][potw_2_db.inc]",$sesfile));
  echo "NO - nie zapisano danych";
}

?>
