diff --git a/app/Entities/Projects/File.php b/app/Entities/Projects/File.php
index 80ecafd..2c2543e 100644
--- a/app/Entities/Projects/File.php
+++ b/app/Entities/Projects/File.php
@@ -20,6 +20,11 @@ class File extends Model
public function getSize()
{
- return \Storage::size('public/files/'.$this->filename);
+ return $this->fileExists() ? \Storage::size('public/files/'.$this->filename) : 0;
+ }
+
+ public function fileExists()
+ {
+ return \Storage::exists('public/files/'.$this->filename);
}
}
diff --git a/app/Http/Controllers/Projects/FilesController.php b/app/Http/Controllers/Projects/FilesController.php
index 3baad31..53c6d4b 100644
--- a/app/Http/Controllers/Projects/FilesController.php
+++ b/app/Http/Controllers/Projects/FilesController.php
@@ -16,13 +16,18 @@ class FilesController extends Controller
public function index(Request $request, $fileableId)
{
+ $editableFile = null;
$fileableType = $request->segment(1); // projects, features
$modelName = $this->getModelName($fileableType);
$modelShortName = $this->getModelShortName($modelName);
$model = $modelName::findOrFail($fileableId);
$files = $model->files;
- return view($fileableType.'.files', [$modelShortName => $model, 'files' => $files]);
+ if (in_array($request->get('action'), ['edit', 'delete']) && $request->has('id')) {
+ $editableFile = File::find($request->get('id'));
+ }
+
+ return view($fileableType.'.files', [$modelShortName => $model, 'files' => $files, 'editableFile' => $editableFile]);
}
public function create(Request $request, $fileableId)
@@ -66,6 +71,19 @@ class FilesController extends Controller
return redirect()->home();
}
+ public function update(Request $request, File $file)
+ {
+ $file->title = $request->get('title');
+ $file->description = $request->get('description');
+ $file->save();
+
+ flash(trans('file.updated'), 'success');
+
+ $resourceName = array_search($file->fileable_type, $this->fileableTypes);
+
+ return redirect()->route($resourceName.'.files', $file->fileable_id);
+ }
+
private function proccessPhotoUpload($data, $fileableType, $fileableId)
{
$file = $data['file'];
diff --git a/resources/lang/id/file.php b/resources/lang/id/file.php
index 10ae295..2c74383 100644
--- a/resources/lang/id/file.php
+++ b/resources/lang/id/file.php
@@ -25,7 +25,7 @@ return [
'download' => 'Download',
// Attributes
- 'name' => 'Nama File',
+ 'title' => 'Nama File',
'description' => 'Deskripsi File',
'size' => 'Ukuran File',
];
diff --git a/resources/views/projects/files.blade.php b/resources/views/projects/files.blade.php
index 0e401b1..3945a5c 100755
--- a/resources/views/projects/files.blade.php
+++ b/resources/views/projects/files.blade.php
@@ -36,7 +36,9 @@
{!! html_link_to_route('files.download', '', [$file->id], ['icon' => 'file', 'title' => trans('file.download')]) !!}
|
- edit |
+
+ {!! html_link_to_route('projects.files', '', [$project->id, 'action' => 'edit', 'id' => $file->id], ['icon' => 'edit', 'title' => trans('file.edit')]) !!}
+ |
@empty
| {{ trans('file.empty') }} |
@@ -46,6 +48,7 @@
+ @if (Request::has('action') == false)
{{ trans('file.create') }}
@@ -58,6 +61,20 @@
{!! Form::close() !!}
+ @endif
+ @if (Request::get('action') == 'edit' && $editableFile)
+
+
{{ trans('file.edit') }} : {{ $editableFile->title }}
+
+ {!! Form::model($editableFile, ['route' => ['files.update', $editableFile->id],'method' => 'patch']) !!}
+ {!! FormField::text('title', ['label' => trans('file.title'), 'required' => true]) !!}
+ {!! FormField::textarea('description', ['label' => trans('file.description')]) !!}
+ {!! Form::submit(trans('file.update'), ['class' => 'btn btn-success']) !!}
+ {{ link_to_route('projects.files', trans('app.cancel'), [$project->id], ['class' => 'btn btn-default']) }}
+ {!! Form::close() !!}
+
+
+ @endif
diff --git a/routes/web/projects.php b/routes/web/projects.php
index 79208be..130838f 100644
--- a/routes/web/projects.php
+++ b/routes/web/projects.php
@@ -38,4 +38,5 @@ Route::group(['middleware' => ['web','role:admin'], 'namespace' => 'Projects'],
Route::get('projects/{project}/files', ['as' => 'projects.files', 'uses' => 'FilesController@index']);
Route::post('files/{fileable}', ['as' => 'files.upload', 'uses' => 'FilesController@create']);
Route::get('files/{file}', ['as' => 'files.download', 'uses' => 'FilesController@show']);
+ Route::patch('files/{file}', ['as' => 'files.update', 'uses' => 'FilesController@update']);
});
diff --git a/tests/Feature/Projects/UploadFilesTest.php b/tests/Feature/Projects/UploadFilesTest.php
index 56f0ed0..bc159b5 100644
--- a/tests/Feature/Projects/UploadFilesTest.php
+++ b/tests/Feature/Projects/UploadFilesTest.php
@@ -35,4 +35,40 @@ class UploadFilesTest extends TestCase
$filePath = storage_path('app/public/files/' . $file->filename);
$this->assertFileExistsThenDelete($filePath, 'File doesn\'t exists.');
}
+
+ /** @test */
+ public function user_can_edit_document_file_on_a_project()
+ {
+ $user = $this->adminUserSigningIn();
+ $project = factory(Project::class)->create(['owner_id' => $user->id]);
+ $this->visit(route('projects.files', [$project->id]));
+
+ $this->attach(storage_path('app/guitar-640.jpg'), 'file');
+ $this->type('Judul file', 'title');
+ $this->type('Deskripsi file yang diuplod.', 'description');
+ $this->press(trans('file.upload'));
+
+ $this->assertCount(1, $project->files);
+
+ $file = $project->files->first();
+
+ $this->visit(route('projects.files', [$project->id, 'id' => $file->id, 'action' => 'edit']));
+ $this->seePageIs(route('projects.files', [$project->id, 'action' => 'edit', 'id' => $file->id]));
+
+ $this->type('Edit Judul file', 'title');
+ $this->type('Edit Deskripsi file yang diuplod.', 'description');
+ $this->press(trans('file.update'));
+
+ $this->seePageIs(route('projects.files', [$project->id]));
+
+ $this->seeInDatabase('files', [
+ 'fileable_id' => $project->id,
+ 'fileable_type' => 'App\Entities\Projects\Project',
+ 'title' => 'Edit Judul file',
+ 'description' => 'Edit Deskripsi file yang diuplod.',
+ ]);
+
+ $filePath = storage_path('app/public/files/' . $file->filename);
+ $this->assertFileExistsThenDelete($filePath, 'File doesn\'t exists.');
+ }
}
diff --git a/tests/TestCase.php b/tests/TestCase.php
index 4de66f8..a9a7d24 100644
--- a/tests/TestCase.php
+++ b/tests/TestCase.php
@@ -52,9 +52,9 @@ class TestCase extends \Laravel\BrowserKitTesting\TestCase
return $user;
}
- protected function assertFileExistsThenDelete($filePath)
+ protected function assertFileExistsThenDelete($filePath, $message = null)
{
- $this->assertTrue(file_exists($filePath));
+ $this->assertTrue(file_exists($filePath), $message);
unlink($filePath);
$this->assertFalse(file_exists($filePath));