| @@ -99,10 +99,21 @@ | ||
| 99 | 99 | |
| 100 | 100 | return $boardId; |
| 101 | 101 | } |
| 102 | 102 | |
| 103 | + /** | |
| 104 | + * Returns the timesheet report for accessible boards when Pro is active. | |
| 105 | + * Preserves logs for missing users with a deleted-user placeholder. | |
| 106 | + */ | |
| 103 | 107 | public function getTimeSheetReport(Request $request) |
| 104 | 108 | { |
| 109 | + if (!defined('FLUENT_BOARDS_PRO_VERSION')) { | |
| 110 | + return $this->sendError( | |
| 111 | + esc_html__('This is a pro feature', 'fluent-boards'), | |
| 112 | + 403 | |
| 113 | + ); | |
| 114 | + } | |
| 115 | + | |
| 105 | 116 | // Sanitize date inputs - validate they are valid date strings |
| 106 | 117 | $startDate = $request->getSafe('start_date', 'sanitize_text_field'); |
| 107 | 118 | $endDate = $request->getSafe('end_date', 'sanitize_text_field'); |
| 108 | 119 | |
| @@ -169,12 +180,12 @@ | ||
| 169 | 180 | 'working_minutes' => $time['working_minutes'], |
| 170 | 181 | 'completed_at' => $time['completed_at'], |
| 171 | 182 | 'message' => $time['message'], |
| 172 | 183 | 'user' => [ |
| 173 | - 'ID' => $user->ID, | |
| 174 | - 'name' => $user->display_name, | |
| 175 | - 'avatar' => fluent_boards_user_avatar($user->user_email), | |
| 176 | - 'email' => $user->user_email | |
| 184 | + 'ID' => $user ? $user->ID : (int) $time->user_id, | |
| 185 | + 'name' => $user ? $user->display_name : __('Deleted user', 'fluent-boards'), | |
| 186 | + 'avatar' => $user ? fluent_boards_user_avatar($user->user_email) : '', | |
| 187 | + 'email' => $user ? $user->user_email : '' | |
| 177 | 188 | ] |
| 178 | 189 | ]; |
| 179 | 190 | |
| 180 | 191 | } |