prepare("INSERT INTO projects (name, is_folder, parent_id, owner_id) VALUES (?, 1, ?, ?)"); $stmt->execute([$_POST['name'], $parent_id, $user_id]); } if($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['delete_item'])) { $stmt = $pdo->prepare("DELETE FROM projects WHERE id=? AND owner_id=?"); $stmt->execute([$_POST['item_id'], $user_id]); } if($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['edit_item'])) { $stmt = $pdo->prepare("UPDATE projects SET name=? WHERE id=? AND owner_id=?"); $stmt->execute([$_POST['new_name'], $_POST['item_id'], $user_id]); } if($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['upload_file']) && isset($_FILES['file'])) { $name = $_FILES['file']['name']; $tmp_name = $_FILES['file']['tmp_name']; $size = $_FILES['file']['size']; $path = 'uploads/' . time() . '_' . $name; move_uploaded_file($tmp_name, $path); $stmt = $pdo->prepare("INSERT INTO projects (name, is_folder, parent_id, file_path, owner_id) VALUES (?, 0, ?, ?, ?)"); $stmt->execute([$name, $parent_id, $path, $user_id]); echo "OK"; exit; } if($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['share_project'])) { $pr_id = $_POST['project_id']; $share = $_POST['share_target']; $parts = explode('_', $share, 2); if(count($parts)===2) { $stmt = $pdo->prepare("INSERT INTO project_shares (project_id, share_type, share_id) VALUES (?, ?, ?)"); $stmt->execute([$pr_id, $parts[0], $parts[1]]); $pr = query("SELECT name FROM projects WHERE id=?", [$pr_id])->fetch(); $msg = "A project/file '{$pr['name']}' has been shared with you."; if($parts[0] === 'user') notify_user($parts[1], $msg); else notify_group($parts[1], $msg); } } // ── Fetch current folder content ────────────────────────────────────────────── $user_groups = get_user_groups($user_id); $my_group_ids = array_column($user_groups, 'id'); $group_in = implode(',', array_fill(0, count($my_group_ids), '?')) ?: '0'; $parent_cond = $parent_id ? "p.parent_id = ?" : "p.parent_id IS NULL"; $sql = "SELECT p.*, (p.owner_id = ?) as is_mine, u.username as owner_name FROM projects p LEFT JOIN project_shares ps ON p.id = ps.project_id LEFT JOIN users u ON p.owner_id = u.id WHERE ($parent_cond) AND ( p.owner_id = ? OR (ps.share_type='user' AND ps.share_id = ?) OR (ps.share_type='group' AND ps.share_id IN ($group_in)) ) GROUP BY p.id ORDER BY p.is_folder DESC, p.name ASC"; $params = [$user_id]; if($parent_id) $params[] = $parent_id; $params = array_merge($params, [$user_id, $user_id], $my_group_ids); $stmt = $pdo->prepare($sql); $stmt->execute($params); $items = $stmt->fetchAll(); $all_users = query("SELECT id, username FROM users WHERE id != ?", [$user_id])->fetchAll(); $all_groups = query("SELECT * FROM groups")->fetchAll(); // ── Build breadcrumb path ───────────────────────────────────────────────────── $breadcrumbs = []; $cur_id = $parent_id; while($cur_id) { $node = query("SELECT id, name, parent_id FROM projects WHERE id=?", [$cur_id])->fetch(); if(!$node) break; array_unshift($breadcrumbs, $node); $cur_id = $node['parent_id']; } // ── Helper: file size ───────────────────────────────────────────────────────── function fmt_size($bytes) { if(!$bytes) return '—'; if($bytes < 1024) return $bytes . ' B'; if($bytes < 1048576) return round($bytes/1024,1) . ' KB'; return round($bytes/1048576,1) . ' MB'; } function get_file_icon($name, $is_folder) { if($is_folder) return '📁'; $ext = strtolower(pathinfo($name, PATHINFO_EXTENSION)); $map = [ 'pdf'=>'📄','doc'=>'📝','docx'=>'📝','xls'=>'📊','xlsx'=>'📊','ppt'=>'📑','pptx'=>'📑', 'jpg'=>'🖼','jpeg'=>'🖼','png'=>'🖼','gif'=>'🖼','webp'=>'🖼','svg'=>'🖼', 'mp4'=>'🎬','avi'=>'🎬','mov'=>'🎬','mp3'=>'🎵','wav'=>'🎵', 'zip'=>'🗜','rar'=>'🗜','7z'=>'🗜','tar'=>'🗜', 'php'=>'⚙','js'=>'⚙','css'=>'🎨','html'=>'🌐','txt'=>'📃','md'=>'📃', 'sh'=>'💻','py'=>'🐍', ]; return $map[$ext] ?? '📄'; } ?>

📁 Project Explorer

Root ›
Drag & drop files here to upload
Name Type Owner Size Shared Actions
This folder is empty.
Shared fetchAll(); foreach($shares as $sh) { echo ''; echo $sh['share_type']==='user' ? ('👤 '.htmlspecialchars($sh['username']??'')) : ('👥 '.htmlspecialchars($sh['gname']??'')); echo ''; } if(!$shares) echo '—'; ?>
View only
item