Adds valifdation to profile page
							parent
							
								
									730a5c153e
								
							
						
					
					
						commit
						c32bbd518b
					
				|  | @ -12,19 +12,35 @@ | |||
|  * - `edit`: Edit user profile details, rights, or avatar. | ||||
|  */ | ||||
| 
 | ||||
| // Get any new feedback messages
 | ||||
| include '../app/includes/feedback-get.php'; | ||||
| include '../app/includes/feedback-show.php'; | ||||
| 
 | ||||
| $action = $_REQUEST['action'] ?? ''; | ||||
| 
 | ||||
| // if a form is submitted, it's from the edit page
 | ||||
| if ($_SERVER['REQUEST_METHOD'] == 'POST') { | ||||
| 
 | ||||
|     require_once '../app/classes/validator.php'; | ||||
| 
 | ||||
|     // Apply rate limiting for profile operations
 | ||||
|     require_once '../app/includes/rate_limit_middleware.php'; | ||||
|     checkRateLimit($db, 'profile', $user_id); | ||||
| 
 | ||||
|     $item = $_REQUEST['item'] ?? ''; | ||||
| 
 | ||||
|     // avatar removal
 | ||||
|     if ($item === 'avatar' && $action === 'remove') { | ||||
|         $validator = new Validator(['user_id' => $user_id]); | ||||
|         $rules = [ | ||||
|             'user_id' => [ | ||||
|                 'required' => true, | ||||
|                 'numeric' => true | ||||
|             ] | ||||
|         ]; | ||||
| 
 | ||||
|         if (!$validator->validate($rules)) { | ||||
|             Feedback::flash('ERROR', 'DEFAULT', $validator->getFirstError()); | ||||
|             header("Location: $app_root?page=profile"); | ||||
|             exit(); | ||||
|         } | ||||
| 
 | ||||
|         $result = $userObject->removeAvatar($user_id, $config['avatars_path'].$userDetails[0]['avatar']); | ||||
|         if ($result === true) { | ||||
|             $_SESSION['notice'] .= "Avatar for user \"{$userDetails[0]['username']}\" is removed. "; | ||||
|  | @ -37,11 +53,34 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') { | |||
|     } | ||||
| 
 | ||||
|     // update the profile
 | ||||
|     $validator = new Validator($_POST); | ||||
|     $rules = [ | ||||
|         'name' => [ | ||||
|             'max' => 100 | ||||
|         ], | ||||
|         'email' => [ | ||||
|             'email' => true, | ||||
|             'max' => 100 | ||||
|         ], | ||||
|         'timezone' => [ | ||||
|             'max' => 50 | ||||
|         ], | ||||
|         'bio' => [ | ||||
|             'max' => 1000 | ||||
|         ] | ||||
|     ]; | ||||
| 
 | ||||
|     if (!$validator->validate($rules)) { | ||||
|         Feedback::flash('ERROR', 'DEFAULT', $validator->getFirstError()); | ||||
|         header("Location: $app_root?page=profile"); | ||||
|         exit(); | ||||
|     } | ||||
| 
 | ||||
|     $updatedUser = [ | ||||
|             'name'		=> $_POST['name'] ?? '', | ||||
|             'email'		=> $_POST['email'] ?? '', | ||||
|             'timezone'		=> $_POST['timezone'] ?? '', | ||||
|             'bio'		=> $_POST['bio'] ?? '', | ||||
|         'name' => htmlspecialchars($_POST['name'] ?? ''), | ||||
|         'email' => filter_var($_POST['email'] ?? '', FILTER_VALIDATE_EMAIL), | ||||
|         'timezone' => htmlspecialchars($_POST['timezone'] ?? ''), | ||||
|         'bio' => htmlspecialchars($_POST['bio'] ?? ''), | ||||
|     ]; | ||||
|     $result = $userObject->editUser($user_id, $updatedUser); | ||||
|     if ($result === true) { | ||||
|  | @ -51,7 +90,21 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') { | |||
|     } | ||||
| 
 | ||||
|     // update the rights
 | ||||
|     $newRights = $_POST['rights'] ?? array(); | ||||
|     if (isset($_POST['rights'])) { | ||||
|         $validator = new Validator(['rights' => $_POST['rights']]); | ||||
|         $rules = [ | ||||
|             'rights' => [ | ||||
|                 'array' => true | ||||
|             ] | ||||
|         ]; | ||||
| 
 | ||||
|         if (!$validator->validate($rules)) { | ||||
|             Feedback::flash('ERROR', 'DEFAULT', $validator->getFirstError()); | ||||
|             header("Location: $app_root?page=profile"); | ||||
|             exit(); | ||||
|         } | ||||
| 
 | ||||
|         $newRights = $_POST['rights']; | ||||
|         // extract the new right_ids
 | ||||
|         $userRightsIds = array_column($userRights, 'right_id'); | ||||
|         // what rights we need to add
 | ||||
|  | @ -68,6 +121,7 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') { | |||
|                 $userObject->removeUserRight($user_id, $rightId); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     // update the avatar
 | ||||
|     if (!empty($_FILES['avatar_file']['tmp_name'])) { | ||||
|  | @ -89,10 +143,21 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') { | |||
|             $allTimezones = timezone_identifiers_list(); | ||||
|             // if timezone is already set, we pass a flag for JS to not autodetect browser timezone
 | ||||
|             $isTimezoneSet = !empty($userDetails[0]['timezone']); | ||||
| 
 | ||||
|             // Get any new feedback messages
 | ||||
|             include '../app/includes/feedback-get.php'; | ||||
|             include '../app/includes/feedback-show.php'; | ||||
| 
 | ||||
|             // Load the template
 | ||||
|             include '../app/templates/profile-edit.php'; | ||||
|             break; | ||||
| 
 | ||||
|         default: | ||||
|             // Get any new feedback messages
 | ||||
|             include '../app/includes/feedback-get.php'; | ||||
|             include '../app/includes/feedback-show.php'; | ||||
| 
 | ||||
|             // Load the template
 | ||||
|             include '../app/templates/profile.php'; | ||||
|     } | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue