/** * CRUD toteutetaan jo täällä. Toteutukset voi toki kirjoittaa * asianomaisessa luokassa uusiksi tarvittaessa. * * Huomaa, ettei tietojen tarkistusta tehdä täällä varsinaisesti, mutta * standarditarkastus tehdään Tietokantasolu-luokassa (ks. Tietokantasolun * set_arvo()). * Toteuta tarvittaessa tarkempi tarkistus perityssä luokassa! * * Palauttaa onnistumisen mukaan joko Malliluokkapohja::$OPERAATIO_ONNISTUI * tai Malliluokkapohja::$VIRHE. * * Korjaus 16.3.2015: nyt metodi asettaa onnistuneen tallennuksen jälkeen * oliolle kentän $this->olio_loytyi_tietokannasta arvoksi true. Oli * unohtunut näemmä. * * @return type */ public function tallenna_uusi() { $palaute = Malliluokkapohja::$VIRHE; // Jos olio on jo tietokannassa, ei tallenneta uutena: if ($this->olio_loytyi_tietokannasta) { $this->lisaa_virheilmoitus("Olio on jo tietokannassa!"); return $palaute; } // Muussa tapauksessa jatketaan: $sarakenimet = $this->tietokantarivi->get_sarakenimet_paitsi_id(); $arvot = $this->tietokantarivi->get_arvot_paitsi_id(); // Käydään ei-id-solut läpi ja ilmoitetaan, jos jollakin eivät tiedot // ole kunnossa. Kunnollisia pitää olla sizeof($sarakenimet) kpl. $kunnolliset = 0; foreach ($this->get_tietokantasolut() as $solu) { if ($solu instanceof Tietokantasolu) { if ($solu->get_sarakenimi() != Malliluokkapohja::$SARAKENIMI_ID) { if (!$solu->tiedot_ok()) { if ($solu->get_arvo() === Pohja::$MUUTTUJAA_EI_MAARITELTY) { $this->lisaa_virheilmoitus("'" . $solu->get_sarakenimi() . "'" . Perustustekstit::$syotteen_tarkistusvirhe); } else { if ($solu->get_arvo() === Pohja::$ARVO_TYHJA) { $this->lisaa_virheilmoitus("'" . $solu->get_sarakenimi() . "'" . Perustustekstit::$muuttujan_arvo_tyhja); } else { $this->lisaa_virheilmoitus("'" . $solu->get_sarakenimi() . "'" . Perustustekstit::$muuttujan_arvo_vaarantyyppinen); } } } else { $kunnolliset++; } } } } // Katsotaan, jotta sarakenimien ja arvojen lkm täsmää. // Plus 1 tulee siitä, että id-saraketta ei ole täällä mukana. // Tässä jäädään kiinni myös, ellei jokin arvo ole määritelty, koska // silloin sen sarakenimeä ei palauteta. if ($this->tietokantarivi->get_sarakkeiden_lkm() === sizeof($sarakenimet) + 1 && (sizeof($sarakenimet) === sizeof($arvot) && $kunnolliset == sizeof($sarakenimet))) { $tallennuspalaute = $this->tietokantaolio->tallenna_rivi($this->tietokantarivi); // Jos onnistui: if ($tallennuspalaute === Tietokantaolio::$HAKU_ONNISTUI) { // Otetaan ylös tallennetun id: $uuden_id = mysql_insert_id(); $this->set_id($uuden_id); $this->set_id_tietokanta($uuden_id); $this->olio_loytyi_tietokannasta = true; $palaute = Malliluokkapohja::$OPERAATIO_ONNISTUI; } else { $this->lisaa_virheilmoitus("Tietokantavirhe uuden tallennuksessa." . " Arvot oikein? " . " Tietokantakysely: " . $tallennuspalaute); // Testausta } } else { /* Tämä voi tulla lähinnä testaajalle, joten viesti voi auttaa.*/ $this->lisaa_virheilmoitus(Perustustekstit::$virhe_arvo_vaarantyyppinen); } return $palaute; }