/** * Näyttää linkit liittyen kokonaisuuksiin. Jos kokonaisuusvektori on tyhjä * tai ei ole määritelty, palautetaan tyhjä merkkijono. * * Kuhunkin linkkiin liittyy session-muuttuja, joka määrittelee, näytetäänkö * linkin jälkeläiset. Muuttujan nimi on kokonaisuuden id ja arvona "auki" tai * "kiinni". Huomaa, että arvo liittyy nimenomaan jälkeläisten näyttämiseen, * ei kyseisen kokonaisuuden näyttämiseen! * * * @param Parametrit $parametriolio * @param bool $nayta_kiintolinkit * @return <type> */ function hae_kokonaisuuslinkit($parametriolio, $nayta_kiintolinkit) { $kokonaisuudet = $parametriolio->kokonaisuusoliot; $id_kokon = $parametriolio->id_kokon; // Klikattu / aukaistava kokonaisuus $linkki_html = ""; $tietokantaolio = $parametriolio->get_tietokantaolio(); $on_kirjautunut = Henkilo::on_kirjautunut($parametriolio->get_omaid(), $tietokantaolio); if ($nayta_kiintolinkit) { //$linkki_html .= // Html::luo_a_linkto('../index.php', // Tekstit::$linkki_kokon_etusivu, // array()); } // Jos tullaan sivun ulkopuolisesta linkistä (siis urlin kautta), pitää // aukaista kaikki kokonaisuudet, jotka ovat näytettävän kokonaisuuden // yläpuolella, jotta koko linkkipuu on näkyvissä näytettävään kokonai- // suuteen asti. if ($parametriolio->naytto_urlin_mukaan()) { $id_avattava = $id_kokon; $kokon_avattava = new Kokonaisuusolio($id_avattava, $tietokantaolio); $ylakokon_id_avattava = $kokon_avattava->getYlakokonaisuuden_id(); do { if ($kokon_avattava instanceof Kokonaisuusolio) { $muuttujanimi = Parametrit::linkkisessiomuuttujan_nimi($kokon_avattava->get_id()); $_SESSION[$muuttujanimi] = Kokonaisuusolio::$LINKKI_AUKI; // Haetaan yläkokonaisuus: $kokon_avattava = new Kokonaisuusolio($ylakokon_id_avattava, $tietokantaolio); // Ja uusi yläkokon_id $ylakokon_id_avattava = $kokon_avattava->getYlakokonaisuuden_id(); } } while ($kokon_avattava->olio_loytyi_tietokannasta); } if (isset($kokonaisuudet) && is_array($kokonaisuudet)) { if (!empty($kokonaisuudet)) { $linkki_html .= "<table>"; $rajataso = 0; $piilotus_kaynnissa = false; // Näytetäänkö linkit vai ei. foreach ($kokonaisuudet as $kokon) { if ($kokon instanceof Kokonaisuusolio) { $taso = $kokon->getOtsikkotaso(); if ($taso > 8) { $taso = 8; /* Enempää tasoja ei ole tyyleissä */ } // Tarkistetaan tässä, ollaanko tultu pois piilotettavien // alilinkkien joukosta if ($piilotus_kaynnissa && $kokon->getOtsikkotaso() <= $rajataso) { $piilotus_kaynnissa = false; } // Muotoillaan linkkielementin alkutagi===================== // Linkkielementin alkutagin alku: $linkki_id = "linkki" . $kokon->get_id(); $rivin_alku = "<tr class='linkkielementti'" . "id='" . $linkki_id . "'"; // Session-muuttuja sanelee näyttämisen. // HUOM! Linkki_kiinni/linkki_auki vaikuttaa lapsilinkkeihin, ei // varsinaisen linkin näkymiseen! Tämän avulla muistetaan // puurakenne. // Idea: kokonaisuuslista käydään läpi. Jokaisen kohdalla // tarkistetaan onko auki. Jos kiinni, käydään läpi alilinkit // ja poistetaan näkyvistä. Samalla tarkistetaan sessio- // muuttuja ja asetetaan ei-määritellyt kiinni-oleviksi, // jolloin linkistö on avatessa mahdollisimman kiinni. $linkkielem_style = " "; $muuttujanimi = Parametrit::linkkisessiomuuttujan_nimi($kokon->get_id()); // Eka kerralla ja ryhmän vaihdon yhteydessä suljetaan // kaikki linkit. Poikkeus: kun tullaan linkin kautta, // on järkevää avata kyseisen kokonaisuuden aliotsikot. // Kokonaisuusryhmän_vaihto on oletusarvoisesti false. if (!isset($_SESSION[$muuttujanimi]) || $parametriolio->kokonaisuusryhman_vaihto) { $_SESSION[$muuttujanimi] = Kokonaisuusolio::$LINKKI_KIINNI; // Käsitellään tässä tulo linkin kautta, jolloin // määritellään sessioarvo näytettävän alikoko- // suudelle: if ($parametriolio->naytto_urlin_mukaan() && $id_kokon == $kokon->getYlakokonaisuuden_id()) { // Linkki kiinni -> näkyy vain yksi taso alemma. // (tämä ei kyllä sitä rajoita, mutta asettaa // plussan oikein) $_SESSION[$muuttujanimi] = Kokonaisuusolio::$LINKKI_KIINNI; } else { // Eka taso näytetään aina, mutta muita ei. if ($taso > 1) { $linkkielem_style = " style='display:none;'"; } } } else { if ($piilotus_kaynnissa) { $linkkielem_style = " style='display:none;'"; } else { if (!$piilotus_kaynnissa && $kokon->on_naytettavia_lapsia($parametriolio->get_omaid()) && $_SESSION[$muuttujanimi] == Kokonaisuusolio::$LINKKI_KIINNI) { $piilotus_kaynnissa = true; // Rajataso muutetaan tämän tasoksi, jolloin // tiedetään, milloin tullaan ylemmäksi taas. $rajataso = $kokon->getOtsikkotaso(); } else { //Ellei lapsia tai linkki auki -> näytetään seuraava // Ei lisätä tyyliä } } } // Linkkielementin alkutagin loppuosa: $rivin_alku .= $linkkielem_style . ">"; //========================================================== // Plus lisätään, jos kokonaisuudella on jälkeläisiä ja // linkki on kiinni. if ($kokon->on_naytettavia_lapsia($parametriolio->get_omaid()) && $_SESSION[$muuttujanimi] == Kokonaisuusolio::$LINKKI_KIINNI) { $plus = "+ "; } else { if ($kokon->on_naytettavia_lapsia($parametriolio->get_omaid()) && $_SESSION[$muuttujanimi] == Kokonaisuusolio::$LINKKI_AUKI) { $plus = "− "; } else { $plus = ""; } } $risuaita_id = ""; if ($parametriolio->get_kokonaisuuksien_nayttotapa() == Kokonaisuuksien_nayttotavat::$kokonaisuudet_nayta_kaikki_arvo) { $risuaita_id = "#" . $kokon->get_id(); } // Jos näytetään pelkästään tämä kokonaisuus, merkitään // se linkeissä eri ulkonäöllä, ellei ole kyseessä // kokonaisuusryhmän vaihto: if ($parametriolio->get_kokonaisuuksien_nayttotapa() == Kokonaisuuksien_nayttotavat::$kokonaisuudet_nayta_yksi_kerrallaan_arvo && !$parametriolio->kokonaisuusryhman_vaihto && $kokon->get_id() == $id_kokon) { $valitun_id = "id='valittu_kokon'"; } else { $valitun_id = ""; } $etumerkin_html = "<td class='linkin_etumerkki'" . "id='etumerkki" . $kokon->get_id() . "'" . "onmouseover='hiiri_paalla(this)'" . "onmouseout='hiiri_pois_paalta(this)'" . "onclick='vaihda_etumerkki(this.id," . $kokon->get_id() . ",\"kokonaisuudet\")'>{$plus}</td>"; /* Otsikon klikkaaminen avaa aliotsikot (jos on). */ if (!empty($plus)) { $onclick = " onclick='aukaise_aliotsikot(" . $kokon->get_id() . ")'"; } else { $onclick = ""; } $linkin_alku = "<td class='linkkisolu'><a class='taso" . $taso . "' " . $valitun_id . $onclick . " href=index.php" . "?id_kokon=" . $kokon->get_id() . $risuaita_id . ">"; $linkin_loppu = "</a></td>"; $rivin_loppu = "</tr>"; // Linkkielementin lopputagi // Otsikkonumeroita ei näytetä tietyn tason jälkeen: if ($taso > Kokonaisuusolio::$max_otsikkonron_nayttotaso) { $otsikkonro = ""; } else { $otsikkonro = $kokon->getOtsikkomerkinta() . " "; } // Julkiset näytetään ilman mukinoita: if ($kokon->getNakyvyys() + 0 === Nakyvyys::$JULKINEN) { $linkki_html .= $rivin_alku; $linkki_html .= $etumerkin_html . $linkin_alku; $linkki_html .= $otsikkonro; $linkki_html .= $kokon->getOtsikko(); $linkki_html .= $linkin_loppu; $linkki_html .= $rivin_loppu; } else { if ($kokon->getNakyvyys() + 0 === Nakyvyys::$VAIN_OTSIKKO) { $linkki_html .= $rivin_alku; $linkki_html .= $etumerkin_html . $linkin_alku; $linkki_html .= "<span class='piilotettu'>"; $linkki_html .= $otsikkonro; $linkki_html .= $kokon->getOtsikko(); $linkki_html .= "</span>"; $linkki_html .= $linkin_loppu; $linkki_html .= $rivin_loppu; } else { if ($on_kirjautunut) { // Jos näkyvyys ei ole julkinen, tarkistetaan olion // kohdeoikeudet. Tätä ei tehdä julkisille, jottei // hidasta menoa liikaa: /*======================== käyttäjän oikeudet ====*/ $kohdeoikeudet = Henkilo::hae_kayttajan_kohdeoikeudet($kokon->getHenkiloId(), $this->get_parametriolio()->get_omaid(), Oliotyyppi::$KOKONAISUUS, $kokon->get_id(), $tietokantaolio); /*===============================================*/ // Jos on vähintään muokkausoikeudet, näytetään // linkki sopivasti muotoiltuna: if ($kohdeoikeudet >= Lisavaltuudet::$SAA_MUOKATA_EI_POISTAA) { if ($kokon->getNakyvyys() + 0 === Nakyvyys::$YKSITYINEN) { $class_arvo = "yksityinen"; } else { if ($kokon->getNakyvyys() + 0 === Nakyvyys::$VAIN_KOOSTEESSA) { $class_arvo = "vain_koosteessa"; } else { $class_arvo = "tuntematon"; } } $linkki_html .= $rivin_alku; $linkki_html .= $etumerkin_html . $linkin_alku; $linkki_html .= "<span class='" . $class_arvo . "'>"; $linkki_html .= $otsikkonro; $linkki_html .= $kokon->getOtsikko(); $linkki_html .= "</span>"; $linkki_html .= $linkin_loppu; $linkki_html .= $rivin_loppu; } } else { // Ei näytetä linkkiä! } } } } } $linkki_html .= "</table>"; } } return $linkki_html; }