244 lines
6.8 KiB
PHP
244 lines
6.8 KiB
PHP
<?php
|
|
require_once __DIR__ . '/../config/database.php';
|
|
|
|
// Zabezpieczenie przed XSS
|
|
function escape($string) {
|
|
return htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
|
|
}
|
|
|
|
// Generowanie slug z tytułu
|
|
function createSlug($text) {
|
|
$text = mb_strtolower($text, 'UTF-8');
|
|
|
|
// Polskie znaki
|
|
$replacements = [
|
|
'ą' => 'a', 'ć' => 'c', 'ę' => 'e', 'ł' => 'l',
|
|
'ń' => 'n', 'ó' => 'o', 'ś' => 's', 'ź' => 'z',
|
|
'ż' => 'z', 'Ą' => 'a', 'Ć' => 'c', 'Ę' => 'e',
|
|
'Ł' => 'l', 'Ń' => 'n', 'Ó' => 'o', 'Ś' => 's',
|
|
'Ź' => 'z', 'Ż' => 'z'
|
|
];
|
|
|
|
$text = strtr($text, $replacements);
|
|
$text = preg_replace('/[^a-z0-9-]/', '-', $text);
|
|
$text = preg_replace('/-+/', '-', $text);
|
|
$text = trim($text, '-');
|
|
|
|
return $text;
|
|
}
|
|
|
|
// Pobranie strony po slug
|
|
function getPageBySlug($slug) {
|
|
$db = getDB();
|
|
$stmt = $db->prepare("
|
|
SELECT p.*, u.username as author_name
|
|
FROM pages p
|
|
LEFT JOIN users u ON p.author_id = u.id
|
|
WHERE p.slug = ? AND p.status = 'published'
|
|
");
|
|
$stmt->execute([$slug]);
|
|
return $stmt->fetch();
|
|
}
|
|
|
|
// Pobranie wszystkich stron
|
|
function getAllPages($status = 'published', $limit = null) {
|
|
$db = getDB();
|
|
$sql = "SELECT p.*, u.username as author_name
|
|
FROM pages p
|
|
LEFT JOIN users u ON p.author_id = u.id
|
|
WHERE p.status = ?
|
|
ORDER BY p.created_at DESC";
|
|
|
|
if ($limit) {
|
|
$sql .= " LIMIT " . intval($limit);
|
|
}
|
|
|
|
$stmt = $db->prepare($sql);
|
|
$stmt->execute([$status]);
|
|
return $stmt->fetchAll();
|
|
}
|
|
|
|
// Pobranie ustawień
|
|
function getSetting($key, $default = '') {
|
|
$db = getDB();
|
|
$stmt = $db->prepare("SELECT setting_value FROM settings WHERE setting_key = ?");
|
|
$stmt->execute([$key]);
|
|
$result = $stmt->fetch();
|
|
return $result ? $result['setting_value'] : $default;
|
|
}
|
|
|
|
// Aktualizacja ustawienia
|
|
function updateSetting($key, $value) {
|
|
$db = getDB();
|
|
$stmt = $db->prepare("
|
|
INSERT INTO settings (setting_key, setting_value)
|
|
VALUES (?, ?)
|
|
ON DUPLICATE KEY UPDATE setting_value = ?
|
|
");
|
|
return $stmt->execute([$key, $value, $value]);
|
|
}
|
|
|
|
// Zapisywanie strony
|
|
function savePage($data) {
|
|
$db = getDB();
|
|
|
|
// Jeśli nie ma slug, generuj z tytułu
|
|
if (empty($data['slug'])) {
|
|
$data['slug'] = createSlug($data['title']);
|
|
}
|
|
|
|
if (isset($data['id']) && $data['id']) {
|
|
// Aktualizacja
|
|
$stmt = $db->prepare("
|
|
UPDATE pages SET
|
|
title = ?,
|
|
slug = ?,
|
|
content = ?,
|
|
meta_description = ?,
|
|
meta_keywords = ?,
|
|
template = ?,
|
|
status = ?,
|
|
featured_image = ?
|
|
WHERE id = ?
|
|
");
|
|
|
|
return $stmt->execute([
|
|
$data['title'],
|
|
$data['slug'],
|
|
$data['content'],
|
|
$data['meta_description'] ?? '',
|
|
$data['meta_keywords'] ?? '',
|
|
$data['template'] ?? 'default',
|
|
$data['status'] ?? 'draft',
|
|
$data['featured_image'] ?? null,
|
|
$data['id']
|
|
]);
|
|
} else {
|
|
// Nowa strona
|
|
$stmt = $db->prepare("
|
|
INSERT INTO pages (title, slug, content, meta_description, meta_keywords, template, author_id, status, featured_image)
|
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
");
|
|
|
|
return $stmt->execute([
|
|
$data['title'],
|
|
$data['slug'],
|
|
$data['content'],
|
|
$data['meta_description'] ?? '',
|
|
$data['meta_keywords'] ?? '',
|
|
$data['template'] ?? 'default',
|
|
$data['author_id'],
|
|
$data['status'] ?? 'draft',
|
|
$data['featured_image'] ?? null
|
|
]);
|
|
}
|
|
}
|
|
|
|
// Usuwanie strony
|
|
function deletePage($id) {
|
|
$db = getDB();
|
|
$stmt = $db->prepare("DELETE FROM pages WHERE id = ?");
|
|
return $stmt->execute([$id]);
|
|
}
|
|
|
|
// Pobranie menu
|
|
function getMenu($location) {
|
|
$db = getDB();
|
|
$stmt = $db->prepare("
|
|
SELECT mi.*
|
|
FROM menu_items mi
|
|
JOIN menus m ON mi.menu_id = m.id
|
|
WHERE m.location = ?
|
|
ORDER BY mi.sort_order ASC
|
|
");
|
|
$stmt->execute([$location]);
|
|
return $stmt->fetchAll();
|
|
}
|
|
|
|
// Upload pliku
|
|
function uploadFile($file, $allowedTypes = ['image/jpeg', 'image/png', 'image/gif']) {
|
|
if (!isset($file['error']) || $file['error'] !== UPLOAD_ERR_OK) {
|
|
return ['success' => false, 'message' => 'Błąd podczas przesyłania pliku'];
|
|
}
|
|
|
|
if (!in_array($file['type'], $allowedTypes)) {
|
|
return ['success' => false, 'message' => 'Niedozwolony typ pliku'];
|
|
}
|
|
|
|
if ($file['size'] > MAX_UPLOAD_SIZE) {
|
|
return ['success' => false, 'message' => 'Plik jest za duży'];
|
|
}
|
|
|
|
$extension = pathinfo($file['name'], PATHINFO_EXTENSION);
|
|
$filename = uniqid() . '.' . $extension;
|
|
$filepath = UPLOAD_DIR . $filename;
|
|
|
|
if (!is_dir(UPLOAD_DIR)) {
|
|
mkdir(UPLOAD_DIR, 0755, true);
|
|
}
|
|
|
|
if (move_uploaded_file($file['tmp_name'], $filepath)) {
|
|
// Zapisz do bazy
|
|
$db = getDB();
|
|
$stmt = $db->prepare("
|
|
INSERT INTO media (filename, original_name, file_path, file_type, file_size, mime_type, uploaded_by)
|
|
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
");
|
|
|
|
$stmt->execute([
|
|
$filename,
|
|
$file['name'],
|
|
$filepath,
|
|
$extension,
|
|
$file['size'],
|
|
$file['type'],
|
|
$_SESSION['user_id'] ?? 1
|
|
]);
|
|
|
|
return [
|
|
'success' => true,
|
|
'filename' => $filename,
|
|
'url' => UPLOAD_URL . $filename,
|
|
'id' => $db->lastInsertId()
|
|
];
|
|
}
|
|
|
|
return ['success' => false, 'message' => 'Nie udało się zapisać pliku'];
|
|
}
|
|
|
|
// Logowanie aktywności
|
|
function logActivity($action, $entityType = null, $entityId = null) {
|
|
$db = getDB();
|
|
$stmt = $db->prepare("
|
|
INSERT INTO activity_logs (user_id, action, entity_type, entity_id, ip_address, user_agent)
|
|
VALUES (?, ?, ?, ?, ?, ?)
|
|
");
|
|
|
|
return $stmt->execute([
|
|
$_SESSION['user_id'] ?? null,
|
|
$action,
|
|
$entityType,
|
|
$entityId,
|
|
$_SERVER['REMOTE_ADDR'] ?? null,
|
|
$_SERVER['HTTP_USER_AGENT'] ?? null
|
|
]);
|
|
}
|
|
|
|
// Formatowanie daty
|
|
function formatDate($date, $format = 'd.m.Y H:i') {
|
|
return date($format, strtotime($date));
|
|
}
|
|
|
|
// Pobieranie kategorii strony
|
|
function getPageCategories($pageId) {
|
|
$db = getDB();
|
|
$stmt = $db->prepare("
|
|
SELECT c.*
|
|
FROM categories c
|
|
JOIN page_categories pc ON c.id = pc.category_id
|
|
WHERE pc.page_id = ?
|
|
");
|
|
$stmt->execute([$pageId]);
|
|
return $stmt->fetchAll();
|
|
}
|
|
?>
|