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>
This commit is contained in:
91
PLAN.md
Normal file
91
PLAN.md
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
# Sähköpostiallekirjoitus per käyttäjä per postilaatikko
|
||||||
|
|
||||||
|
## Tallennusrakenne
|
||||||
|
|
||||||
|
Allekirjoitukset tallennetaan **users.json**:iin käyttäjäkohtaisesti, avaimena postilaatikon ID:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"id": "abc123",
|
||||||
|
"username": "jukka",
|
||||||
|
"nimi": "Jukka",
|
||||||
|
"signatures": {
|
||||||
|
"mailbox-cuitunet-1": "Jukka Lampikoski\nCuitunet Oy\nasiakaspalvelu@cuitunet.fi",
|
||||||
|
"mailbox-storagebox-1": "Jukka\nStorageBOX\nbox@storagebox.fi"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Muutokset
|
||||||
|
|
||||||
|
### 1. index.html — Allekirjoitusten hallinta käyttäjälomakkeessa
|
||||||
|
|
||||||
|
Lisätään user-modal lomakkeeseen uusi osio "Sähköpostiallekirjoitukset":
|
||||||
|
- Jokaiselle postilaatikkolle (kaikkien käyttäjän yritysten) oma textarea
|
||||||
|
- Näyttää postilaatikon nimen + yrityksen nimen labelin
|
||||||
|
- Esim: "Cuitunet — Cuitunet-asiakaspalvelu"
|
||||||
|
|
||||||
|
### 2. script.js — openUserForm()
|
||||||
|
|
||||||
|
- Haetaan kaikkien yritysten postilaatikot API:lla (uusi endpoint `all_mailboxes` tai hyödynnetään olemassaolevia)
|
||||||
|
- Generoidaan allekirjoitus-textareat dynaamisesti
|
||||||
|
- Täytetään olemassa olevat allekirjoitukset user.signatures objektista
|
||||||
|
|
||||||
|
### 3. script.js — Käyttäjälomakkeen tallennus
|
||||||
|
|
||||||
|
- Kerätään allekirjoitus-textareoiden arvot `signatures`-objektiin
|
||||||
|
- Lähetetään `user_update`/`user_create` mukana
|
||||||
|
|
||||||
|
### 4. api.php — user_update/user_create
|
||||||
|
|
||||||
|
- Vastaanotetaan ja tallennetaan `signatures`-kenttä users.json:iin
|
||||||
|
|
||||||
|
### 5. api.php — Uusi endpoint `all_mailboxes`
|
||||||
|
|
||||||
|
- Palauttaa kaikki postilaatikot käyttäjän yrityksistä (id, nimi, yrityksen nimi)
|
||||||
|
- Tarvitaan allekirjoituslomakkeen generointiin
|
||||||
|
|
||||||
|
### 6. script.js — Vastauslomake (ticket-reply)
|
||||||
|
|
||||||
|
- Kun tiketti avataan, haetaan kirjautuneen käyttäjän allekirjoitus kyseiselle postilaatikkolle
|
||||||
|
- Näytetään allekirjoitus vastaus-textarean alla esikatseluna (readonly, harmaa teksti)
|
||||||
|
- Allekirjoitusta EI laiteta itse tekstikenttään (käyttäjä ei vahingossa muokkaa sitä)
|
||||||
|
|
||||||
|
### 7. api.php — ticket_reply endpoint
|
||||||
|
|
||||||
|
- Haetaan käyttäjän allekirjoitus: users.json → kyseinen user → signatures[mailbox_id]
|
||||||
|
- Liitetään allekirjoitus viestin perään ennen lähettämistä: `$body . "\n\n-- \n" . $signature`
|
||||||
|
- Tallennetaan myös messages-tauluun allekirjoituksen kanssa (jotta näkyy viestiketjussa)
|
||||||
|
- Muistiinpanoon (ticket_note) EI liitetä allekirjoitusta
|
||||||
|
|
||||||
|
## Käyttöliittymä
|
||||||
|
|
||||||
|
Käyttäjälomakkeessa:
|
||||||
|
```
|
||||||
|
Sähköpostiallekirjoitukset
|
||||||
|
─────────────────────────
|
||||||
|
Cuitunet — Cuitunet-asiakaspalvelu
|
||||||
|
┌──────────────────────────────────┐
|
||||||
|
│ Jukka Lampikoski │
|
||||||
|
│ Cuitunet Oy │
|
||||||
|
│ asiakaspalvelu@cuitunet.fi │
|
||||||
|
└──────────────────────────────────┘
|
||||||
|
|
||||||
|
StorageBOX — Tuki
|
||||||
|
┌──────────────────────────────────┐
|
||||||
|
│ Jukka │
|
||||||
|
│ StorageBOX │
|
||||||
|
│ box@storagebox.fi │
|
||||||
|
└──────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
Tikettinäkymässä vastauslomakkeen alla:
|
||||||
|
```
|
||||||
|
[Kirjoita vastaus... ]
|
||||||
|
--
|
||||||
|
Jukka Lampikoski
|
||||||
|
Cuitunet Oy
|
||||||
|
asiakaspalvelu@cuitunet.fi
|
||||||
|
|
||||||
|
[Lähetä vastaus]
|
||||||
|
```
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"id": "cuitunet",
|
"id": "cuitunet",
|
||||||
"nimi": "CuituNet",
|
"nimi": "Cuitunet",
|
||||||
"luotu": "2026-03-10",
|
"luotu": "2026-03-10",
|
||||||
"aktiivinen": true,
|
"aktiivinen": true,
|
||||||
"domains": ["intra.cuitunet.fi"],
|
"domains": ["intra.cuitunet.fi"],
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ if (!file_exists($dataDir)) mkdir($dataDir, 0755, true);
|
|||||||
$companies = [
|
$companies = [
|
||||||
[
|
[
|
||||||
"id" => "cuitunet",
|
"id" => "cuitunet",
|
||||||
"nimi" => "CuituNet",
|
"nimi" => "Cuitunet",
|
||||||
"luotu" => "2026-03-10 08:58:43",
|
"luotu" => "2026-03-10 08:58:43",
|
||||||
"aktiivinen" => true,
|
"aktiivinen" => true,
|
||||||
"domains" => ["intra.cuitunet.fi"],
|
"domains" => ["intra.cuitunet.fi"],
|
||||||
@@ -33,7 +33,7 @@ $users = [
|
|||||||
"companies" => ["cuitunet"],
|
"companies" => ["cuitunet"],
|
||||||
"email" => "",
|
"email" => "",
|
||||||
"signatures" => [
|
"signatures" => [
|
||||||
"846898d4a1cb3a08" => "Jukka Lampikoski\nCuituNet Oy\nasiakaspalvelu@cuitunet.fi"
|
"846898d4a1cb3a08" => "Jukka Lampikoski\nCuitunet Oy\nasiakaspalvelu@cuitunet.fi"
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -830,8 +830,8 @@
|
|||||||
<input type="checkbox" id="mailbox-form-smtp-same" checked> Käytä samoja tunnuksia kuin saapuvassa
|
<input type="checkbox" id="mailbox-form-smtp-same" checked> Käytä samoja tunnuksia kuin saapuvassa
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-group"><label>Palvelin</label><input type="text" id="mailbox-form-smtp-host" placeholder="smtp.yritys.fi"></div>
|
||||||
<div id="smtp-custom-fields">
|
<div id="smtp-custom-fields">
|
||||||
<div class="form-group"><label>Palvelin</label><input type="text" id="mailbox-form-smtp-host" placeholder="mail.yritys.fi"></div>
|
|
||||||
<div class="form-group"><label>Käyttäjätunnus</label><input type="text" id="mailbox-form-smtp-user" placeholder="asiakaspalvelu@yritys.fi"></div>
|
<div class="form-group"><label>Käyttäjätunnus</label><input type="text" id="mailbox-form-smtp-user" placeholder="asiakaspalvelu@yritys.fi"></div>
|
||||||
<div class="form-group"><label>Salasana</label><input type="password" id="mailbox-form-smtp-pass" placeholder="••••••••"></div>
|
<div class="form-group"><label>Salasana</label><input type="password" id="mailbox-form-smtp-pass" placeholder="••••••••"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -2582,7 +2582,7 @@ document.getElementById('btn-save-mailbox').addEventListener('click', async () =
|
|||||||
imap_encryption: imapEnc,
|
imap_encryption: imapEnc,
|
||||||
smtp_from_email: document.getElementById('mailbox-form-smtp-email').value,
|
smtp_from_email: document.getElementById('mailbox-form-smtp-email').value,
|
||||||
smtp_from_name: document.getElementById('mailbox-form-smtp-name').value,
|
smtp_from_name: document.getElementById('mailbox-form-smtp-name').value,
|
||||||
smtp_host: useSame ? imapHost : document.getElementById('mailbox-form-smtp-host').value,
|
smtp_host: document.getElementById('mailbox-form-smtp-host').value || (useSame ? imapHost : ''),
|
||||||
smtp_port: parseInt(document.getElementById('mailbox-form-smtp-port').value) || 587,
|
smtp_port: parseInt(document.getElementById('mailbox-form-smtp-port').value) || 587,
|
||||||
smtp_user: useSame ? imapUser : document.getElementById('mailbox-form-smtp-user').value,
|
smtp_user: useSame ? imapUser : document.getElementById('mailbox-form-smtp-user').value,
|
||||||
smtp_password: useSame ? imapPass : document.getElementById('mailbox-form-smtp-pass').value,
|
smtp_password: useSame ? imapPass : document.getElementById('mailbox-form-smtp-pass').value,
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import sys
|
|||||||
PORT = 3001
|
PORT = 3001
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
print(f"CuituNet Intra käynnistyy osoitteessa http://localhost:{PORT}")
|
print(f"Cuitunet Intra käynnistyy osoitteessa http://localhost:{PORT}")
|
||||||
try:
|
try:
|
||||||
subprocess.run(
|
subprocess.run(
|
||||||
["php", "-S", f"localhost:{PORT}"],
|
["php", "-S", f"localhost:{PORT}"],
|
||||||
|
|||||||
Reference in New Issue
Block a user