feat(profile,publications): integrate working Google Scholar import flow and unified faculty profile system

This commit is contained in:
Harshil Vora
2025-10-18 02:53:32 -07:00
parent 8fe0ef8112
commit ba28588e38
19 changed files with 915 additions and 139 deletions

View File

@@ -0,0 +1,120 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\FacultyProfile;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
class FacultyProfileController extends Controller
{
/**
* Show logged-in user's faculty profile.
*/
public function index()
{
$user = Auth::user();
$profile = FacultyProfile::firstOrCreate(
['user_id' => $user->id],
[
'name' => $user->name ?? '',
'email' => $user->email ?? '',
'phone_number' => '',
'vidhvan_id' => '',
'google_scholar_id' => '',
'linkedin_id' => '',
'designation' => '',
'salutation' => '',
'qualification' => '',
'address' => '',
'employee_id' => '',
'department_name' => '',
'programme_name' => '',
'date_of_joining' => now()->toDateString(),
]
);
return view('profile.index', compact('user', 'profile'));
}
/**
* Show the edit form for faculty profile.
*/
public function edit()
{
$user = Auth::user();
$profile = FacultyProfile::where('user_id', $user->id)->firstOrFail();
return view('profile.edit', compact('profile'));
}
/**
* Update faculty profile.
*/
public function update(Request $request)
{
$user = Auth::user();
$profile = FacultyProfile::where('user_id', $user->id)->firstOrFail();
$validated = $request->validate([
'name' => 'required|string|max:255',
'email' => 'required|email',
'phone_number' => 'nullable|string|max:20',
'employee_id' => 'nullable|string|max:255',
'department_name' => 'nullable|string|max:255',
'programme_name' => 'nullable|string|max:255',
'salutation' => 'nullable|string|max:50',
'designation' => 'nullable|string|max:255',
'date_of_joining' => 'nullable|date',
'qualification' => 'nullable|string|max:500',
'address' => 'nullable|string|max:500',
'google_scholar_id' => 'nullable|string|max:255',
'vidhvan_id' => 'nullable|string|max:255',
'linkedin_id' => 'nullable|string|max:255',
'profile_photo' => 'nullable|image|max:2048', // 2MB max
]);
// Handle profile photo upload
if ($request->hasFile('profile_photo')) {
if ($profile->profile_photo_path && Storage::exists($profile->profile_photo_path)) {
Storage::delete($profile->profile_photo_path);
}
$validated['profile_photo_path'] = $request->file('profile_photo')
->store('public/profile_photos');
}
// Update profile with validated data
$profile->update([
'name' => $validated['name'] ?? $profile->name,
'email' => $validated['email'] ?? $profile->email,
'phone_number' => $validated['phone_number'] ?? '',
'employee_id' => $validated['employee_id'] ?? '',
'department_name' => $validated['department_name'] ?? '',
'programme_name' => $validated['programme_name'] ?? '',
'salutation' => $validated['salutation'] ?? '',
'designation' => $validated['designation'] ?? '',
'date_of_joining' => $validated['date_of_joining'] ?? $profile->date_of_joining,
'qualification' => $validated['qualification'] ?? '',
'address' => $validated['address'] ?? '',
'google_scholar_id' => $validated['google_scholar_id'] ?? '',
'vidhvan_id' => $validated['vidhvan_id'] ?? '',
'linkedin_id' => $validated['linkedin_id'] ?? '',
'profile_photo_path' => $validated['profile_photo_path'] ?? $profile->profile_photo_path,
]);
// ✅ Update the main user record (used by PublicationsController)
if ($request->filled('google_scholar_id')) {
$user->scholar_url = $request->input('google_scholar_id');
$user->save();
}
// ✅ Refresh session to ensure it reflects the latest Scholar URL immediately
Auth::setUser($user->fresh());
return redirect()
->route('faculty.profile.index')
->with('success', 'Profile updated successfully.');
}
}