Commit Graph

138 Commits

Author SHA1 Message Date
a898da119e Laitteiden Tyyppi ja Funktio kentät muutettu dropdown-valikoiksi
Vapaa tekstikenttä → select-dropdown valmiilla vaihtoehdoilla:
- Tyyppi: Reititin, Kytkin, Palomuuri, Tukiasema, Palvelin, OLT, ONT, Mediamuunnin, Muu
- Funktio: PE/EDGE/CPE Reititin, Core/Aggregaatio/Access-kytkin, WAN GW, WLAN Controller, Asiakaslaite, Muu
- Tyyppi-sarake siirretty ennen Funktio-saraketta
- setSelectValue helper: lisää puuttuvan option automaattisesti muokatessa vanhaa dataa

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 12:32:55 +02:00
565259423d Ohjeet: kuva-upload -toiminto Markdown-editoriin
- "Kuva" -nappi toolbarissa avaa tiedostovalitsimen
- Kuva uploadataan serverille (max 5MB, PNG/JPG/GIF/WebP)
- Markdown ![kuva](url) -tagi lisätään automaattisesti editoriin
- Kuva renderöityy lukunäkymässä ja esikatselussa
- API: guide_image_upload (upload) + guide_image (serve)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 12:24:36 +02:00
7c4060bfa8 Ohjeet-moduuli: Confluence-tyylinen tietopankki asiakaspalvelijoille
Uusi moduuli "Ohjeet" jossa ylläpitäjä voi kirjoittaa ohjeita
asiakaspalvelijoille miten asioita tehdään.

Ominaisuudet:
- Korttipohjainen listanäkymä (grid) hakutoiminnolla ja kategoriasuodatuksella
- Markdown-editori toolbarilla (B, I, H2, H3, listat, linkit, koodi, lainaukset)
- Esikatselu-toggle muokkausnäkymässä
- Artikkelien lukunäkymä renderoitulla Markdownilla
- Kategorioiden hallinta (lisää/poista)
- Tagit ja kiinnitys (pinned) -toiminto
- Oikeushallinta: kaikki lukevat, admin luo/muokkaa/poistaa
- Moduuli näkyy/piiloutuu yrityskohtaisista asetuksista
- Muutokset kirjautuvat muutoslokiin

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 12:19:00 +02:00
f4f11505d2 Korjaa sijaintien muokkaus: vaihtaa asetukset-välilehdelle
Tekniikka-tabin sijainnit-taulukosta muokkaus ohjaa nyt
oikeaan paikkaan asetuksissa ja scrollaa lomakkeeseen.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:53:59 +02:00
9a9f12fb0b Poista ylimääräiset Lisää sijainti -napit (laitteet + sijainnit)
Sijainnit lisätään yrityksen asetuksista, joten tekniikka-
välilehden turhat Lisää sijainti -napit poistettu.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:12:46 +02:00
56c9e3d2d0 IPAM: piilota vapaat lohkot varatun subnetin alta
Kun subnet on merkitty varatuksi, vapaita lohkoja ei näytetä
sen sisällä — koko verkko on jo allokoitu.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:31:13 +02:00
6a84231cce IPAM: VLAN-duplikaattivaroitus "jatketaanko silti" -dialogilla
API palauttaa 409 kun VLAN-numero on jo olemassa, frontend
näyttää confirm-dialogin. Käyttäjä voi valita jatkaako vai ei.
IP/verkko-duplikaatti estää edelleen kokonaan (400).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:08:34 +02:00
410e46a4fb IPAM: vapaan lohkon klikkaus avaa lisää-modaalin esitäytettynä
Vapaa-rivin klikkaus avaa "Lisää verkko / IP" -lomakkeen,
jossa verkko-osoite on esitäytetty klikatulla vapaalla lohkolla
ja fokus siirtyy nimi-kenttään.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 09:53:18 +02:00
44053d27f2 IPAM: duplikaatti-IP-tarkistus, vapaat lohkot, asiakas-kentän poisto + varattu oletus
- Duplikaatti-IP/verkko -tarkistus: estää saman verkko-osoitteen lisäämisen kahdesti
- Vapaan tilan näyttö: kun subnet avataan, näytetään vapaat osoitelohkot lasten välissä (vihreä "Vapaa"-rivi)
- Asiakas-kenttä poistettu IPAM-näkymästä (taulukot, lomake, haku)
- Varattu oletustilaksi verkkoa/VLANia lisättäessä

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 09:50:18 +02:00
8a73423bf1 Auto-VLAN käyttää subnetin nimeä + poistettu Reserved-tila
- Auto-VLAN saa subnetin/IP:n nimen (ei enää geneeristä 'VLAN X')
- Poistettu 'Reserved' tila-vaihtoehto lomakkeesta (Varattu riittää)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 09:36:57 +02:00
7222f817ab IPAM: IPv6-tuki + subnetin käyttöaste-laskuri
- parseNetwork() ja isSubnetOf() tukevat nyt IPv4 ja IPv6 (BigInt)
- IPv6 verkot (esim. 2001:db8::/32) sijoittuvat puuhierarkiaan
- Subnetin kohdalla näytetään käyttöaste: esim. "3/256" kertoo
  kuinka monta alisubnettia on käytössä vs kapasiteetti
