🤩 File Manager - Mr.X
PHP:
8.3.33
Server:
Apache
OS:
Linux 5.14.0-611.49.1.el9_7.x86_64
User:
websparkit
Navigate
Upload:
Upload
New File
New Folder
Editing:TechLeadController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Project; use App\Models\Requirement; use App\Models\ProjectTask; use App\Models\ProjectResource; use App\Models\User; use Illuminate\Support\Facades\Storage; class TechLeadController extends Controller { public function dashboard() { $projects = Project::with(['client', 'requirements', 'tasks', 'domains']) ->where('tech_lead_id', auth()->id()) ->get(); $pendingRequirements = Requirement::with(['project', 'client']) ->whereHas('project', fn($q) => $q->where('tech_lead_id', auth()->id())) ->where('status', 'pending') ->orderBy('created_at', 'desc') ->get(); $allTasks = ProjectTask::with(['project', 'developer', 'requirement']) ->whereHas('project', fn($q) => $q->where('tech_lead_id', auth()->id())) ->orderBy('created_at', 'desc') ->get(); $developers = User::role('Developer')->get(); return view('techlead.dashboard', compact('projects', 'pendingRequirements', 'allTasks', 'developers')); } public function assignProject(Request $request, Project $project) { $project->update([ 'tech_lead_id' => auth()->id(), 'status' => 'in_progress', ]); return redirect()->back()->with('success', 'Project assigned successfully.'); } public function approveRequirement(Request $request, Requirement $requirement) { $request->validate([ 'developer_id' => 'required|exists:users,id', 'priority' => 'required|in:low,normal,high,urgent', ]); $requirement->update([ 'status' => 'approved', 'tech_lead_id' => auth()->id(), 'developer_id' => $request->developer_id, 'priority' => $request->priority, ]); ProjectTask::create([ 'project_id' => $requirement->project_id, 'requirement_id' => $requirement->id, 'developer_id' => $request->developer_id, 'title' => 'Task for: ' . $requirement->title, 'description' => $requirement->description, 'status' => 'assigned', ]); // Notify Developer $developer = User::find($request->developer_id); if ($developer) { \Illuminate\Support\Facades\Mail::to($developer->email)->queue( new \App\Mail\SystemNotification( 'New Task Assigned: ' . $requirement->title, 'You have been assigned a new task on project "' . $requirement->project->name . '".', 'View Task', route('developer.dashboard') ) ); } // Notify Client $client = $requirement->client; if ($client) { \Illuminate\Support\Facades\Mail::to($client->email)->queue( new \App\Mail\SystemNotification( 'Requirement Approved: ' . $requirement->title, 'Your requirement "' . $requirement->title . '" has been approved and assigned to our development team.', 'View Dashboard', route('dashboard') ) ); } return redirect()->back()->with('success', 'Requirement approved and task created.'); } public function rejectRequirement(Requirement $requirement) { $requirement->update(['status' => 'rejected']); return redirect()->back()->with('success', 'Requirement rejected.'); } public function showProject(Project $project) { if ($project->tech_lead_id !== auth()->id()) { abort(403); } $project->load(['client', 'requirements', 'tasks.developer', 'domains', 'credentials.users']); $developers = User::role('Developer')->get(); return view('techlead.project_show', compact('project', 'developers')); } public function storeCredential(Request $request, Project $project) { if ($project->tech_lead_id !== auth()->id()) abort(403); $request->validate([ 'title' => 'required|string|max:255', 'url' => 'nullable|url', 'username' => 'nullable|string', 'password' => 'nullable|string', 'notes' => 'nullable|string', ]); $project->credentials()->create($request->only('title', 'url', 'username', 'password', 'notes')); return redirect()->back()->with('success', 'Credential added successfully.'); } public function assignCredential(Request $request, \App\Models\ProjectCredential $credential) { $project = $credential->project; if ($project->tech_lead_id !== auth()->id()) abort(403); $request->validate([ 'user_id' => 'required|exists:users,id', ]); $credential->users()->syncWithoutDetaching([$request->user_id]); return redirect()->back()->with('success', 'Credential assigned successfully.'); } public function education() { $materials = \App\Models\EducationMaterial::where('tech_lead_id', auth()->id())->latest()->get(); return view('techlead.education', compact('materials')); } public function storeEducation(Request $request) { $request->validate([ 'title' => 'required|string|max:255', 'description' => 'nullable|string', 'type' => 'required|in:youtube,mp4', 'file' => 'required_if:type,mp4|file|mimes:mp4|max:50000', 'url' => 'required_if:type,youtube|url', ]); $pathOrUrl = null; if ($request->type === 'mp4') { $pathOrUrl = $request->file('file')->store('education_videos', 'public'); } else { $pathOrUrl = $request->url; } \App\Models\EducationMaterial::create([ 'tech_lead_id' => auth()->id(), 'title' => $request->title, 'description' => $request->description, 'type' => $request->type, 'url_or_path' => $pathOrUrl, ]); return redirect()->back()->with('success', 'Education material uploaded successfully.'); } public function leads() { $leads = \App\Models\Lead::with('salesPerson') ->orderByRaw("FIELD(priority, 'urgent', 'high', 'medium', 'low')") ->orderBy('created_at', 'desc') ->get(); return view('admin.leads', compact('leads')); // Reusing admin.leads view since it's just a display } // ────────────────────────────────────────────── // Project Resources (files for developers) // ────────────────────────────────────────────── public function resources(Project $project) { if ($project->tech_lead_id !== auth()->id()) { abort(403); } $project->load('resources.uploader'); $developers = User::role('Developer')->get(); return view('techlead.resources', compact('project', 'developers')); } public function storeResource(Request $request, Project $project) { if ($project->tech_lead_id !== auth()->id()) abort(403); $request->validate([ 'title' => 'required|string|max:255', 'description' => 'nullable|string', 'file' => 'required|file|max:512000', // 500MB max per file ]); $file = $request->file('file'); $path = $file->store('project_resources/' . $project->id, 'public'); ProjectResource::create([ 'project_id' => $project->id, 'uploaded_by' => auth()->id(), 'title' => $request->title, 'description' => $request->description, 'file_path' => $path, 'file_type' => $file->getClientMimeType(), 'file_size' => $file->getSize(), 'is_downloadable' => $request->boolean('is_downloadable'), ]); return redirect()->back()->with('success', 'Resource uploaded successfully.'); } public function deleteResource(ProjectResource $resource) { $project = $resource->project; if ($project->tech_lead_id !== auth()->id()) abort(403); Storage::disk('public')->delete($resource->file_path); $resource->delete(); return redirect()->back()->with('success', 'Resource deleted successfully.'); } }
Save Changes
Cancel
Create New File
Create New Folder