/**
  * Validate the input and store the ProjectPhaseDocumentComment in the database.
  *
  * @param \Illuminate\Http\Request $request
  * @param int $projectId
  * @param int $projectPhaseId
  * @param int $projectPhaseDocumentId
  *
  * @return Response
  */
 public function store(Request $request, $projectId, $projectPhaseId, $projectPhaseDocumentId)
 {
     $projectPhaseDocument = ProjectPhaseDocument::where('id', '=', $projectPhaseDocumentId)->where('project_phase_id', '=', $projectPhaseId)->firstOrFail();
     $this->validate($request, $this->createProjectPhasePhaseDocumentCommentRules);
     $projectPhaseDocumentComment = ProjectPhaseDocumentComment::create(['project_phase_document_id' => $projectPhaseDocument->id, 'content' => $request->input('content')]);
     if (!isset($projectPhaseDocumentComment)) {
         abort(503);
     }
     return redirect()->route('project.phase.document.show', ['project' => $projectId, 'phase' => $projectPhaseId, 'document' => $projectPhaseDocumentId]);
 }
 /**
  * Test that a ProjectPhaseDocument can be edited via form and a history element was created.
  */
 public function testEditForm()
 {
     $admin = $this->createSuperuser();
     $this->be($admin);
     $project = $this->createProject();
     $projectPhase = $this->createProjectPhase(1, $project);
     $projectPhaseDocument = $this->createProjectPhaseDocument($projectPhase);
     $originalTitle = $projectPhaseDocument->title;
     $this->call('GET', route('project.phase.document.edit', ['project' => $project->id, 'phase' => $projectPhase->id, 'document' => $projectPhaseDocument->id]));
     $this->assertResponseOk();
     $this->call('PUT', route('project.phase.document.update', ['project' => $project->id, 'phase' => $projectPhase->id, 'document' => $projectPhaseDocument->id]), ['title' => 'My Test ProjectPhaseDocument Update', 'content' => 'My ProjectPhaseDocumentContentUpdate', 'type' => 'published', '_token' => Session::token()]);
     $this->assertRedirectedToRoute('project.phase.document.show', ['project' => $project->id, 'phase' => $projectPhase->id, 'document' => $projectPhaseDocument->id]);
     $projectPhaseDocument = ProjectPhaseDocument::find($projectPhaseDocument->id);
     $this->assertNotNull($projectPhaseDocument);
     $this->assertEquals('My Test ProjectPhaseDocument Update', $projectPhaseDocument->title);
     $projectPhaseDocumentHistory = ProjectPhaseDocument::where('parent_project_phase_document_id', '=', $projectPhaseDocument->id)->where('type', '=', 'history')->first();
     $this->assertNotNull($projectPhaseDocumentHistory);
     $this->assertEquals($originalTitle, $projectPhaseDocumentHistory->title);
 }
 /**
  * Compare two versions of a ProjectPhaseDocument.
  *
  * @param Request $request
  * @param int $projectId
  * @param int $projectPhaseId
  * @param int $projectPhaseDocumentId
  *
  * @return Response
  */
 public function compare(Request $request, $projectId, $projectPhaseId, $projectPhaseDocumentId)
 {
     $projectPhaseDocument = ProjectPhaseDocument::where('id', '=', $projectPhaseDocumentId)->where('project_phase_id', '=', $projectPhaseId)->with(['history', 'phase', 'phase.project'])->firstOrFail();
     $old = ProjectPhaseDocument::where('id', '=', $request->input('old'))->where(function (\Illuminate\Database\Eloquent\Builder $query) use($projectPhaseDocument) {
         $query->where('parent_project_phase_document_id', '=', $projectPhaseDocument->id)->orWhere('id', '=', $projectPhaseDocument->id);
     })->firstOrFail();
     $new = ProjectPhaseDocument::where('id', '=', $request->input('new'))->where(function (\Illuminate\Database\Eloquent\Builder $query) use($projectPhaseDocument) {
         $query->where('parent_project_phase_document_id', '=', $projectPhaseDocument->id)->orWhere('id', '=', $projectPhaseDocument->id);
     })->firstOrFail();
     if (!isset($old) || !isset($new)) {
         abort(404);
     }
     $diff = new \Diff(explode("\n", $old->content), explode("\n", $new->content));
     $renderer = new \VisualAppeal\Connect\Extensions\DiffRenderer();
     $renderer->oldTitle = $old->created_at->timezone(\Sentry::getUser()->timezone)->format(\Config::get('app.format.dateTime'));
     $renderer->newTitle = $new->created_at->timezone(\Sentry::getUser()->timezone)->format(\Config::get('app.format.dateTime'));
     $render = $diff->render($renderer);
     return view('project.phase.document.compare', ['project' => $projectPhaseDocument->phase->project, 'projectPhase' => $projectPhaseDocument->phase, 'projectPhaseDocument' => $projectPhaseDocument, 'render' => $render]);
 }