- Ei-parsittavat osoitteet näytetään puun juuressa

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 09:36:11 +02:00
2686377fe2 Auto-VLAN: verkon/IP:n VLAN-numero luo VLANin automaattisesti
Kun tallennetaan subnet tai IP jossa on VLAN-numero, tarkistetaan
löytyykö kyseinen VLAN jo listalta. Jos ei, luodaan se automaattisesti
VLAN-luetteloon.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 09:31:54 +02:00
5a77c70a7e IPAM: VLAN-kenttä takaisin vapaaksi numerokentäksi
Dropdown oli liian rajoittava — nyt VLAN-numeron voi kirjoittaa
vapaasti lomakkeeseen verkkojen ja IP:iden kohdalla.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 09:29:15 +02:00
9830ed6b82 Tekniikka sub-tab pysyy refreshin yli (hash-navigointi)
URL-hash tallentaa nyt sub-tabin: #tekniikka/ipam, #tekniikka/sites
jne. Refreshatessa palataan samalle sub-tabille.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 09:25:57 +02:00
03c9a7605a Auto-IPAM: laitteen hallintaosoite varataan automaattisesti
Kun laitteelle tallennetaan hallintaosoite (IP), IPAM:iin luodaan
automaattisesti varattu IP-merkintä laitteen nimellä ja sijainnilla.
Jos IP on jo IPAM:issa, päivitetään se varatuksi laitteelle.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 09:22:16 +02:00
75e4ab4b42 IPAM: VLAN- ja asiakas-dropdownit lomakkeeseen
- VLAN-kenttä on nyt dropdown joka populoidaan VLAN-listasta
  (subnetit viittaavat VLANeihin)
- Asiakas-kenttä on dropdown joka populoidaan asiakaslistasta
- Verkkonäkymässä VLAN-sarakkeessa näkyy numero + nimi viitteenä
- VLAN-osio näkyy aina (myös tyhjänä)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 09:18:43 +02:00
565a7b6ab3 IPAM: Hierarkkinen puunäkymä + VLANit erilleen
- Subnetit ja IP:t näytetään hierarkkisena puuna jossa pienemmät
  verkot menevät isomman sisään (esim. /24 → /16 → /8)
- Expand/collapse klikkaamalla ▶/▼ ikonia
- Drill-down: poraudu verkon sisään → -nuolella, breadcrumb ylhäällä
- VLANit erotettu omaksi luetteloksi verkkojen alapuolelle
- Omat "Lisää verkko/IP" ja "Lisää VLAN" -napit

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 09:13:53 +02:00
1dc04326aa IPv6-tuki IP-rajoitukseen
Vaihdettu ip2long() -> inet_pton() joka tukee sekä IPv4 että IPv6.
CIDR-alueet toimivat molemmilla (esim. 2001:db8::/32).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 08:54:40 +02:00
2b4591c49f Korjaa getClientIp() X-Forwarded-For parsinta + näytä IP virheessä
X-Forwarded-For voi sisältää useita IP:tä pilkulla erotettuna.
Otetaan nyt vain ensimmäinen (asiakkaan oikea IP). Lisäksi
näytetään havaittu IP virheviestissä debuggausta varten.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 08:53:32 +02:00
8b8237ed52 Poista superadmin-backdoor maininta IP-rajoituksen helptextistä
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 08:50:07 +02:00
b1b1dd1feb IP-rajoitus: oletusarvo 'kaikki' kentässä
Tyhjä kenttä tai 'kaikki' = ei rajoitusta. UI näyttää 'kaikki'
oletuksena uusille yrityksille.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 08:49:22 +02:00
250722dc41 Yrityskohtainen IP-rajoitus kirjautumiseen
Lisätty allowed_ips kenttä yrityksiin. Tyhjä = ei rajoitusta,
muuten vain listatut IP:t/CIDR-alueet pääsevät kirjautumaan.
Superadmin ohittaa aina IP-tarkistuksen (backdoor).

