<?php
  define('O18PRAEMIEN','O18');
  define('UPRAEMIEN','U');
  define('U18PRAEMIEN','U18');
  define('SpendenPRAEMIEN','Spenden');
  define('PRAEMIEN0to500','0to500');
  define('PRAEMIEN500to1000','500to1000');
  define('PRAEMIEN1000to1500','1000to1500');
  define('PRAEMIENover1500','over1500');


  class praemie {
      var $id; # Datenbank-Pkey
      var $punkte;
      var $name;
      var $beschreibung;
      var $bild;
      var $spende;
      var $praemientyp;
      var $zusaetze = array();
      var $feld1;
      var $feld2;
      var $feld3;
      var $feld4;
      var $anzahlprojahr;
      var $geldpraemie;
      var $familienpraemie;
      var $showonwebsite;
      var $status;

      function __construct($id=0) {
          $id = intval($id);
          $this->id = $id;
          if ($id == 0) {
            return $this;
          }
          $query = "SELECT * FROM praemien WHERE id = $id";
          $result = dbQuery($query) or
              error("Kann Praemien nicht aus Datenbank holen: " .  dbError());
          $numRows = dbNumRows($result);
          if ($numRows != 1)
          {
              $this->id = 0;
              return $this;
          }
          $row = dbFetchRow($result);
          $this->punkte = unescape($row['punkte']);
          $this->name = unescape($row['name']);
          $this->beschreibung = unescape($row['beschreibung']);
          $this->bild = unescape($row['bild']);
          $this->spende = unescape($row['spende']);
          $this->praemientyp = unescape($row['praemientyp']);
          $this->feld1 = unescape($row['feld1']);
          $this->feld2 = unescape($row['feld2']);
          $this->feld3 = unescape($row['feld3']);
          $this->feld4 = unescape($row['feld4']);
          $this->anzahlprojahr = unescape($row['anzahlprojahr']);
          $this->geldpraemie = unescape($row['geldpraemie']);
          $this->familienpraemie = unescape($row['familienpraemie']);
          $this->showonwebsite = unescape($row['showonwebsite']);
          $this->status = unescape($row['status']);
          /* Zusaetze und Artikelnummer lesen */
          $query = "SELECT pkey FROM praemienartikel WHERE praemienid = $id";
          $result = dbQuery($query) or
              error("Kann Praemienartikel nicht aus Datenbank holen: " .  dbError());
          $numRows = dbNumRows($result);
          if ($numRows >= 1) {
              while ($row = dbFetchRow($result)) {
                  $artikelpkey = $row['pkey'];
                  $praemienartikel = new praemienartikel($artikelpkey);
                  array_push($this->zusaetze,$praemienartikel);
              }
          }

          return $this;
      }


      function insert()
      {
          $this->status='ACTIVE';
          $query = "INSERT INTO praemien
          SET punkte = '". $this->punkte. "'," .
            " name = '" . dbEscapeString($this->name). "'," .
            " beschreibung = '" . dbEscapeString($this->beschreibung). "'," .
            " bild = '" . $this->bild. "'," .
            " spende = '" . $this->spende. "'," .
            " praemientyp = '" . $this->praemientyp. "'," .
            " feld1 = '" . dbEscapeString($this->feld1) . "', " .
            " feld2 = '" . dbEscapeString($this->feld2) . "', " .
            " feld3 = '" . dbEscapeString($this->feld3) . "', " .
            " feld4 = '" . dbEscapeString($this->feld4) . "', " .
            " anzahlprojahr = '" . $this->anzahlprojahr . "', " . 
            " geldpraemie = '" . $this->geldpraemie . "', " . 
            " familienpraemie = '" . $this->familienpraemie . "', " . 
            " showonwebsite = '" . $this->showonwebsite . "', " . 
            " status= '" . $this->status . "'"; 
          $result = dbQuery($query)
            or error ("Konnte Pr&auml;mie nicht in der Datenbank speichern: " . dbError() . "<br/>$query<br/>"); 
          $this->id = dbInsertId();
          $this->insertintopraemienliste($this->praemientyp);
          foreach($this->zusaetze as $artikel) {
              $artikel->praemienid = $this->id;
              $artikel->insert();
          }
      }

      function updateData()
      {
          $query = "UPDATE praemien SET ".
            "punkte = '" . $this->punkte. "'," .
            "name = '" . dbEscapeString($this->name). "'," .
            "beschreibung = '" . dbEscapeString($this->beschreibung). "'," .
            "bild = '" . $this->bild. "'," .
            "spende = '" . $this->spende. "'," .
            "status = '" . $this->status. "'," .
            "praemientyp = '" . $this->praemientyp. "'," .
            "feld1 = '" . dbEscapeString($this->feld1). "'," .
            "feld2 = '" . dbEscapeString($this->feld2). "'," .
            "feld3 = '" . dbEscapeString($this->feld3). "'," .
            "feld4 = '" . dbEscapeString($this->feld4). "'," .
            "anzahlprojahr = '" . $this->anzahlprojahr. "'," .
            "geldpraemie = '" . $this->geldpraemie. "'," .
            "familienpraemie = '" . $this->familienpraemie. "'," .
            "showonwebsite = '" . $this->showonwebsite. "'" .
            " WHERE id = " . $this->id;

          $result = dbQuery($query)
            or error ("Konnte &Auml;nderungen nicht in der Datenbank speichern: " . dbError(). "<br/>$query<br/>"); 
          dbFreeResult($result);
          $this->insertintopraemienliste($this->praemientyp);
          foreach($this->zusaetze as $artikel) {
              $artikel->update();
          }
      }

      function delete()
      {
          /* Setzte status auf 'DELETED' */
          $query = "UPDATE praemien SET status = 'DELETED' WHERE id = " . $this->id;
          $result = dbQuery($query)
            or error ("Konnte &Auml;nderungen nicht in der Datenbank speichern: " . dbError()); 
          /*
          $liste = new praemienliste($this->praemientyp);
          $liste->deleteentry($this->id);
          if ($this->praemientyp == U18PRAEMIEN) {
              $liste = new praemienliste(O18PRAEMIEN);
              $liste->deleteentry($this->id);
          }
           */
          /*
          foreach($this->zusaetze as $artikel) {
              $artikel->delete();
          }
           */
      }

      function insertintopraemienliste($type)
      {
        $liste = new praemienliste($type);
        if ($liste->praemieexists($this->id)) {
          return;
        }
        $liste->insertentry($this->id);
        # Lösche die Praemie aus allen anderen Listen
        # wichtig, wenn sich der Praemientyp geändert hat
        foreach (Array(O18PRAEMIEN,U18PRAEMIEN,UPRAEMIEN) as $tmptype ) {
          if ($tmptype != $type) {
            $liste = new praemienliste($tmptype);
            $liste->deleteentry($this->id);
          }
        } 

        # U18-Praemien werden ebenfalls in die O18-Liste eingetragen
        if ($type == U18PRAEMIEN) {
            $liste = new praemienliste(O18PRAEMIEN);
            if ($liste->praemieexists($this->id)) {
                return;
            }
            $liste->insertentry($this->id);
        }

      }

      static public function getPraemieByName($name, $type=O18PRAEMIEN,$showdeleted = false) {
          $name = dbEscapeString($name);
          $type = dbEscapeString($type);
          $query = "SELECT * FROM praemien WHERE name = '$name' AND praemientyp = '$type'";

          if (! $showdeleted) $query .= "  AND status = 'ACTIVE'";

          $result = dbQuery($query) or
              error("Kann Praemie nicht aus Datenbank holen: " .  dbError());
          $numRows = dbNumRows($result);
          if ($numRows != 1) {
              return false;
          }
          $row = dbFetchRow($result);
          return new praemie($row['id']);
      }

      function getPraemieByHMNr($hmnr) {
          $hmnr = intval($hmnr);
          $query = "SELECT praemienid FROM praemienartikel WHERE hmnr= $hmnr";
          $result = dbQuery($query) or
              error("Kann Praemie nicht aus Datenbank holen: " .  dbError());
          $numRows = dbNumRows($result);
          if ($numRows != 1) {
              return false;
          }
          $row = dbFetchRow($result);
          return new praemie($row['praemienid']);
      }

      function getpraemienhmnr($zusatz) {
          if ($zusatz == '' || $zusatz == 'keine') {
              $query = 'SELECT hmnr FROM praemienartikel ' .
                  "WHERE praemienid = '" . $this->id . "'";
          } else {
              $query = 'SELECT hmnr FROM praemienartikel ' .
                  "WHERE praemienid = '" . $this->id . "' " .
                  "AND anzeige = '" . dbEscapeString($zusatz) . "'";
          }
          $result = dbQuery($query) or
              error("Kann Praemienartikel nicht updaten: (Query: $query):" .  
                      dbError());
          if (dbNumRows($result) != 1) {
//              print "$query\n";
              return 0;
          }
          $row = dbFetchRow($result);
          return $row['hmnr'];
      }



  }

  class praemienartikel {
      var $pkey;
      var $praemienid;
      var $artikelnr;
      var $hmnr;
      var $geldwert;
      var $anzeige;

      function __construct($pkey=0) {
          if ($pkey == 0) {
              return $this;
          }
          $pkey = intval($pkey);
          $query = "SELECT * FROM praemienartikel WHERE pkey = $pkey";
          $result = dbQuery($query) or
              error("Kann Praemienartikel nicht aus Datenbank holen: " .  
                      dbError());
          $numRows = dbNumRows($result);
          if ($numRows == 1) {
              $row = dbFetchRow($result);
              $this->pkey = $row['pkey'];
              $this->praemienid = $row['praemienid'];
              $this->artikelnr = $row['artikelnr'];
              $this->hmnr = $row['hmnr'];
              $this->geldwert = $row['geldwert'];
              $this->anzeige = unescape($row['anzeige']);
          }
          return $this;
      }
      
      function insert() {
          if ($this->geldwert == '') $this->geldwert = 0;
          $query = 'INSERT INTO praemienartikel SET ' .
              "praemienid = '" . $this->praemienid . "'," .
              "artikelnr = '" . $this->artikelnr . "'," .
              "hmnr = '" . $this->hmnr . "'," .
              "geldwert = " . $this->geldwert . "," .
              "anzeige = '" . dbEscapeString($this->anzeige) . "'";
          $result = dbQuery($query) or
              error("Kann Praemienartikel nicht eintrage: " .  
                      dbError());
          $this->pkey = dbInsertId();
      }

      function update() {
          $query = 'UPDATE praemienartikel SET ' .
              "praemienid = '" . $this->praemienid . "'," .
              "artikelnr = '" . $this->artikelnr . "'," .
              "hmnr = '" . $this->hmnr . "'," .
              "geldwert = " . $this->geldwert . "," .
              "anzeige = '" . dbEscapeString($this->anzeige) . "' ".
              "WHERE pkey = " . $this->pkey;
          $result = dbQuery($query) or
              error("Kann Praemienartikel nicht updaten: (Query: $query):" .  
                      dbError());
          $this->pkey = dbInsertId();
      }

      function delete() {
          $query = 'DELETE FROM praemienartikel ' .
              "WHERE pkey = " . $this->pkey;
          $result = dbQuery($query) or
              error("Kann Praemienartikel nicht loeschen: " .  
                      dbError());
          $this->pkey = dbInsertId();
      }


  }
