Tickets now get a unique URL hash (#support/ticket/ID) when opened.
Copy link button in ticket header copies the full URL to clipboard.
Opening a ticket link navigates directly to the ticket detail view.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Tikettinäkymän Sulje-nappi neutraaliksi btn-secondary-tyylillä
ilman punaista väritystä ja ✕-merkkiä.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Saatavuus-tyyppi oletuksiin (teal-väri)
- Fallback CSS: tuntemattomat tyypit saavat violetin taustan
- TypeLabel näyttää tyypin nimen isolla alkukirjaimella jos ei löydy labelista
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Poistettu "Haetaan sähköpostit ja synkataan Zammad..." -teksti
- Status-laatikko näytetään vasta kun tulokset on valmiit
- scrollIntoView scrollaa tuloksen näkyviin
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- prices-hidden blurraa nyt myös sidebar-stats (liittymät, laskutus, keskihinta, nopeudet)
- Summary-barin laskutus blurrautuu samalla
- Oletusnäkymä kirjautumisen jälkeen vaihdettu customers → support
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Lisää BCC-kenttä vastauslomakkeeseen (HTML, JS, API)
- To/CC/BCC tallentuvat tiketille pysyvästi (seuraava vastaus muistaa muutokset)
- Lisää to_email ja bcc sarakkeet tickets-tauluun
- BCC-tuki SMTP-lähetykseen (RCPT TO ilman headeria)
- Korjaa allekirjoitukset: buildSignaturesWithDefaults() generoi nyt oletukset
myös Zammad-sähköposteille (support@web1.fi ym.), ei pelkille mailboxeille
- Allekirjoituksiin lisätty puhelinnumero
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Zammad-synkasta tulevat viestit käyttävät tyyppiä 'outgoing' (ei 'reply_out'),
joten ne näkyivät virheellisesti saapuvina (sininen). Nyt molemmat tyypit
tunnistetaan lähteviksi ja näytetään vihreällä taustalla.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Reverse DNS -haku tallentaa hostnamen IP:n rinnalle (paljastaa
operaattorin ja alueen, esim. dsl-hel-123.elisa.fi)
- Duplikaattikyselyn (sama osoite+postinumero+kaupunki) ei tallenneta
uudelleen samalle yritykselle
- IP/hostname -sarake lisätty taulukkoon
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Endpoint näytti vain aktiivisen yrityksen kyselyt, mutta kyselyt
tallennetaan API-avaimen yrityksen alle. Nyt näytetään kaikkien
käyttäjän yritysten kyselyt + yrityssarake taulukkoon.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Jokainen nettisivujen kautta tehty saatavuustarkistus tallennetaan
tietokantaan (osoite, postinumero, kaupunki, tulos, IP, referer).
Kyselyt näkyvät Asiakkaat > Saatavuuskyselyt -välilehdellä
sivutettuna taulukkona.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
JS ei lähettänyt käyttäjän muokkaamaa To/CC-kenttää Zammad-vastauksen
mukana — backend käytti aina alkuperäistä lähettäjää tietokannasta.
Nyt käyttäjän syöttämä To/CC välitetään API:lle ja Zammadille.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Poistettu virheellinen fallback joka valitsi ensimmäisen satunnaisen
allekirjoituksen (esim. serverihuone.com) väärään tikettiin. Nyt
generoidaan oikea oletusallekirjoitus tiketin kontekstin perusteella
(käyttäjänimi + yritys + vastaanottava sähköposti + puhelin).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Puhelinnumero-kenttä yrityksen asetuksissa tallennetaan tietokantaan
ja näkyy automaattisesti kaikissa oletusallekirjoituksissa viimeisenä
rivinä (sekä SMTP- että Zammad-postilaatikoille).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Jos käyttäjä ei ole vielä tallentanut allekirjoitusta, näytetään
oletuksena: Käyttäjänimi / Yrityksen nimi / sähköpostiosoite.
Toimii sekä IMAP/SMTP-postilaatikoille että Zammad-sähköposteille.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Asetukset-sivulla näytetään nyt myös Zammad-sähköpostiosoitteet
(esim. support@web1.fi) allekirjoitusten alla. Allekirjoitus liitetään
automaattisesti Zammad-vastauksiin. Tallennetaan avaimella
"zammad:email@osoite.fi". Uusi ticket_zammad_emails API-endpoint
hakee uniikit vastaanotto-osoitteet tietokannasta.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1. Zammad-tiketeille näytetään vastaanotto-osoite (esim. support@web1.fi)
lähettäjäkentässä eikä SMTP-postilaatikkolistaa — vastaus menee
Zammad API:n kautta.
2. Ensimmäisen artikkelin to-osoite tallennetaan zammad_to_email kenttään
on-demand artikkelien haussa.
3. Korjattu _dbFetchRow → _dbFetchOne zammad_reply endpointissa.
4. sanitizeHtml() renderöi viestien HTML turvallisesti.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1. Sähköpostiviestien HTML renderöidään oikein (br, p, div, a, b, i jne.)
sen sijaan että tagit näkyisivät raakatekstinä. Sanitoi vaarallisen
sisällön (script, iframe, on*-attribuutit) pois turvallisesti.
2. Zammad-tiketeillä ei ole mailbox_id:tä, joten aiemmin valittiin aina
listan ensimmäinen (tuki@serverihuone.com). Nyt näytetään
"Valitse lähettäjä" placeholder kunnes käyttäjä valitsee oikean.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Auto-refresh hakee nyt vain viimeisen synkkauksen jälkeen muuttuneet
tiketit (updated_at + 5min marginaali). Artikkelit haetaan vain
uusille tai muuttuneille tiketeille. "Hae postit" -nappi tekee
edelleen full syncin (full=true). Nopeuttaa autopäivitystä merkittävästi.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1. Auto-refresh synkkaa Zammadin taustalla ennen tikettien latausta
(joka minuutti tms. käyttäjän asetuksen mukaan).
2. Tikettiin vastatessa oletuksena valittuna se postilaatikko johon
viesti alun perin tuli — korjattu string/number vertailu.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1. Hae postit -nappi ajaa nyt myös zammad_sync automaattisesti
sähköpostien haun jälkeen (ohitetaan hiljaa jos Zammad ei käytössä).
2. Kun suljettuun/ratkaistuun tikettiin tulee uusi viesti,
tiketti avautuu uudelleen "uusi"-tilaan (aiemmin "käsittelyssä").
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Zammad-ryhmät eivät näkyneet postilaatikoiden näkyvyydessä koska ne
haettiin tickets-globaalista joka on tyhjä ennen tiketti-tabin avaamista.
Lisätty ticket_zammad_groups API-endpoint joka hakee uniikit ryhmät
suoraan tietokannasta.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Aiheutti SyntaxError: Identifier 'showClosed' has already been declared,
joka kaatoi koko sivun (vain footer näkyi).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Normaalisti näytetään vain "X avointa tikettiä". Suljettujen määrä
tulee näkyviin suluissa vasta kun käyttäjä ruksaa Suljetut-checkboxin.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sivukoon valinta (25/50/100/250) toimii nyt - muuttaa TICKETS_PER_PAGE ja
renderöi tikettilistan uudelleen ensimmäiseltä sivulta.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Paginointi: 100 tikettiä/sivu, navigointipalkki sivujen välillä
- Filtterit resetoivat sivunumeron 1:ksi
- Select All valitsee vain nykyisen sivun tiketit
- Zammad-synkronointi tallentaa source=zammad ja zammad_group
- Postilaatikoiden näkyvyysasetuksissa Zammad-ryhmät (Zammad)-merkinnällä
- Zammad-ryhmien piilotus filtteröi tiketit samalla tavalla kuin postilaatikot
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Luotu Noxus SVG-logo (violetti heksagoni + N)
- Demo-yritys nimetty uudelleen Noxukseksi violetilla värillä
- API-tabi piilotettuna ellei yrityksellä ole integraatioita päällä
(superadmin näkee aina)
- check_auth palauttaa has_integrations-lipun
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Aiemmin loadCaptcha() ja checkAuth() kutsuttiin rinnakkain ilman awaitia,
jolloin ensimmäisellä kerralla (ei PHPSESSID-cookieta) kumpikin loi oman
sessionin. Captcha-vastaus tallentui eri sessioon kuin login-kutsu käytti.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Saatavuus-API kortti (API-avain, CORS, ohjeet) näkyy aina API-tabissa
- Telegram ja Zammad kortit näkyvät vain kun integraatio on päällä
- Korjattu puuttuva </div> Telegram-kortista (rikkoi Zammad-kortin sisäkkäisyyden)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Yritykset-tab: integraatio-checkboxit tallentavat vain enabled-tilan
- API-tab: Zammad/Saatavuus/Telegram kortit näkyvät kun integraatio päällä
- Zammad-asetukset (URL, token, ryhmät, synkronointi) kokonaan API-tabissa
- integration_save: tyhjä config ei ylikirjoita olemassaolevia asetuksia
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Integraatiot erillinen table-card yrityksen asetuksissa (vain superadmin)
- Zammad-konfiguraatio (URL, token, ryhmät, synkronointi) siirretty API-tabiin
- Saatavuus-API, Telegram ja Zammad kortit näkyvät API-tabissa kun integraatio on enabloitu
- Korjattu integration_save ja integration_test: puuttuva $input json_decode
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Moduulit, integraatiot ja IP-rajoitukset piilotetaan yritysadminilta (vain superadmin näkee)
- Saatavuus-API ja Telegram checkboxit tallentavat tilan heti muutoksessa
- session_regenerate_id(false) estää race conditionin kirjautumisen jälkeen
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- loadCompanyIntegrations() asettaa kaikkien checkboxien tilan
- Saatavuus-API ja Telegram checkboxit tallentavat tilan heti muutoksessa
- API-sivun kortit näkyvät/piiloutuvat integraatiotilan mukaan
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Tiketin avaaminen ja listaan palaaminen viittasivat vanhoihin
ticket-rules-view/ticket-templates-view/ticket-settings-view
elementteihin jotka poistettiin alinavi-muutoksessa.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Vastauspohjat, Säännöt ja Asetukset siirretty omiksi alinaveikseen
tikettilistan overlay-napeista. Säännöt-välilehdelle lisätty
tikettityyppien hallinta (lisää/poista). Tyypit tallennetaan
tietokantaan yrityskohtaisesti ja populoidaan dynaamisesti
kaikkiin dropdown-valikoihin.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Drop zone dokumenttilistan alaosaan (raahaa tai klikkaa)
- Multi-file upload: luo dokumentit ja lataa tiedostot automaattisesti
- Edistymispalkki näyttää latauksen tilanteen
- Kansioiden raahaus: luo automaattisesti alikansio + tiedostot
- Kategoria-tunnistus tiedostopäätteen mukaan (kuva/muu)
- Multi-file input fallback perinteiselle tiedostovalinnalle
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Lisää Gateway-sarake ja -valitsin NetAdmin-näkymään (devices-linkitys)
- VLAN ja IP näytetään IPAM:sta automaattisesti asiakkaan nimellä
- Muokkausmodaalissa asiakkaan IPAM VLANit/IP:t näkyvät ensimmäisinä
- DB: gateway_device_id LEFT JOIN devices, IPAM-enrichment API:ssa
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Rooli-sarakkeessa näytetään nyt vain valitun yrityksen rooli
- Ei enää tuplabadgeja jos käyttäjä on admin useassa yrityksessä
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Odota loadDocuments() (joka lataa customers-listan) ennen openDocCustomerFolder()-kutsua
- Estää ID:n näkymisen nimen sijasta kun sivu ladataan hashilla
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>