367 lines
9.9 KiB
PHP
367 lines
9.9 KiB
PHP
<?php
|
|
require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/session_bootstrap.php';
|
|
if (empty($_SESSION['logged_in'])) {
|
|
header('Location: https://togethere.cloud/login/');
|
|
exit();
|
|
}
|
|
|
|
$host = "localhost";
|
|
$db = "togethere_cloud";
|
|
$user = "root";
|
|
$pass = "HasloDoSQL";
|
|
|
|
try {
|
|
|
|
$pdo->exec("SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci");
|
|
} catch (PDOException $e) {
|
|
die("Błąd połączenia z bazą danych: " . $e->getMessage());
|
|
}
|
|
|
|
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
|
|
$stmt->execute([$_SESSION['user_id']]);
|
|
$userData = $stmt->fetch(PDO::FETCH_ASSOC);
|
|
|
|
$phoneCountryOptions = [
|
|
'+48' => 'Polska (+48)',
|
|
'+44' => 'Wielka Brytania (+44)',
|
|
'+49' => 'Niemcy (+49)',
|
|
'+33' => 'Francja (+33)',
|
|
'+34' => 'Hiszpania (+34)',
|
|
'+39' => 'Włochy (+39)',
|
|
'+31' => 'Holandia (+31)',
|
|
'+420' => 'Czechy (+420)',
|
|
'+421' => 'Słowacja (+421)',
|
|
'+1' => 'USA/Kanada (+1)'
|
|
];
|
|
$storedPhoneNumber = trim((string)($userData['phone_number'] ?? ''));
|
|
$currentPhoneCountryCode = '';
|
|
$currentPhoneNumber = $storedPhoneNumber;
|
|
if ($storedPhoneNumber !== '' && preg_match('/^(\+\d{1,4})\s*(.*)$/', $storedPhoneNumber, $matches)) {
|
|
$parsedCode = trim((string)$matches[1]);
|
|
$parsedLocal = trim((string)$matches[2]);
|
|
if (array_key_exists($parsedCode, $phoneCountryOptions)) {
|
|
$currentPhoneCountryCode = $parsedCode;
|
|
$currentPhoneNumber = $parsedLocal;
|
|
}
|
|
}
|
|
|
|
if (!$userData) {
|
|
session_destroy();
|
|
header('Location: /login/');
|
|
exit();
|
|
}
|
|
?>
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>Informacje Profilowe | kontakt: wspolpraca@togethere.cloud</title>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta charset="utf-8">
|
|
<meta name="keywords" content="projekty przyszłości"/>
|
|
<link rel="stylesheet" href="/css/header.css" type="text/css" media="all"/>
|
|
<link rel="stylesheet" href="/css/footer.css" type="text/css" media="all"/>
|
|
<link href="//fonts.googleapis.com/css?family=Lato:400,500,600,700,800,900" rel="stylesheet">
|
|
<style>
|
|
body {
|
|
background: linear-gradient(135deg, #e3f2fd 0%, #ffffff 100%);
|
|
min-height: 100vh;
|
|
}
|
|
|
|
h1 {
|
|
color: #1976d2;
|
|
padding: 30px;
|
|
margin-bottom: 20px;
|
|
text-align: center;
|
|
font-size: 2.5em;
|
|
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.1);
|
|
}
|
|
|
|
.nav-link {
|
|
display: inline-block;
|
|
margin: 0 auto 30px;
|
|
padding: 12px 30px;
|
|
background: linear-gradient(135deg, #42a5f5, #1976d2);
|
|
color: white;
|
|
text-decoration: none;
|
|
border-radius: 25px;
|
|
font-weight: 600;
|
|
transition: all 0.3s ease;
|
|
box-shadow: 0 4px 15px rgba(25, 118, 210, 0.3);
|
|
}
|
|
|
|
.nav-link:hover {
|
|
background: linear-gradient(135deg, #1976d2, #0d47a1);
|
|
transform: translateY(-2px);
|
|
box-shadow: 0 6px 20px rgba(25, 118, 210, 0.4);
|
|
}
|
|
|
|
.nav-container {
|
|
display: flex;
|
|
width: 100%;
|
|
text-align: center;
|
|
justify-content: center;
|
|
align-items: center;
|
|
margin-bottom: 30px;
|
|
}
|
|
|
|
.nav-container .box {
|
|
display: flex;
|
|
gap: 15px;
|
|
}
|
|
|
|
nav.navigation {
|
|
margin-top: 0px !important;
|
|
}
|
|
|
|
.settings-container {
|
|
max-width: 100%;
|
|
width: 100%;
|
|
margin: 0 auto;
|
|
padding: 20px;
|
|
}
|
|
|
|
.settings-section {
|
|
background: white;
|
|
border-radius: 15px;
|
|
padding: 35px;
|
|
margin-bottom: 30px;
|
|
box-shadow: 0 10px 30px rgba(100, 181, 246, 0.2);
|
|
width: 100%;
|
|
max-width: 100%;
|
|
}
|
|
|
|
.settings-section h2 {
|
|
color: #1976d2;
|
|
font-size: 1.8em;
|
|
margin-bottom: 25px;
|
|
padding-bottom: 15px;
|
|
border-bottom: 3px solid #64b5f6;
|
|
}
|
|
|
|
.form-group {
|
|
margin-bottom: 25px;
|
|
width: 100% !important;
|
|
}
|
|
|
|
form div label {
|
|
padding-left: 5px !important;
|
|
}
|
|
|
|
.form-group label {
|
|
display: block;
|
|
color: #2c3e50;
|
|
font-weight: 600;
|
|
margin-bottom: 10px;
|
|
font-size: 1.05em;
|
|
}
|
|
|
|
.form-group input[type="text"],
|
|
.form-group input[type="email"],
|
|
.form-group select {
|
|
width: 100% !important;
|
|
max-width: 100% !important;
|
|
padding: 15px;
|
|
border: 2px solid #64b5f6;
|
|
border-radius: 8px;
|
|
font-size: 1em;
|
|
transition: all 0.3s ease;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.form-group input:focus,
|
|
.form-group select:focus {
|
|
outline: none;
|
|
border-color: #1976d2;
|
|
box-shadow: 0 0 10px rgba(25, 118, 210, 0.2);
|
|
}
|
|
|
|
.phone-row {
|
|
display: grid;
|
|
grid-template-columns: 220px 1fr;
|
|
gap: 20px;
|
|
}
|
|
|
|
.form-row {
|
|
display: grid;
|
|
grid-template-columns: 1fr;
|
|
gap: 20px;
|
|
}
|
|
|
|
.btn {
|
|
padding: 15px 40px;
|
|
border: none;
|
|
border-radius: 8px;
|
|
font-size: 1.1em;
|
|
font-weight: 600;
|
|
cursor: pointer;
|
|
transition: all 0.3s ease;
|
|
width: 100% !important;
|
|
max-width: 100% !important;
|
|
}
|
|
|
|
.btn-primary {
|
|
background: linear-gradient(135deg, #42a5f5, #1976d2);
|
|
color: white;
|
|
}
|
|
|
|
.btn-primary:hover {
|
|
background: linear-gradient(135deg, #1976d2, #0d47a1);
|
|
transform: translateY(-2px);
|
|
box-shadow: 0 5px 15px rgba(25, 118, 210, 0.4);
|
|
}
|
|
|
|
.btn-secondary {
|
|
background: #95a5a6;
|
|
color: white;
|
|
}
|
|
|
|
.btn-secondary:hover {
|
|
background: #7f8c8d;
|
|
}
|
|
|
|
.button-group {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 15px;
|
|
margin-top: 25px;
|
|
}
|
|
|
|
@media (max-width: 768px) {
|
|
h1 {
|
|
font-size: 2em;
|
|
padding: 20px;
|
|
}
|
|
|
|
.settings-section {
|
|
padding: 25px 20px;
|
|
}
|
|
|
|
.form-row {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.phone-row {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.button-group {
|
|
flex-direction: column;
|
|
}
|
|
|
|
.btn {
|
|
width: 100%;
|
|
}
|
|
}
|
|
|
|
.footer-copyright {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 40px;
|
|
}
|
|
|
|
div.polices p {
|
|
color: black !important;
|
|
font-weight: bold !important;
|
|
}
|
|
|
|
div.polices p a {
|
|
text-decoration: none !important;
|
|
font-size: 1rem;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<?php
|
|
if (!empty($_SESSION['logged_in'])) {
|
|
include $_SERVER['DOCUMENT_ROOT'].'/global/navLogined.php';
|
|
} else {
|
|
include $_SERVER['DOCUMENT_ROOT'].'/global/navNoLogined.php';
|
|
}
|
|
?>
|
|
|
|
<main>
|
|
<div class="settings-container">
|
|
<h1>⚙️ Ustawienia Konta</h1>
|
|
<div class="nav-container">
|
|
<div class="box">
|
|
<a href="/account/profile/" class="nav-link">👤 Informacje profilowe</a>
|
|
<a href="/account/settings/" class="nav-link">⚙️ Pozostałe ustawienia</a>
|
|
</div>
|
|
</div>
|
|
|
|
<?php if (isset($_GET['success']) && $_GET['success'] === 'personal_data'): ?>
|
|
<div style="background: #d4edda; color: #155724; padding: 15px; border-radius: 8px; margin-bottom: 20px; text-align: center; border-left: 4px solid #28a745;">
|
|
✅ Dane osobowe zostały zaktualizowane!
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<?php if (isset($_GET['error'])): ?>
|
|
<div style="background: #f8d7da; color: #721c24; padding: 15px; border-radius: 8px; margin-bottom: 20px; text-align: center; border-left: 4px solid #dc3545;">
|
|
❌ <?= htmlspecialchars($_GET['error']) ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<div class="settings-section" id="profile">
|
|
<h2>👤 Dane osobowe</h2>
|
|
<form method="POST" action="/account/settings/update_settings.php">
|
|
<input type="hidden" name="action" value="personal_data">
|
|
<div class="form-row">
|
|
<div class="form-group">
|
|
<label for="firstName">Imię</label>
|
|
<input type="text" id="firstName" name="first_name" value="<?= htmlspecialchars($userData['first_name'] ?? '') ?>" required>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="lastName">Nazwisko</label>
|
|
<input type="text" id="lastName" name="last_name" value="<?= htmlspecialchars($userData['last_name'] ?? '') ?>" required>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="email">Adres e-mail</label>
|
|
<input type="email" id="email" value="<?= htmlspecialchars($userData['email']) ?>" disabled>
|
|
<small style="color: #7f8c8d;">
|
|
<a href="/account/settings/change_email_request.php" style="color: #2196F3; text-decoration: none; font-weight: 600;">
|
|
📧 Zmień adres email
|
|
</a>
|
|
</small>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="username">Nazwa użytkownika</label>
|
|
<input type="text" id="username" name="username" value="<?= htmlspecialchars($userData['username']) ?>" required maxlength="20" pattern="[A-Za-z0-9_&!]{1,20}" title="Dozwolone: litery angielskie, cyfry, _, &, ! (max 20 znaków)">
|
|
</div>
|
|
<div class="phone-row">
|
|
<div class="form-group">
|
|
<label for="phoneCountryCode">Kierunkowy państwa</label>
|
|
<select id="phoneCountryCode" name="phone_country_code">
|
|
<option value="">Wybierz kierunkowy</option>
|
|
<?php foreach ($phoneCountryOptions as $code => $label): ?>
|
|
<option value="<?= htmlspecialchars($code, ENT_QUOTES, 'UTF-8') ?>" <?= $currentPhoneCountryCode === $code ? 'selected' : '' ?>>
|
|
<?= htmlspecialchars($label, ENT_QUOTES, 'UTF-8') ?>
|
|
</option>
|
|
<?php endforeach; ?>
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="phoneNumber">Numer telefonu</label>
|
|
<input type="text" id="phoneNumber" name="phone_number" value="<?= htmlspecialchars($currentPhoneNumber, ENT_QUOTES, 'UTF-8') ?>" maxlength="20" inputmode="numeric" pattern="[0-9\s\-]{4,20}" title="Dozwolone cyfry, spacje i myślnik">
|
|
</div>
|
|
</div>
|
|
<div class="button-group">
|
|
<button type="submit" class="btn btn-primary">Zapisz zmiany</button>
|
|
<button type="button" class="btn btn-secondary" onclick="location.reload()">Anuluj</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</main>
|
|
|
|
<?php
|
|
if (!empty($_SESSION['logged_in'])) {
|
|
include $_SERVER['DOCUMENT_ROOT'].'/global/footerLogined.php';
|
|
} else {
|
|
include $_SERVER['DOCUMENT_ROOT'].'/global/footerNoLogined.php';
|
|
}
|
|
?>
|
|
</body>
|
|
</html>
|
|
|