Tarkistus tehdään login, check_auth ja company_switch -endpointeissa.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 08:48:34 +02:00
dd1125e2ab Osoitettu -> Agentti tikettilistan sarakkeessa
Vaihdettu sarakkeen nimi 'Osoitettu' -> 'Agentti' ja
detail-näkymän dropdown 'Ei osoitettu' -> 'Ei agenttia'.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 08:42:24 +02:00
75560c2b66 Tikettilista: Asiakas-sarake Tilan jälkeen + Osoitettu-sarake
Siirretty Asiakas-sarake heti Tila-sarakkeen jälkeen ja lisätty
uusi Osoitettu (assigned_to) -sarake viimeiseksi sarakkeeksi.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 08:38:15 +02:00
ba440b4882 Poista ratkaistu-tila tiketeistä, pidetään vain suljettu
Ratkaistu ja suljettu olivat käytännössä sama asia. Nyt vain:
Uusi → Käsittelyssä → Odottaa vastausta → Suljettu.
Vanhat ratkaistu-tiketit näkyvät edelleen (CSS jätetty).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 08:31:42 +02:00
cc974f0aa8 Muuta päättynyt sopimus -> jatkuva (vihreä)
Määräaikaisuuden päätyttyä sopimus jatkuu toistaiseksi voimassa
olevana, joten näytetään "(jatkuva)" vihreällä punaisella
"(päättynyt)" sijaan.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 08:27:42 +02:00
417728683c Piilota asiakashinnat oletuksena + näytä sopimuksen jäljellä oleva aika
Hinnat:
- Asiakastaulukon hinnat blurrattu oletuksena (privacy)
- Hinta/kk -otsikossa silmä-checkbox jolla saa hinnat näkyviin/piiloon
- Blur pätee myös asiakaskortin detail-näkymään

Sopimuskausi:
- Näyttää jäljellä olevan ajan sulkeissa: "36 kk (30 kk jäljellä)"
- Päättyneet sopimukset punaisella: "36 kk (päättynyt)"
- Aloituspäivä poistettu luettelonäkymästä (näkyy detail-kortissa)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 08:24:38 +02:00
64bf6aa2da Poista vastauspohjat asetuksista, pidetään vain tikettipuolella
Vastauspohjien hallinta kuuluu asiakaspalvelu-osioon, ei API-asetusten alle.
Poistettu tuplana ollut HTML-osio + siihen liittyvät JS-eventlistenerit.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 08:20:44 +02:00
07e9c63c47 Tikettinumerointi (VVNKKNN) + automaattinen vastaus
Tikettinumero:
- Uudet tiketit saavat juoksevan numeron VVNKKNN-formaatissa
  (vuosi+kuukausi sekoitettu sekvenssiin, esim. 2600301)
