Initial commit: Flutter app + PHP/MySQL backend on Hostinger
Replaces Firebase with a self-hosted PHP/MySQL API served from winded.prymsolutions.com. Includes full backend (schema, auth, events, teams, brackets, suggestions, stats, media, file upload) and updated Flutter repositories and domain models. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/../config/helpers.php';
|
||||
cors();
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] !== 'POST') json_err('Method not allowed', 405);
|
||||
|
||||
require_auth();
|
||||
|
||||
$file = $_FILES['file'] ?? null;
|
||||
$context = $_POST['context'] ?? 'general'; // e.g. 'avatar', 'team_logo'
|
||||
|
||||
if (!$file || $file['error'] !== UPLOAD_ERR_OK) json_err('No file uploaded');
|
||||
|
||||
$allowed = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'];
|
||||
$mime = mime_content_type($file['tmp_name']);
|
||||
if (!in_array($mime, $allowed)) json_err('Only JPEG, PNG, GIF, and WebP images are allowed');
|
||||
|
||||
$maxBytes = 5 * 1024 * 1024; // 5 MB
|
||||
if ($file['size'] > $maxBytes) json_err('File exceeds 5 MB limit');
|
||||
|
||||
$ext = pathinfo($file['name'], PATHINFO_EXTENSION);
|
||||
$filename = uuid() . '.' . strtolower($ext);
|
||||
$uploadDir= __DIR__ . '/../../uploads/' . $context . '/';
|
||||
|
||||
if (!is_dir($uploadDir)) mkdir($uploadDir, 0755, true);
|
||||
|
||||
$dest = $uploadDir . $filename;
|
||||
if (!move_uploaded_file($file['tmp_name'], $dest)) json_err('Upload failed', 500);
|
||||
|
||||
// Build public URL — adjust the base URL to match your Hostinger domain.
|
||||
$baseUrl = (isset($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'];
|
||||
$url = $baseUrl . '/uploads/' . $context . '/' . $filename;
|
||||
|
||||
json_ok(['url' => $url]);
|
||||
Reference in New Issue
Block a user