/** * Update Document * * @param String $name * @param Int $id * @param Request $request * @return Response */ public function putDocument($name, $id, Request $request) { if (!$this->appKeyAvailable($request)) { return $this->notAuthorized($request); } if (!$this->setSessionUser($request)) { $this->setResultError("Not logged in", 401); } elseif (!$this->isCollection($name)) { $this->setResultError("Collection '{$name}' doesn't exist", 404); } else { $document = Document::find($id); if (!$document) { $this->setResultError("Document is not found", 404); } elseif (!$this->isAllowed($request, 'document', $id, 'update') && !$this->isModerator()) { $this->setResultError("Unauthorized action", 403); } else { $data = $request->all(); $document->data = json_encode($data); $document->save(); foreach (Data::whereDocumentId($document->id)->get() as $row) { $row->delete(); } foreach ($data as $key => $value) { Data::create(['document_id' => $document->id, 'key' => $key, 'value' => $value]); } $this->setResultOk(); $this->setDocumentData($document); } } return $this->setResponse(); }