File: /home/muratemr/theotto.tr/api/admin/logo_upload.php
<?php
declare(strict_types=1);
require_once __DIR__ . '/../../includes/db.php';
require_once __DIR__ . '/../../includes/auth.php';
require_once __DIR__ . '/../../includes/csrf.php';
require_once __DIR__ . '/../../includes/functions.php';
header('Content-Type: application/json');
require_permission('settings');
csrf_required();
$action = post_str('action');
if ($action === 'remove') {
// Mevcut logoyu sil
$old = db_value("SELECT value FROM site_settings WHERE `key`='site_logo'");
if ($old) {
$file = __DIR__ . '/../../' . ltrim($old, '/');
if (file_exists($file)) unlink($file);
}
db_run("INSERT INTO site_settings (`key`, `value`) VALUES ('site_logo', '')
ON DUPLICATE KEY UPDATE `value`=''");
json_response(true, 'Logo kaldırıldı.');
}
// Upload
if (!isset($_FILES['logo'])) {
json_response(false, 'Dosya bulunamadı.');
}
$file = $_FILES['logo'];
if ($file['error'] !== UPLOAD_ERR_OK) {
json_response(false, 'Yükleme hatası: ' . $file['error']);
}
// Boyut kontrolü (2MB)
if ($file['size'] > 2 * 1024 * 1024) {
json_response(false, 'Dosya 2MB\'dan büyük olamaz.');
}
// Tip kontrolü
$allowed_mime = ['image/png','image/jpeg','image/jpg','image/gif','image/webp','image/svg+xml'];
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $file['tmp_name']);
finfo_close($finfo);
if (!in_array($mime, $allowed_mime)) {
json_response(false, 'Geçersiz dosya tipi. PNG, JPG, SVG, WEBP yükleyin.');
}
// Uzantı
$ext_map = ['image/png'=>'png','image/jpeg'=>'jpg','image/jpg'=>'jpg',
'image/gif'=>'gif','image/webp'=>'webp','image/svg+xml'=>'svg'];
$ext = $ext_map[$mime] ?? 'png';
// Kaydet
$upload_dir = __DIR__ . '/../../assets/uploads/';
if (!is_dir($upload_dir)) mkdir($upload_dir, 0755, true);
// Eski logoyu sil
$old = db_value("SELECT value FROM site_settings WHERE `key`='site_logo'");
if ($old && $old !== '') {
$old_file = __DIR__ . '/../../' . ltrim($old, '/');
if (file_exists($old_file)) unlink($old_file);
}
$filename = 'logo_' . time() . '.' . $ext;
$dest = $upload_dir . $filename;
$logo_url = '/assets/uploads/' . $filename;
if (!move_uploaded_file($file['tmp_name'], $dest)) {
json_response(false, 'Dosya kaydedilemedi.');
}
// DB'ye kaydet
db_run("INSERT INTO site_settings (`key`, `value`) VALUES ('site_logo', ?)
ON DUPLICATE KEY UPDATE `value`=?", [$logo_url, $logo_url]);
json_response(true, 'Logo yüklendi.', ['url' => $logo_url]);