From f6e11f8426d1e8a9bde2630641c99ed4af7019f0 Mon Sep 17 00:00:00 2001 From: Jukka Lampikoski Date: Tue, 10 Mar 2026 21:38:32 +0200 Subject: [PATCH] feat: oma profiili -toiminto + placeholder-siivous + poista fix-skriptit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- api.php | 40 +++++++++++++++++++++- fix_role.php | 29 ---------------- fix_saatavuus.php | 80 ------------------------------------------- index.html | 64 +++++++++++++++++++++++++++------- saatavuus-widget.html | 12 +++---- script.js | 80 ++++++++++++++++++++++++++++++++++++++++--- style.css | 6 ++++ 7 files changed, 178 insertions(+), 133 deletions(-) delete mode 100644 fix_role.php delete mode 100644 fix_saatavuus.php diff --git a/api.php b/api.php index e1053a4..60aa2e2 100644 --- a/api.php +++ b/api.php @@ -993,6 +993,7 @@ switch ($action) { 'user_id' => $_SESSION['user_id'], 'username' => $_SESSION['username'], 'nimi' => $_SESSION['nimi'], + 'email' => $u['email'] ?? '', 'role' => $_SESSION['role'], 'companies' => $companyList, 'company_id' => $_SESSION['company_id'] ?? '', @@ -1030,7 +1031,7 @@ switch ($action) { $html .= '

Vaihda salasana

'; $html .= '

Linkki on voimassa 1 tunnin. Jos et pyytänyt salasanan vaihtoa, voit jättää tämän viestin huomiotta.

'; $html .= ''; - sendMail($user['email'], 'Salasanan palautus - CuituNet Intra', $html); + sendMail($user['email'], 'Salasanan palautus - Noxus Intra', $html); } echo json_encode(['success' => true, 'message' => 'Jos käyttäjätunnus löytyy ja sillä on sähköposti, palautuslinkki lähetetään.']); break; @@ -1236,6 +1237,43 @@ switch ($action) { echo json_encode(['success' => true]); break; + // ---------- PROFILE (oma profiili) ---------- + case 'profile_update': + requireAuth(); + if ($method !== 'POST') break; + $input = json_decode(file_get_contents('php://input'), true); + $userId = $_SESSION['user_id']; + $u = dbGetUser($userId); + if (!$u) { + http_response_code(404); + echo json_encode(['error' => 'Käyttäjää ei löydy']); + break; + } + if (isset($input['nimi'])) $u['nimi'] = trim($input['nimi']); + if (isset($input['email'])) $u['email'] = trim($input['email']); + if (!empty($input['password'])) { + if (strlen($input['password']) < 4) { + http_response_code(400); + echo json_encode(['error' => 'Salasanan pitää olla vähintään 4 merkkiä']); + break; + } + $u['password_hash'] = password_hash($input['password'], PASSWORD_DEFAULT); + } + if (isset($input['signatures']) && is_array($input['signatures'])) { + $sigs = []; + foreach ($input['signatures'] as $mbId => $sig) { + $sigs[(string)$mbId] = (string)$sig; + } + $u['signatures'] = $sigs; + } + dbSaveUser($u); + // Päivitä session nimi + $_SESSION['nimi'] = $u['nimi']; + $safe = $u; + unset($safe['password_hash']); + echo json_encode($safe); + break; + // ---------- CHANGELOG ---------- case 'changelog': requireAuth(); diff --git a/fix_role.php b/fix_role.php deleted file mode 100644 index a5a724e..0000000 --- a/fix_role.php +++ /dev/null @@ -1,29 +0,0 @@ -query("SELECT id, username, nimi, role FROM users ORDER BY role, username"); -while ($row = $result->fetch_assoc()) { - echo sprintf("%-20s %-25s rooli: %s\n", $row['username'], $row['nimi'] ?? '', $row['role']); -} - -echo "\n=== KORJAUS: admin → superadmin ===\n"; -$updated = $db->query("UPDATE users SET role = 'superadmin' WHERE role = 'admin'"); -echo "Päivitetty " . $db->affected_rows . " käyttäjää admin → superadmin\n"; - -echo "\n=== ROOLIT KORJAUKSEN JÄLKEEN ===\n\n"; -$result = $db->query("SELECT id, username, nimi, role FROM users ORDER BY role, username"); -while ($row = $result->fetch_assoc()) { - echo sprintf("%-20s %-25s rooli: %s\n", $row['username'], $row['nimi'] ?? '', $row['role']); -} - -echo "\n⚠️ POISTA fix_role.php palvelimelta!\n"; diff --git a/fix_saatavuus.php b/fix_saatavuus.php deleted file mode 100644 index 7661e70..0000000 --- a/fix_saatavuus.php +++ /dev/null @@ -1,80 +0,0 @@ -query("SELECT id, nimi, api_key, cors_origins FROM companies ORDER BY nimi"); -$companies = []; -while ($row = $result->fetch_assoc()) { - $companies[] = $row; - $key = $row['api_key'] ?: '(tyhjä)'; - echo sprintf("%-20s %-40s avain: %s\n", $row['id'], $row['nimi'], $key); - echo sprintf("%-20s %-40s CORS: %s\n", '', '', $row['cors_origins'] ?: '(tyhjä)'); -} - -// Etsi yritys jossa on "cuitu" nimessä -$cuituCompany = null; -foreach ($companies as $c) { - if (stripos($c['nimi'], 'cuitu') !== false) { - $cuituCompany = $c; - break; - } -} - -if (!$cuituCompany) { - // Jos ei löydy nimellä, yritä ensimmäinen yritys - echo "\n⚠️ Ei löytynyt yritystä jossa 'cuitu' nimessä.\n"; - echo "Yritykset:\n"; - foreach ($companies as $i => $c) { - echo " [$i] {$c['id']} = {$c['nimi']}\n"; - } - echo "\nAsetetaan API-avain ENSIMMÄISELLE yritykselle...\n"; - $cuituCompany = $companies[0] ?? null; -} - -if (!$cuituCompany) { - echo "\n❌ Ei yrityksiä tietokannassa!\n"; - exit; -} - -echo "\n=== KORJATAAN: {$cuituCompany['nimi']} (ID: {$cuituCompany['id']}) ===\n\n"; - -// 1. Aseta API-avain -echo "1. API-avain: {$targetApiKey}\n"; -$db->query("UPDATE companies SET api_key = '{$targetApiKey}' WHERE id = '{$cuituCompany['id']}'"); -echo " → Päivitetty (" . $db->affected_rows . " rivi)\n"; - -// 2. Päivitä CORS-originit -$existingOrigins = json_decode($cuituCompany['cors_origins'] ?: '[]', true) ?: []; -$merged = array_unique(array_merge($existingOrigins, $requiredOrigins)); -$corsJson = json_encode(array_values($merged)); -echo "2. CORS-originit: {$corsJson}\n"; -$stmt = $db->prepare("UPDATE companies SET cors_origins = ? WHERE id = ?"); -$stmt->bind_param('ss', $corsJson, $cuituCompany['id']); -$stmt->execute(); -echo " → Päivitetty (" . $stmt->affected_rows . " rivi)\n"; - -// 3. Testaa -echo "\n=== TARKISTUS ===\n\n"; -$result = $db->query("SELECT id, nimi, api_key, cors_origins FROM companies WHERE id = '{$cuituCompany['id']}'"); -$row = $result->fetch_assoc(); -echo "Yritys: {$row['nimi']}\n"; -echo "API-key: {$row['api_key']}\n"; -echo "CORS: {$row['cors_origins']}\n"; - -$match = ($row['api_key'] === $targetApiKey) ? '✅' : '❌'; -echo "\nAPI-avain täsmää: {$match}\n"; - -echo "\n⚠️ POISTA fix_saatavuus.php palvelimelta!\n"; -echo "Testaa: curl 'https://intra.noxus.fi/api.php?action=saatavuus&key={$targetApiKey}&osoite=Testikatu+1&postinumero=20100&kaupunki=Turku'\n"; diff --git a/index.html b/index.html index 0cb17f7..54768c1 100644 --- a/index.html +++ b/index.html @@ -65,7 +65,8 @@
- + + @@ -565,7 +566,7 @@

Saatavuus-API

-

Julkinen API jolla cuitunet.fi voi tarkistaa kuituverkon saatavuuden osoitteessa. Palauttaa vain osoite + nopeus - ei asiakastietoja.

+

Julkinen API jolla verkkosivusto voi tarkistaa palvelun saatavuuden osoitteessa. Palauttaa vain osoite + nopeus - ei asiakastietoja.

@@ -576,7 +577,7 @@
- +
@@ -585,21 +586,21 @@

Sähköpostiasetukset (IMAP/postilaatikot) hallitaan Yritykset-välilehdellä.

API-ohjeet

-
Endpoint:
GET https://intra.cuitunet.fi/api.php?action=saatavuus
+
Endpoint:
GET https://<domain>/api.php?action=saatavuus
Parametrit:
key = API-avain (pakollinen)
- • osoite = Katuosoite ja numero (esim. "Kauppakatu 5")
+ • osoite = Katuosoite ja numero (esim. "Esimerkkikatu 1")
postinumero = Postinumero (esim. "20100")
kaupunki = Kaupunki (esim. "Turku")
Kaikki kolme pakollisia.
Esimerkki:
- api.php?action=saatavuus&key=AVAIN&osoite=Kauppakatu+5&postinumero=20100&kaupunki=Turku
+ api.php?action=saatavuus&key=AVAIN&osoite=Esimerkkikatu+1&postinumero=00100&kaupunki=Helsinki
Vastaus:
{"saatavilla":true} tai {"saatavilla":false}

Testaa API

- +
@@ -759,7 +760,7 @@
- +
@@ -771,7 +772,7 @@
- +
@@ -787,11 +788,11 @@
- +
- +
@@ -1019,7 +1020,7 @@
- +
@@ -1126,6 +1127,45 @@
+ + +