/**
  * Luo tehtävän painikkeet tarkastaen käyttäjän oikeudet. Palauttaa
  * painikkeiden html-koodin taulukossa, joka voi olla tyhjä.
  * 
  * Painikkeet liittyvät ratkaisun muokkaukseen, poistoon, oikeuksien
  * jakamiseen ja uuden kuvan lisäämiseen, joihin kaikkiin tarvitaan
  * peruskäyttäjää enemmän valtuuksia. Oikeuksien tarkistus vaatii
  * sen verran logiikkaa, ettei sitä oikein tunnu sopivalta tehdä
  * näkymissä.
  *
  * @param int $id_teht Sen tehtävän tunniste, jonka painikkeita haetaan.
  */
 function luo_tehtavapainikkeet($id_teht)
 {
     $tietokantaolio = $this->get_tietokantaolio();
     $omaid = $this->get_kayttaja()->get_id();
     $id_kokon = $this->get_parametriolio()->id_kokon;
     $parametriolio = $this->get_parametriolio();
     $painikkeet = array();
     $poistonappi = "";
     $muokkausnappi = "";
     $ratkaisunappi = "";
     /* Ratkaisujen näyttö */
     $uusi_ratkaisu_nappi = "";
     /* Uuden ratkaisun lisääminen */
     $uusi_kuva_painike = "";
     $jaa_oikeuksia_nappi = "";
     $nayta_koodi_nappi = "";
     // Haetaan ensin tehtävä:
     $tehtava = new Tehtava($id_teht, $tietokantaolio);
     if ($tehtava->olio_loytyi_tietokannasta) {
         // Lasketaan ratkaisut ja näytetään ratkaisupainike vain, jos
         // ratkaisuja on olemassa:
         $ratkaisut = $this->ratkaisukontrolleri->hae_ratkaisut($id_teht);
         $ratk_lkm = sizeof($ratkaisut);
         if ($ratk_lkm > 0) {
             // Ratkaisut näkyvät kaikille:
             $onsubmit_funktionimi = "hae_ratkaisut";
             $onsubmit_parametrit = array($tehtava->getId(), $id_kokon, $omaid);
             $form_maaritteet = array('method' => 'post', 'class' => 'rinnakkain', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_teht=" . $tehtava->getId() . "&id_kokon=" . $id_kokon . "&kohde_kuva=" . Kuvat::$kohde_ratkaisu . "&" . Oliotyyppi::$naytettava_name . "=" . Palaute::$NAYTETTAVA_OLIOTYYPPI_RATKAISU);
             $input_maaritteet = array('name' => Toimintonimet::$tehtavatoiminto, 'value' => Painikkeet::$ratkaisu_nayta_ratkaisut_value, 'title' => Painikkeet::$ratkaisu_nayta_ratkaisut_title . " (" . $ratk_lkm . ")");
             $ratkaisunappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet);
         }
         //==================================================================
         $kohdeoikeudet = Henkilo::hae_kayttajan_kohdeoikeudet($tehtava->getHenkiloId(), $omaid, Oliotyyppi::$TEHTAVA, $tehtava->getId(), $tietokantaolio);
         // Muokkaus ja poisto tietysti sopivan korkeille henkilöille.
         // HUOMAA: jatkossa myös sopivasti muokkaajille!
         if ($kohdeoikeudet >= Lisavaltuudet::$SAA_MUOKATA_JA_POISTAA) {
             // POistopainike:
             $class = "rinnakkain";
             $id = "";
             $action = "{$_SERVER['PHP_SELF']}" . "?id_teht=" . $tehtava->getId() . "&id_kokon=" . $id_kokon . "&kohde_kuva=" . Kuvat::$kohde_tehtava;
             $name = Toimintonimet::$tehtavatoiminto;
             $value = Painikkeet::$tehtava_poista_value;
             $poistonappi = Html::luo_painikelomake($class, $id, $action, $name, $value);
             // Oikeuksia saa jakaa vain omistaja ja kunkku.
             if ($kohdeoikeudet + 0 === Lisavaltuudet::$KAIKKI_OIKEUDET + 0) {
                 // Oikeuksien eli lisävaltuuksien jakopainike:======================
                 $action_os = "oletus";
                 $action_kyselymuuttujat = array("id_kokon", "oppiaine_kokon", "kieli_id", Kayttajakontrolleri::$lv_name_kohdeolio_id, Kayttajakontrolleri::$lv_name_kohdeoliotyyppi, Kayttajakontrolleri::$lv_name_omistaja_id);
                 $action_kyselyarvot = array($id_kokon, $parametriolio->oppiaine_kokon, $parametriolio->kieli_id, $tehtava->getId(), Oliotyyppi::$TEHTAVA, $tehtava->getHenkiloId());
                 $jaa_oikeuksia_nappi = Kayttajanakymat::luo_jaa_lisaoikeuksia_painike($action_os, $action_kyselymuuttujat, $action_kyselyarvot);
                 //==================================================================
             }
         }
         // Muokkaus:
         if ($kohdeoikeudet >= Lisavaltuudet::$SAA_MUOKATA_EI_POISTAA) {
             // Muokkauspainike:
             $class = "muokkauspainike";
             $id = "";
             /* HUOM! ÄLÄ JÄTÄ TYHJIÄ VÄLEJÄ =-MERKIN YMPÄRILLE!
              * AIHEUTTIVAT SEN, ETTÄ TEHTÄVÄNANTO EI NÄKYNYT! */
             $action = "{$_SERVER['PHP_SELF']}" . "?id_teht=" . $tehtava->getId() . "&id_kokon=" . $id_kokon . "&kohde_kuva=" . Kuvat::$kohde_tehtava;
             $name = Toimintonimet::$tehtavatoiminto;
             $value = Painikkeet::$tehtava_muokkaa_value;
             $muokkausnappi = Html::luo_painikelomake($class, $id, $action, $name, $value);
             /* Uuden kuvan lisäyspainike tehtävään*/
             $onsubmit_funktionimi = "nayta_kuvalomake";
             $onsubmit_parametrit = array($tehtava->getId());
             $form_maaritteet = array('method' => 'post', 'class' => 'rinnakkain', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_kokon=" . $id_kokon . "&id_teht=" . $tehtava->getId() . "&uusi_kuva=true" . "&kohde_kuva=" . Kuvat::$kohde_tehtava);
             $input_maaritteet = array('name' => Toimintonimet::$tehtavatoiminto, 'value' => Painikkeet::$tehtava_lisaa_kuva_value, 'title' => Painikkeet::$tehtava_lisaa_kuva_title);
             try {
                 $uusi_kuva_painike = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet);
             } catch (Exception $poikkeus) {
                 $palaute .= "Virhe kuvanapin luomisessa: " . $poikkeus->getMessage();
             }
         }
         // Koodipainike, ellei ole piilotettu:
         if ($kohdeoikeudet >= Lisavaltuudet::$SAA_NAHDA_EI_MUOKATA_EI_POISTAA || $tehtava->getNakyvyys() + 0 === Nakyvyys::$JULKINEN) {
             // Koodia voivat kaikki vilkaista, jos vain näkyvissä:
             $nayta_koodi_nappi = Html::luo_button(Painikkeet::$NAYTA_KOODI_value, array(Attr::title(Painikkeet::$NAYTA_KOODI_title), Attr::onclick("hae_koodi", array($tehtava->get_id(), Oliotyyppi::$TEHTAVA))));
         }
         //============== Ratkaisun lisäyspainike ===========================
         // Uuden ratkaisun lisäysoikeudet (kohdeoikeudet ei oikein istu tähän):
         if ($this->get_kayttaja()->get_arvo(Henkilo::$sarakenimi_valtuudet) >= Valtuudet::$TEHTAVA_LISAYS) {
             // Uusi_ratkaisu_painike:
             try {
                 $onsubmit_funktionimi = "nayta_ratkaisulomake";
                 $onsubmit_parametrit = array($tehtava->getId());
                 /* Tehtävän id */
                 $form_maaritteet = array('method' => 'post', 'class' => 'rinnakkain', 'action' => "{$_SERVER['PHP_SELF']}?" . "id_teht=" . $tehtava->getId() . "&id_kokon=" . $id_kokon . "&uusi=1" . "&kohde_kuva=" . Kuvat::$kohde_ratkaisu);
                 $input_maaritteet = array('name' => Toimintonimet::$tehtavatoiminto, 'value' => Painikkeet::$ratkaisu_uusi_value);
                 $uusi_ratkaisu_nappi = Html::luo_submit_painike_onsubmit_toiminnolla($onsubmit_funktionimi, $onsubmit_parametrit, $form_maaritteet, $input_maaritteet);
             } catch (Exception $poikkeus) {
                 $sisalto .= "Uusi ratkaisu -painike: " . $poikkeus->getMessage();
             }
         }
     }
     $ehdokkaat = array($ratkaisunappi, $uusi_ratkaisu_nappi, $muokkausnappi, $nayta_koodi_nappi, $uusi_kuva_painike, $jaa_oikeuksia_nappi, $poistonappi);
     // Otetaan mukaan ne painikkeet, jotka eivät ole tyhjiä:
     foreach ($ehdokkaat as $nappi) {
         if (!empty($nappi)) {
             array_push($painikkeet, $nappi);
         }
     }
     return $painikkeet;
 }