- Numero näkyy tikettilistassa ja detail-näkymässä (#-merkillä)
- Sähköpostin aihe muotoa "Tiketti #2600301: Alkuperäinen aihe"
- Vastaukset ketjuuntuvat automaattisesti

Autoreply:
- Postilaatikkokohtainen asetus: checkbox + viestisisältö
- Uusi tiketti lähettää automaattisen vastauksen asiakkaalle
- Autoreply näkyy tiketin viestiketjussa ( Automaattinen vastaus)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 00:24:17 +02:00
96a35c7e0b UX-parannukset postilaatikon asetuksiin
- Poista SMTP override-testikentät (ei tarpeen enää)
- Tallennus pitää lomakkeen auki + näyttää "Tallennettu" -ilmoituksen
- SMTP-kenttäjärjestys samaksi kuin IMAP: Palvelin → Portti → Tunnus → Salasana → Salaus

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 00:07:46 +02:00
335ed540f1 Korjaa captcha race condition + paranna SMTP-debuggausta
Captcha: loadBranding() ensin, sitten captcha+auth, jotta sessio-cookie
on luotu ennen captcha-latausta (estää eri sessiot rinnakkaisilla kutsuilla).

SMTP-testi: lisää salasanavihje (3 ensimmäistä + 2 viimeistä merkkiä),
override-kentät joilla voi testata eri tunnuksilla suoraan ilman DB:tä.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 00:01:52 +02:00
1a41579e4b Lisää SMTP-testaustyökalu postilaatikon asetuksiin
Korvaa mailbox_debug-endpoint kattavalla smtp_test-endpointilla,
joka testaa yhteyden, TLS:n ja autentikoinnin vaihe vaiheelta.
"Testaa SMTP" -nappi lomakkeessa näyttää tulokset.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 23:57:34 +02:00
d5b015d71a Lisää fallback-ketju SMTP-tunnuksille
Jos smtp_user on tyhjä, käytetään imap_useria, sitten
smtp_from_emailia. Jos smtp_password on tyhjä, käytetään
imap_passwordia. Korjaa tilanteen jossa imap_user-kenttä
on tyhjä mutta salasana ja asetukset ovat oikein.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 23:44:47 +02:00
cbf2bd93c8 Lisää mailbox-debug virheviestiin lähetyksen epäonnistuessa
Näyttää smtp_host, smtp_port, smtp_user, smtp_pass_len,
imap_host, imap_user, imap_pass_len suoraan alertissa
niin nähdään heti onko asetukset oikein.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 23:43:55 +02:00
feb2823bf8 Lisää väliaikainen mailbox_debug endpoint
Näyttää SMTP-asetukset ja salasanojen pituudet debuggausta varten.
Poistetaan kun SMTP toimii.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 23:41:48 +02:00
ee01926aab Kirjoita SMTP-client uusiksi: AUTH PLAIN + LOGIN, SSL-konteksti
- Kunnon multi-line response -lukija (smtpReadResponse)
- Kokeilee ensin AUTH PLAIN, sitten AUTH LOGIN fallbackinä
- SSL-konteksti sallii self-signed-sertifikaatit (Plesk)
- Täysi debug-loki joka vaiheesta (näkyy error_log:ssa)
- Virheviestissä salasanan pituus (ei itse salasanaa)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 23:39:12 +02:00
f7e5a3c1db Korjaa SMTP-salasanan kopiointi kun käytetään samoja tunnuksia
Kun SMTP-salasana jää tyhjäksi (vanha SMTP-salasana ei ole
koskaan asetettu) mutta käyttäjätunnus on sama kuin IMAP:ssa,
kopioidaan automaattisesti IMAP-salasana SMTP:lle. Korjaa
AUTH-virheen joka tuli koska SMTP-salasana tallentui tyhjänä.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 23:35:17 +02:00
6c1ee4e0d8 Lisää tarkka virheviesti SMTP-lähetykseen debuggausta varten
Virheviesti palautetaan nyt frontendille tarkan SMTP-vaiheen
kera (connect, STARTTLS, AUTH, MAIL FROM, RCPT TO, DATA, send),
jotta nähdään missä kohtaa lähetys epäonnistuu.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 23:30:28 +02:00
ff2613ff01 SMTP-palvelin aina näkyvissä + CuituNet → Cuitunet
- SMTP-palvelinkenttä näkyy nyt aina mailbox-lomakkeessa,
  myös kun "Käytä samoja tunnuksia" on päällä (vain käyttäjä
  ja salasana piiloutuvat)
- Korjattu CuituNet → Cuitunet kaikkialla (pieni n)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 23:28:31 +02:00
0efd4c11ee Lisää Oy yrityksen nimen perään oletusallekirjoituksessa
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 23:24:23 +02:00
5ea01ce7b3 Lisää oletusallekirjoitus kaikille käyttäjille
Jos käyttäjä ei ole asettanut omaa allekirjoitusta mailboxille,
generoidaan automaattisesti oletus:
  Etunimi
  Yrityksen nimi
  Postilaatikon sähköpostiosoite

Toimii sekä esikatselu-previewssä että sähköpostin lähetyksessä.
Käyttäjä voi yliajaa oletuksen tallentamalla oman allekirjoituksen
profiilin kautta.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 23:21:35 +02:00
2da63262a7 Näytä SMTP-portti ja salaus aina mailbox-lomakkeessa
Portti ja salaus tarvitaan aina (IMAP=993/SSL vs SMTP=587/TLS),
joten ne näkyvät nyt checkboxin tilasta riippumatta.
"Käytä samoja tunnuksia" piilottaa vain palvelimen, käyttäjän
ja salasanan.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 23:14:20 +02:00
eaf47d5b78 Yhdistä IMAP/SMTP-asetukset vierekkäin + "Käytä samoja tunnuksia"
Mailbox-lomake näyttää nyt Saapuva (IMAP) ja Lähtevä (SMTP)
vierekkäin. SMTP-puolella on "Käytä samoja tunnuksia kuin
saapuvassa" -checkbox (oletuksena päällä), joka piilottaa
SMTP-kentät ja kopioi IMAP-asetukset tallennettaessa.
Lähettäjän sähköposti ja nimi omana osionaan alhaalla.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 22:50:45 +02:00
78f25d0079 Lisää SMTP-lähetystuki postilaatikoihin
Aiemmin sähköpostit lähetettiin PHP mail()-funktiolla, mikä
ei toimi kunnolla useimmilla palvelimilla (SPF/DKIM-ongelmat).
Nyt mailboxiin voi konfiguroida SMTP-asetukset (host, port,
user, pass, encryption), ja lähetys tapahtuu suoraan
SMTP-palvelimen kautta socket-yhteydellä. Fallback PHP
mail():iin jos SMTP-asetuksia ei ole asetettu.

- db.php: smtp_host/port/user/password/encryption sarakkeet
- api.php: sendViaSMTP() socket-pohjainen SMTP-client
- index.html: SMTP-kentät mailbox-lomakkeeseen
- script.js: SMTP-kenttien luku/kirjoitus lomakkeessa

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 22:46:28 +02:00
a13f3e00a5 Paranna allekirjoituksen esikatselu-logiikkaa
Lisää fallback-haku: kokeillaan ensin suoraan mailbox-id:llä,
sitten string/number-konversiolla, ja lopuksi käytetään
ensimmäistä löytyvää allekirjoitusta jos mitään ei matchaa.
Tämä korjaa tilanteen jossa mailbox_id:n tyyppi ei täsmää
tai tiketti on tullut tuntemattoman mailboxin kautta.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 22:30:36 +02:00
e1cc95f306 Siirrä allekirjoituksen esikatselu checkboxin alle
Käyttäjä näkee nyt "Käytä allekirjoitusta" -täpän alla
suoraan mitä allekirjoitustekstiä viestiin liitetään.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 22:18:03 +02:00
5d6aa981b2 feat: TO-kenttä näkyviin vastauslomakkeessa
- Vastaanottaja (TO) näkyy nyt Lähettäjä- ja CC-kenttien välissä
- Esitäytetään tiketin alkuperäisen lähettäjän osoitteella
- Muokattavissa ennen lähetystä
- Backend käyttää frontendistä tullutta TO:ta tai fallbackina from_email

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 22:12:12 +02:00
83509fffc5 fix: käännä allekirjoitus-checkbox → "Käytä allekirjoitusta" (oletuksena päällä)
Checkbox nyt oletuksena rastittuna = allekirjoitus mukaan. Rastin poisto
poistaa allekirjoituksen viestistä.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 22:02:45 +02:00
2d2680483c feat: vastauspohjien hallinta asiakaspalvelu-tabissa + allekirjoitus-checkbox
- Vastauspohjat nyt hallittavissa Asiakaspalvelu-tabin kautta (kaikille käyttäjille)
- Uusi "Vastauspohjat" -nappi tikettilistan yläpalkissa
- CRUD: lisää, muokkaa, poista vastauspohjia tukitabin näkymässä
- "Älä käytä allekirjoitusta" -checkbox vastauslomakkeessa (oletuksena päällä)
- Backend: no_signature-parametri estää allekirjoituksen liittämisen
- Poistettu orpo profiili-vastauspohjien JS-koodi

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 21:51:56 +02:00
f6e11f8426 feat: oma profiili -toiminto + placeholder-siivous + poista fix-skriptit
- Lisätty "Oma profiili" -nappi headeriin (⚙ + nimen klikkaus)
- Profiili-modaali: muokkaa nimi, sähköposti, salasana, allekirjoitukset
- Uusi profile_update API-endpoint (vaatii vain kirjautumisen)
- check_auth palauttaa nyt myös email-kentän
- Siivottu kaikki yrityskohtaiset placeholder-tekstit geneerisiksi
  (cuitunet.fi → yritys.fi, Kauppakatu → Esimerkkikatu, jne.)
- Poistettu väliaikaiset fix_role.php ja fix_saatavuus.php

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 21:38:32 +02:00