/** * Update User Data * * @param Int $id * @param Request $request * @return Response */ public function putUserById($id, Request $request) { if (!$this->appKeyAvailable($request)) { return $this->notAuthorized($request); } $this->setResultOk(); if ($this->isSessionEmpty($request)) { $this->setResultError("Session token is missing", 401); } elseif ($this->setSessionUser($request)) { $user = User::whereId($id)->first(); if ($user->id == $this->user->id) { return $this->putUser($request); } if (!$this->isAdmin()) { $this->setResultError("Unauthorized action", 403); } elseif ($user === null) { $this->setResultError("User not found", 404); } else { $validator = Validator::make($request->all(), ['username' => 'min:4|max:32|unique:users,username,' . $user->id, 'email' => 'max:32|email|unique:users,email,' . $user->id]); if ($validator->fails()) { $this->setResultError($validator->messages(), 400); } elseif (empty($request->all())) { $this->setResultError("Empty request", 400); } else { $data = $request->all(); if (!empty($data['email'])) { $user->email = $data['email']; } if (!empty($data['username'])) { $user->username = $data['username']; } $user->save(); if (isset($data['profile'])) { foreach ($data['profile'] as $key => $value) { if (empty($value)) { Profile::whereUserId($user->id)->whereKey($key)->first()->delete(); } else { Profile::updateOrCreate(['key' => $key, 'user_id' => $user->id], ['value' => $value]); } } } } } } else { $this->setResultError("Mismatched session token", 401); } return $this->setResponse(); }