File: /var/www/html/owlcrm/app/Http/Controllers/user/UserController.php
<?php
namespace App\Http\Controllers\user;
use App\Http\Controllers\Controller;
use App\Models\Reminder;
use App\Models\Role;
use App\Models\Task;
use App\Models\User;
use App\Models\UserActivityLog;
use App\Models\UserNote;
use App\Models\UserRole;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Validation\Rule;
use Illuminate\Support\Facades\Validator;
use Yajra\DataTables\Facades\DataTables;
class UserController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index(Request $request)
{
if ($request->ajax()) {
$search_keyword = '';
$status = 'all'; // all status
$start_date = '';
$end_date = '';
$request_data = $request->all();
if ($request->has('search_keyword')) {
$search_keyword = $request->search_keyword;
}
if ($request->has('status_filter')) {
$status = $request->status_filter;
}
// avoid zero column as it's checkbox so we can't sort by it
if ($request->has('order') && $request->order[0]['column'] != 0) {
$sort_column_number = $request->order[0]['column'];
$sort_column_dir = $request->order[0]['dir'];
$sort_column_key = $request->columns[$sort_column_number]['data'];
}
if ($request->has('date_range_filter') && $request->date_range_filter != '') {
$date_range_filter_arr = explode(' - ', $request->date_range_filter);
$start_date = formatDate($date_range_filter_arr[0]);
$end_date = formatDate($date_range_filter_arr[1]);
}
$main_query = User::query()
->where(function ($query) {
$authUser = auth()->user();
// Logged-in admin ka apna data
$query->orWhere('parent_id', '=', $authUser->id);
// Direct Sibling (staff) users ka data
});
$query = $main_query;
if (!empty($search_keyword)) {
$query = $query->where('first_name', 'LIKE', '%' . $search_keyword . '%')->orWhere('last_name', 'LIKE', '%' . $search_keyword . '%');
}
if ($status != 'all' && $status != '') {
$query = $query->where('status', $status);
}
if (!empty($sort_column_key)) {
$query = $query->orderBy($sort_column_key, $sort_column_dir);
} else {
$query = $query->latest();
}
if ($start_date != '' && $end_date != '') {
$query = $query->whereDate('created_at', '>=', $start_date)->whereDate('created_at', '<=', $end_date);
}
$data = $query->with('userRoles')->get();
$count_total = $main_query->count();
$count_filter = $count_total;
return DataTables::of($data)
->addColumn('first_name', function ($row) {
return $row->first_name . ' ' . $row->last_name;
})
->addColumn('email', function ($row) {
return $row->email;
})
->editColumn('status', function ($row) {
$update_url = route('user.update.status', $row->id);
return setStatus($row, $update_url);
})
->addColumn('role', function ($row) {
$roleNames = '';
if (isset($row->userRoles) && isset($row->userRoles->role)) {
$roleNames = $row->userRoles->role->name;
}
return $roleNames;
})
->editColumn('created_at', function ($row) {
return formatDate($row->created_at);
})
->addColumn('action', function ($row) {
// if ($row->parent_id == Auth::user()->id) {
return view('users.user.partially.delete', compact('row'));
// }
})
->rawColumns(['action', 'status'])
->with([
"recordsTotal" => $count_total,
"recordsFiltered" => $count_filter,
])
->make(true);
}
return view('users.user.index');
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
$user = auth()->user();
// Fetch roles based on parent and sibling criteria
$roles = Role::query()
->where(function ($query) use ($user) {
$query->where('created_by', $user->parent_id) // Roles created by the parent
->orWhere('created_by', $user->id); // Roles created by the logged-in user
})
->get();
// $user_roles = Role::all();
return view('users.user.create', compact('roles'));
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'first_name' => 'required',
'last_name' => 'required',
'email' => 'required|string|lowercase|email|max:255|unique:users',
'password' => 'required|string|min:8|confirmed',
'role_id' => 'required|exists:roles,id',
]);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
// $userId = auth()->id(); // The ID of the user adding new users
// if (!canAddMoreUsers($userId)) {
// return redirect()->route('users.index')->with('success', 'You have reached your staff limit for your subscription plan..');
// }
DB::beginTransaction();
try {
$user = new User();
$user->first_name = $request->first_name;
$user->last_name = $request->last_name;
$user->status = $request->has('is_active') ? 1 : 0;
$user->is_admin = $request->has('is_admin') ? 1 : 0;
$user->email = $request->email;
$user->password = bcrypt($request->password);
$adminIds = getAdminId();
$user->parent_id = $adminIds->parent_id;
$user->created_by = $adminIds->created_by;
$user->save();
$user_role = new UserRole();
$user_role->user_id = $user->id;
$user_role->role_id = $request->role_id;
$user_role->save();
DB::commit();
return redirect()->route('users.index')->with('success', 'Staff has been added successfully.');
} catch (\Exception $e) {
DB::rollback();
return response()->json(['success' => false, 'message' => $e->getMessage()]);
}
}
/**
* Display the specified resource.
*/
public function show(string $id)
{
$user = User::find($id);
$users = User::all();
$user_activity_logs = UserActivityLog::where('user_id', $id)->with(['user', 'get_created_by'])->get();
return view('users.user.show', compact('user', 'users', 'user_activity_logs'));
}
/**
* Show the form for editing the specified resource.
*/
public function edit(string $id)
{
$user = User::with('userRoles')->find($id);
$user_role = Role::all();
if (isset($user_role)) {
return view('users.user.edit', ['user' => $user, 'user_role' => $user_role]);
} else {
return back()->with('error', 'Staff does not exist');
}
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
$validator = Validator::make($request->all(), [
'first_name' => 'required',
'last_name' => 'required',
'email' => ['required', 'string', 'lowercase', 'email', 'max:255', Rule::unique('users')->ignore($id)],
'role_id' => 'required|exists:roles,id',
]);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
try {
DB::beginTransaction();
User::updateOrCreate(
['id' => $id],
[
'first_name' => $request->input('first_name'),
'last_name' => $request->input('last_name'),
'status' => $request->has('is_active') ? 1 : 0,
'email' => $request->input('email')
],
);
UserRole::updateOrCreate(
['user_id' => $id], //n=match
['role_id' => $request->role_id] //udpate or create
);
DB::commit();
return redirect()->route('users.index')->with('success', 'Staff has been updated successfully');
} catch (\Exception $e) {
DB::rollback();
return response()->json(['success' => false, 'message' => $e->getMessage()]);
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
$user = User::find($id);
if (isset($user)) {
$user->forceDelete();
$user_role = UserRole::where('user_id', $id)->delete();
return redirect()->back()->with('success', 'Staff has been deleted successfully.');
} else {
return back()->with('error', 'User not found.');
}
}
public function updateUsersStatus(Request $request, $id)
{
if ($request->has('new_status')) {
$user = User::find($id);
if ($user) {
$user->status = $request->new_status;
$user->save();
return response()->json(['status' => 'success', 'message' => 'Staff status updated successfully']);
} else {
return response()->json(['status' => 'error', 'message' => 'Staff not found'], 404);
}
} else {
return response()->json(['status' => 'error', 'message' => 'Missing status value'], 404);
}
}
public function addUserReminder(Request $request, $user_id)
{
// Validate the request
$validator = Validator::make($request->all(), [
'reminder_to' => 'required|exists:users,id',
'description' => 'required|string',
'reminder_date' => 'required|date',
]);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
$reminder = new Reminder();
if (isset($reminder)) {
$reminder->reminder_to = $request->input('reminder_to');
$currentUserId = getAdminId();
$reminder->created_by = $currentUserId->created_by;
$reminder->entity_type = 'user';
$reminder->entity_id = $user_id;
$reminder->is_notified = 0;
$reminder->status = 1;
$reminder->description = $request->input('description');
$reminder->reminder_date = $request->input('reminder_date');
$reminder->email_notification = $request->input('email_notification', 0);
$reminder->save();
$user_activity_log = new UserActivityLog();
if (isset($user_activity_log)) {
$user_activity_log->user_id = $user_id;
$user_activity_log->activity_on = 'Reminder';
$user_activity_log->activity = 'added';
$user_activity_log->created_by = $currentUserId->created_by;
$description = "<b>Reminder Values:</b><br>";
$description .= "<b>Reminder Date:</b> " . formatDate($reminder->reminder_date, 'Y/m/d H:i:s') . "<br>";
$description .= "<b>Description:</b> " . $reminder->description . "<br>";
$description .= "<b>Reminder To:</b> " . $reminder->user->first_name . '' . $reminder->user->last_name . "<br>";
$user_activity_log->description = $description;
$user_activity_log->save();
}
return redirect()->back()->with('success-reminder', 'Staff Reminder has been Added successfully.');
} else {
return back()->with('error-reminder', 'Staff Reminder does not exist');
}
}
public function userReminder_index(Request $request)
{
if ($request->ajax()) {
$request_data = $request->all();
$query = Reminder::where('entity_type', 'user')
->where('entity_id', $request->user)
->with('user', 'reminder_user_get');
// Execute the query to get the data
$data = $query->get();
// Calculate the total count of reminders and the filtered count
$count_total = Reminder::where('entity_type', 'user')->count();
$count_filter = $query->count();
// Return the data formatted for DataTables
return DataTables::of($data)
->with('recordsTotal', $count_total)
->with('recordsFiltered', $count_filter)
->addColumn('reminder_to', function ($row) {
return isset($row->user) && ($row->user->first_name . $row->user->last_name) ? $row->first_name . $row->user->last_name : '';
})
->addColumn('user', function ($row) {
return isset($row->created_by_user) && ($row->first_name . $row->created_by_user->last_name) ? $row->first_name . $row->created_by_user->last_name : '';
})
->addColumn('reminder_date', function ($row) {
return formatDate($row->reminder_date, 'Y/m/d H:i:s');
})
->addColumn('is_notified', function ($row) {
return $row->is_notified == 0 ? 'No' : 'Yes';
})
->addColumn('action', function ($row) {
if ($row->is_admin !== 1) {
$reminder = Reminder::findOrFail($row->id);
$users = User::all();
return view('users.user.partially.user-reminder-delete', compact('row', 'reminder', 'users'));
}
})
->rawColumns(['action'])
->with([
"recordsTotal" => $count_total,
"recordsFiltered" => $count_filter,
])
->make(true);
}
return view('users.user.show');
}
public function updateUserReminder(Request $request, string $id)
{
// Validate the request inputs
$validator = Validator::make($request->all(), [
'reminder_to' => 'required|exists:users,id',
'description' => 'required|string',
'reminder_date' => 'required|date',
]);
// Return with validation errors if any
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
// Fetch the latest reminder from the database
$reminder = Reminder::find($id);
if ($reminder) {
$originalReminder = $reminder->getOriginal();
$reminder->reminder_date = $request->input('reminder_date');
$reminder->reminder_to = $request->input('reminder_to');
$reminder->description = $request->input('description');
$reminder->email_notification = $request->input('email_notification', 0); // Default to 0 if not present
$reminder->save();
$user_activity_log = new UserActivityLog();
if ($user_activity_log) {
$user_activity_log->user_id = $reminder->entity_id;
$user_activity_log->activity_on = 'reminder';
$user_activity_log->activity = 'updated';
$currentUserId = getAdminId();
$user_activity_log->created_by = $currentUserId->created_by;
$oldValues = [];
$newValues = [];
// Check and log changes in reminder date
if ($originalReminder['reminder_date'] !== $reminder->reminder_date) {
$oldValues['<b>Reminder Date</b>'] = formatDate($originalReminder['reminder_date'], 'Y/m/d H:i:s');
$newValues['<b>Reminder Date</b>'] = formatDate($reminder->reminder_date, 'Y/m/d H:i:s');
}
// Check and log changes in reminder to (user)
if ($originalReminder['reminder_to'] !== $reminder->reminder_to) {
$originalReminderToUser = User::find($originalReminder['reminder_to']);
$newReminderToUser = User::find($reminder->reminder_to);
$oldValues['<b>Reminder To</b>'] = $originalReminderToUser ? $originalReminderToUser->first_name . ' ' . $originalReminderToUser->last_name : "Unknown";
$newValues['<b>Reminder To</b>'] = $newReminderToUser ? $newReminderToUser->first_name . ' ' . $newReminderToUser->last_name : "Unknown";
}
// Check and log changes in description
if ($originalReminder['description'] !== $reminder->description) {
$oldValues['<b>description</b>'] = $originalReminder['description'];
$newValues['<b>description</b>'] = $reminder->description;
}
// Check and log changes in email notification status
if ($originalReminder['email_notification'] != $reminder->email_notification) {
$oldValues['<b>Email Notification</b>'] = $originalReminder['email_notification'] ? 'Enabled' : 'Disabled';
$newValues['<b>Email Notification</b>'] = $reminder->email_notification ? 'Enabled' : 'Disabled';
}
// Create a formatted description string
$descriptionParts = [];
if (!empty($oldValues)) {
$descriptionParts[] = "<b>Old Values:</b><br> " . implode("<br> ", array_map(function ($key, $value) {
return "$key: $value";
}, array_keys($oldValues), $oldValues));
}
if (!empty($newValues)) {
$descriptionParts[] = "<b>New Values:</b><br>" . implode("<br> ", array_map(function ($key, $value) {
return "$key: $value";
}, array_keys($newValues), $newValues));
}
if (!empty($descriptionParts)) {
$user_activity_log->description = implode("<br> ", $descriptionParts);
$user_activity_log->save();
}
}
return redirect()->back()->with('success-reminder', 'Staff Reminder has been updated successfully.');
} else {
return back()->with('error-reminder', 'Staff Reminder does not exist.');
}
}
public function UserReminder_delete(string $id)
{
$user_reminder = Reminder::find($id);
if (isset($user_reminder)) {
$reminderId = $user_reminder->entity_id;
$user_reminder->delete();
$user_activity_log = new UserActivityLog();
if (isset($user_activity_log)) {
$user_activity_log->user_id = $reminderId;
$user_activity_log->activity_on = 'reminder';
$user_activity_log->activity = 'deleted';
$currentUserId = getAdminId();
$user_activity_log->created_by = $currentUserId->created_by;
$user_activity_log->description = $user_reminder->description;
$user_activity_log->save();
}
return redirect()->back()->with('success-reminder', 'Staff Reminder has been deleted successfully.');
} else {
return back()->with('error-reminder', 'Staff Reminder does not exist');
}
}
public function addUserNotes(Request $request, $user_id)
{
$validator = Validator::make($request->all(), [
'notes' => 'required|string',
]);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
$user_note = new UserNote();
if (isset($user_note)) {
$user_note->user_id = $user_id;
$currentUserId = getAdminId();
$user_note->created_by = $currentUserId->created_by;
$user_note->notes = $request->notes;
$user_note->save();
$user_activity_log = new UserActivityLog();
if (isset($user_activity_log)) {
$user_activity_log->user_id = $user_id;
$user_activity_log->activity_on = 'Note';
$user_activity_log->activity = 'added';
$user_activity_log->created_by = $currentUserId->created_by;
$user_activity_log->description = $user_note->notes;
$user_activity_log->save();
}
return redirect()->back()->with('success-usernote', 'Staff Note added successfully');
} else {
return redirect()->back()->with('error-usernote', 'Staff Note does not exist');
}
}
public function userNotes_index(Request $request)
{
if ($request->ajax()) {
$request_data = $request->all();
// avoid zero column as it's checkbox so we can't sort by it
if ($request->has('order') && $request->order[0]['column'] != 0) {
$sort_column_number = $request->order[0]['column'];
$sort_column_dir = $request->order[0]['dir'];
$sort_column_key = $request->columns[$sort_column_number]['data'];
}
$main_query = UserNote::query();
$query = $main_query->where('user_id', $request->user_id);
$data = $query->with('get_user')->get();
$count_total = $main_query->count();
$count_filter = $count_total;
return DataTables::of($data)
->addColumn('user', function ($row) {
return isset($row->get_user) && ($row->first_name . $row->get_user->last_name) ? $row->get_user->first_name . ' ' . $row->get_user->last_name : '';
})
->addColumn('notes', function ($row) {
return $row->notes;
})
->addColumn('date', function ($row) {
return formatDate($row->created_at, 'Y/m/d H:i:s');
})
->addColumn('action', function ($row) {
if ($row->is_admin !== 1) {
$user_note = UserNote::find($row->id);
return view('users.user.partially.usernotes-delete', compact('row', 'user_note'));
}
})
->rawColumns(['action'])
->with([
"recordsTotal" => $count_total,
"recordsFiltered" => $count_filter,
])
->make(true);
}
return view('users.user.show');
}
public function UserNotesUpdate(Request $request, $id)
{
$validator = Validator::make($request->all(), [
'notes' => 'required|string',
]);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
$user_notes = UserNote::find($id);
if (isset($user_notes)) {
$originalNotes = $user_notes->getOriginal('notes');
$user_notes->notes = $request->notes;
$currentUserId = getAdminId();
$user_notes->created_by = $currentUserId->created_by;
$user_notes->save();
$user_activity_log = new UserActivityLog();
if (isset($user_activity_log)) {
$user_activity_log->user_id = $user_notes->user_id;
$user_activity_log->activity_on = 'note';
$user_activity_log->activity = 'updated';
$user_activity_log->created_by = $currentUserId->created_by;
$oldValues = [];
$newValues = [];
$descriptionParts = []; // Initialize descriptionParts array
$originalNote = $originalNotes;
$newNote = $user_notes->notes;
$descriptionParts = []; // Initialize descriptionParts array
// Check if the note has changed
if ($originalNote !== $newNote) {
$descriptionParts[] = "<b>Old Note:</b><br> " . $originalNote;
$descriptionParts[] = "<b>New Note:</b><br> " . $newNote;
}
// If there are description parts, concatenate and save to the log
if (!empty($descriptionParts)) {
$user_activity_log->description = implode("<br>", $descriptionParts);
$user_activity_log->save();
}
}
return redirect()->back()->with('success-usernote', 'Staff Note Updated successfully');
} else {
return redirect()->back()->with('error-usernote', 'Notes does not exist');
}
}
public function UserNotesDelete(string $id)
{
$user_note = UserNote::find($id);
if (isset($user_note)) {
$userId = $user_note->user_id;
$user_note->delete();
$user_activity_log = new UserActivityLog();
if (isset($user_activity_log)) {
$user_activity_log->user_id = $userId;
$user_activity_log->activity_on = 'notes';
$user_activity_log->activity = 'deleted';
$currentUserId = getAdminId();
$user_activity_log->created_by = $currentUserId->created_by;
$user_activity_log->description = $user_note->notes;
$user_activity_log->save();
}
return redirect()->back()->with('success-usernote', 'Staff Notes has been deleted successfully.');
} else {
return back()->with('error-usernote', 'Staff Notes does not exist');
}
}
public function addUserTask(Request $request, $id)
{
$validator = Validator::make($request->all(), [
'user_id' => 'required|exists:users,id',
'subject' => 'required|string',
]);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
$usertask = new Task();
if (isset($usertask)) {
$usertask->subject = $request->subject;
$usertask->start_date = $request->start_date;
$usertask->due_date = $request->due_date;
$usertask->priority = $request->priority;
$usertask->assigned_to = $request->user_id;
$currentUserId = getAdminId();
$usertask->created_by = $currentUserId->created_by;
$usertask->entity_type = 'user';
$usertask->entity_id = $id;
$usertask->description = $request->description;
$usertask->state = $request->state;
$usertask->status = 1;
$usertask->save();
$user_activity_log = new UserActivityLog();
if (isset($user_activity_log)) {
$user_activity_log->user_id = $id;
$user_activity_log->activity_on = 'Task';
$user_activity_log->activity = 'added';
$user_activity_log->created_by = $currentUserId->created_by;
$description = "<b>Task added:</b><br>";
$description .= "<b>Subject:</b> " . $usertask->subject . "<br>";
$description .= "<b>Start Date:</b> " . formatDate($usertask->start_date, 'Y/m/d H:i:s') . "<br>";
$description .= "<b>Due Date:</b> " . formatDate($usertask->due_date, 'Y/m/d H:i:s') . "<br>";
$description .= "<b>Priority:</b> " . $usertask->priority . "<br>";
$description .= "<b>Assigned To:</b> " . $usertask->user->first_name . '' . $usertask->user->last_name . "<br>";
$description .= "<b>Description:</b> " . $usertask->description . "<br>";
$description .= "<b>State:</b> " . $usertask->state . "<br>";
$user_activity_log->description = $description;
$user_activity_log->save();
}
return redirect()->back()->with('success-usertask', 'Staff Task added successfully');
} else {
return redirect()->back()->with('error-usertask', 'Staff Task does not exist');
}
}
public function userTask_index(Request $request)
{
if ($request->ajax()) {
$request_data = $request->all();
$main_query = Task::query();
$query = $main_query->where('entity_type', 'user')->where('entity_id', $request->user);
$data = $query->with('created_by_user', 'user')->get();
$count_total = $main_query->count();
$count_filter = $query->count();
return DataTables::of($data)
->addColumn('assigned_to', function ($row) {
return isset($row->user) && ($row->user->first_name . $row->user->last_name) ? $row->user->first_name . $row->user->last_name : '';
})
->addColumn('user', function ($row) {
return isset($row->created_by_user) && ($row->created_by_user->first_name . $row->created_by_user->last_name) ? $row->created_by_user->first_name . ' ' . $row->created_by_user->last_name : '';
})
->addColumn('subject', function ($row) {
return $row->subject;
})
->addColumn('action', function ($row) {
if ($row->is_admin !== 1) {
$task = Task::findOrFail($row->id);
$users = User::all();
return view('users.user.partially.usertask-delete', compact('row', 'task', 'users'));
}
})
->rawColumns(['action'])
->with([
"recordsTotal" => $count_total,
"recordsFiltered" => $count_filter,
])
->make(true);
}
return view('users.user.show');
}
public function updateUserTask(Request $request, $id)
{
$validator = Validator::make($request->all(), [
'user_id' => 'required|exists:users,id',
'subject' => 'required|string',
]);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
$usertask = Task::find($id);
if (isset($usertask)) {
$originalTask = $usertask->getOriginal();
$usertask->subject = $request->subject;
$usertask->start_date = $request->start_date;
$usertask->due_date = $request->due_date;
$usertask->priority = $request->priority;
$usertask->assigned_to = $request->user_id;
$currentUserId = getAdminId();
$usertask->created_by = $currentUserId->created_by;
$usertask->description = $request->description;
$usertask->state = $request->state;
$usertask->save();
$user_activity_log = new UserActivityLog();
if ($user_activity_log) {
$user_activity_log->user_id = $usertask->entity_id;
$user_activity_log->activity_on = 'Task';
$user_activity_log->activity = 'updated';
$currentUserId = getAdminId();
$user_activity_log->created_by = $currentUserId->created_by;
$oldValues = [];
$newValues = [];
// Check and log changes for Subject
if ($originalTask['subject'] !== $usertask->subject) {
$oldValues['<b>subject</b>'] = $originalTask['subject'];
$newValues['<b>subject</b>'] = $usertask->subject;
}
if ($originalTask['start_date'] !== $usertask->start_date) {
$oldValues['<b>Start Date</b>'] = formatDate($originalTask['start_date'], 'Y/m/d H:i:s');
$newValues['<b>Start Date</b>'] = formatDate($usertask->start_date, 'Y/m/d H:i:s');
}
if ($originalTask['due_date'] !== $usertask->due_date) {
$oldValues['<b>Due Date</b>'] = formatDate($originalTask['due_date'], 'Y/m/d H:i:s');
$newValues['<b>Due Date</b>'] = formatDate($usertask->due_date, 'Y/m/d H:i:s');
}
if ($originalTask['priority'] !== $usertask->priority) {
$oldValues['<b>Priority</b>'] = $originalTask['priority'];
$newValues['<b>Priority</b>'] = $usertask->priority;
}
if ($originalTask['assigned_to'] !== $usertask->assigned_to) {
$originalAssignedToUser = User::find($originalTask['assigned_to']);
$newAssignedToUser = User::find($usertask->assigned_to);
$oldValues['<b>Assigned To</b>'] = $originalAssignedToUser ? $originalAssignedToUser->first_name . ' ' . $originalAssignedToUser->last_name : "Unknown";
$newValues['<b>Assigned To</b>'] = $newAssignedToUser ? $newAssignedToUser->first_name . ' ' . $newAssignedToUser->last_name : "Unknown";
}
if ($originalTask['state'] !== $usertask->state) {
$oldValues['<b>State</b>'] = $originalTask['state'];
$newValues['<b>State</b>'] = $usertask->state;
}
if ($originalTask['description'] !== $usertask->description) {
$oldValues['<b>Description</b>'] = $originalTask['description'];
$newValues['<b>Description</b>'] = $usertask->description;
}
$descriptionParts = [];
if (!empty($oldValues)) {
$descriptionParts[] = "<b>Old Values:</b><br> " . implode("<br> ", array_map(function ($key, $value) {
return "$key: $value";
}, array_keys($oldValues), $oldValues));
}
if (!empty($newValues)) {
$descriptionParts[] = "<b>New Values:</b><br>" . implode("<br> ", array_map(function ($key, $value) {
return "$key: $value";
}, array_keys($newValues), $newValues));
}
if (!empty($descriptionParts)) {
$user_activity_log->description = implode("<br> ", $descriptionParts);
$user_activity_log->save();
}
return redirect()->back()->with('success-usertask', 'Staff Task Updated successfully');
} else {
return redirect()->back()->with('error-usertask', 'Staff Task does not exist');
}
}
}
public function userTask_delete(string $id)
{
$task = Task::find($id);
if (isset($task)) {
$leadId = $task->entity_id;
$task->delete();
$user_activity_log = new UserActivityLog();
if (isset($user_activity_log)) {
$user_activity_log->user_id = $leadId;
$user_activity_log->activity_on = 'Task';
$user_activity_log->activity = 'deleted';
$currentUserId = getAdminId();
$user_activity_log->created_by = $currentUserId->created_by;
$user_activity_log->description = $task->subject;
$user_activity_log->save();
}
return redirect()->back()->with('success-usertask', 'Staff Task has been deleted successfully.');
} else {
return back()->with('error-usertask', 'Staff Task does not exist');
}
}
public function upload(Request $request, user $user)
{
$request->validate([
'title' => 'required',
'file' => 'required|mimes:jpeg,jpg,png,pdf', // Example validation rules
]);
// Debug: Check if the request contains a file
if ($request->hasFile('file')) {
// Get the uploaded file
$file = $request->file('file');
// Debug: Check file properties
if (!$file->isValid()) {
return redirect()->back()->with('error', 'Invalid file upload.');
}
try {
// Add media to the user's media collection
$media = $user->addMedia($file)
->usingFileName(time() . '_' . $file->getClientOriginalName()) // Optionally rename the file
->toMediaCollection('users');
// Set custom property 'title' if provided
if ($request->has('title')) {
$media->setCustomProperty('title', $request->input('title'));
}
// Save media changes
$media->save();
$user_activity_log = new UserActivityLog();
if (isset($user_activity_log)) {
$user_activity_log->user_id = $user->id; // Use $user->id instead of $user
$user_activity_log->activity_on = 'Image';
$user_activity_log->activity = 'added';
// Ensure getAdminId() returns the correct object or value
$currentUser = getAdminId();
$user_activity_log->created_by = $currentUser->created_by;
$description = "<b>Image added:</b><br>";
$description .= "<b>Name:</b> " . $media->name . "<br>";
$description .= "<b>File Name:</b> " . $media->file_name . "<br>";
$user_activity_log->description = $description;
$user_activity_log->save();
}
return redirect()->back()->with('success', 'File uploaded successfully.');
} catch (\Exception $e) {
// Debug: Log exception details
\log::error('File upload error: ' . $e->getMessage());
return redirect()->back()->with('error', 'File upload failed.');
}
} else {
return redirect()->back()->with('error', 'No file uploaded.');
}
}
public function destroyMediaRecords(string $id)
{
// Fetch the media record to be deleted
$mediaRecord = DB::table('media')->where('id', $id)->first();
// Initialize the UserActivityLog instance
$user_activity_log = new UserActivityLog();
// If media record exists, proceed with deletion
if ($mediaRecord) {
// Fetch the filename before deletion
$fileName = $mediaRecord->file_name;
$userId = $mediaRecord->model_id;
// Delete the media record
$deleted = DB::table('media')->where('id', $id)->delete();
// Log the deletion activity
$user_activity_log->user_id = $userId;
$user_activity_log->activity_on = 'Image';
$user_activity_log->activity = 'deleted';
// Correctly fetch the current user's ID
$currentUser = getAdminId();
$user_activity_log->created_by = $currentUser->created_by;
$user_activity_log->description = "<b>Image deleted:</b><br><b>File Name:</b> " . $fileName . "<br>";
// Save the activity log entry
$user_activity_log->save();
} else {
$deleted = false; // Set $deleted to false if no record was found
}
// Check the deletion result and redirect accordingly
if ($deleted) {
return redirect()->back()->with('success', 'File deleted successfully');
} else {
return redirect()->back()->with('error', 'File not found');
}
}
}