Skip to content

Commit

Permalink
document
Browse files Browse the repository at this point in the history
  • Loading branch information
lxerxa committed Aug 27, 2018
1 parent 64746fd commit f9e3125
Show file tree
Hide file tree
Showing 5 changed files with 136 additions and 22 deletions.
81 changes: 61 additions & 20 deletions app/Http/Controllers/DocumentController.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Acl\Acl;
use DB;

use Zipper;
Expand All @@ -25,7 +26,7 @@ public function getOptions(Request $request, $project_key)
->distinct('uploader')
->get([ 'uploader' ]);

return Response()->json(['ecode' => 0, 'data' => $uploaders]);
return Response()->json(['ecode' => 0, 'data' => [ 'uploader' => $uploaders ]]);
}

/**
Expand Down Expand Up @@ -121,18 +122,19 @@ public function createFolder(Request $request, $project_key, $directory)
$name = $request->input('name');
if (!isset($name) || !$name)
{
throw new \UnexpectedValueException('the name can not be empty.', -12400);
throw new \UnexpectedValueException('the name can not be empty.', -11900);
}
$insValues['name'] = $name;

$isExists = DB::collection('document_' . $project_key)
->where('parent', $directory)
->where('name', $name)
->where('d', 1)
->where('del_flag', '<>', 1)
->exists();
if ($isExists)
{
throw new \UnexpectedValueException('the name can not be empty.', -12400);
throw new \UnexpectedValueException('the name cannot be repeated.', -11901);
}

$insValues['pt'] = $this->getParentTree($project_key, $directory);
Expand Down Expand Up @@ -183,15 +185,30 @@ public function update(Request $request, $project_key, $id)
$name = $request->input('name');
if (!isset($name) || !$name)
{
throw new \UnexpectedValueException('the name can not be empty.', -12400);
throw new \UnexpectedValueException('the name can not be empty.', -11900);
}

$old_document = DB::collection('document_' . $project_key)
->where('_id', $id)
->first();
if (!$old_document)
{
throw new \UnexpectedValueException('the name can not be empty.', -12400);
throw new \UnexpectedValueException('the object does not exist.', -11902);
}

if ($old_document['d'] === 1)
{
if (!Acl::isAllowed($this->user->id, 'manage_project', $project_key))
{
return Response()->json(['ecode' => -10002, 'emsg' => 'permission denied.']);
}
}
else
{
if (!Acl::isAllowed($this->user->id, 'upload_file', $project_key) || !Acl::isAllowed($this->user->id, 'download_file', $project_key))
{
return Response()->json(['ecode' => -10002, 'emsg' => 'permission denied.']);
}
}

if ($old_document['name'] !== $name)
Expand All @@ -201,15 +218,20 @@ public function update(Request $request, $project_key, $id)
->where('name', $name)
->where('del_flag', '<>', 1);

//if (isset($old_document['d']) && $old_document['d'] === 1)
//{
// $query->where('d', 1);
//}
if (isset($old_document['d']) && $old_document['d'] === 1)
{
$query->where('d', 1);
}
else
{
$query->where('d', '<>', 1);
}

$isExists = $query->exists();

if ($isExists)
{
throw new \UnexpectedValueException('the name can not be empty.', -12400);
throw new \UnexpectedValueException('the name cannot be repeated.', -11901);
}
}

Expand All @@ -233,7 +255,22 @@ public function destroy($project_key, $id)
->first();
if (!$document)
{
throw new \UnexpectedValueException('the name can not be empty.', -12400);
throw new \UnexpectedValueException('the object does not exist.', -11902);
}

if ($old_document['d'] === 1)
{
if (!Acl::isAllowed($this->user->id, 'manage_project', $project_key))
{
return Response()->json(['ecode' => -10002, 'emsg' => 'permission denied.']);
}
}
else
{
if (!Acl::isAllowed($this->user->id, 'remove_file', $project_key))
{
return Response()->json(['ecode' => -10002, 'emsg' => 'permission denied.']);
}
}

DB::collection('document_' . $project_key)->where('_id', $id)->update([ 'del_flag' => 1 ]);
Expand All @@ -260,7 +297,7 @@ public function upload(Request $request, $project_key, $directory)
$field = array_pop($fields);
if ($_FILES[$field]['error'] > 0)
{
throw new \UnexpectedValueException('upload file errors.', -15101);
throw new \UnexpectedValueException('upload file errors.', -11903);
}

$basename = md5(microtime() . $_FILES[$field]['name']);
Expand All @@ -287,6 +324,7 @@ public function upload(Request $request, $project_key, $directory)
$isExists = DB::collection('document_' . $project_key)
->where('parent', $directory)
->where('name', $fname . ($i < 2 ? '' : ('(' . $i . ')')) . $extname)
->where('d', '<>', 1)
->where('del_flag', '<>', 1)
->exists();
if (!$isExists)
Expand Down Expand Up @@ -327,12 +365,12 @@ public function download(Request $request, $project_key, $id)
->first();
if (!$document)
{
throw new \UnexpectedValueException('the name can not be empty.', -12400);
throw new \UnexpectedValueException('the object does not exist.', -11902);
}

if (isset($document['d']) && $document['d'] === 1)
{
$this->downloadFolder($document['name'], $id);
$this->downloadFolder($project_key, $document['name'], $id);
}
else
{
Expand All @@ -347,15 +385,18 @@ public function download(Request $request, $project_key, $id)
* @param String $directory
* @return \Illuminate\Http\Response
*/
public function downloadFolder($name, $directory)
public function downloadFolder($project_key, $name, $directory)
{

$basepath = '/tmp/' . md5($this->user->id . microtime());
@mkdir($basepath);

$this->contructFolder($basepath . '/' . $name, $directory);
$this->contructFolder($project_key, $basepath . '/' . $name, $directory);

$filename = $basepath . '/' . $name . '.zip';

Zipper::make($filename)->folder($name)->add($basepath . '/' . $name);
Zipper::close();

header("Content-type: application/octet-stream");
header("Accept-Ranges: bytes");
Expand All @@ -371,7 +412,7 @@ public function downloadFolder($name, $directory)
* @param String $id
* @return void
*/
public function contructFolder($fullpath, $id)
public function contructFolder($project_key, $fullpath, $id)
{
@mkdir($fullpath);

Expand All @@ -383,15 +424,15 @@ public function contructFolder($fullpath, $id)
{
if (isset($doc['d']) && $doc['d'] === 1)
{
$this->contructFolder($fullpath . '/' . $doc['name'], $doc['_id']->__toString());
$this->contructFolder($project_key, $fullpath . '/' . $doc['name'], $doc['_id']->__toString());
}
else
{
$filepath = config('filesystems.disks.local.root', '/tmp') . '/' . substr($doc['index'], 0, 2);
$filename = $filepath . '/' . $doc['index'];
if (file_exists($filename))
{
@copy($filepath, $fullpath . '/' . $doc['name']);
@copy($filename, $fullpath . '/' . $doc['name']);
}
}
}
Expand All @@ -410,7 +451,7 @@ public function downloadFile($name, $index)
$filename = $filepath . '/' . $index;
if (!file_exists($filename))
{
throw new \UnexpectedValueException('file does not exist.', -15100);
throw new \UnexpectedValueException('file does not exist.', -11904);
}

header("Content-type: application/octet-stream");
Expand Down
8 changes: 8 additions & 0 deletions app/Http/routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,14 @@
Route::get('file/{id}', [ 'middleware' => 'privilege:download_file', 'uses' => 'FileController@download' ]);
Route::delete('file/{id}', [ 'middleware' => 'privilege:remove_file', 'uses' => 'FileController@delete' ]);

Route::post('document/{id}/upload', [ 'middleware' => 'privilege:upload_file', 'uses' => 'DocumentController@upload' ]);
Route::get('document/{id}/download', [ 'middleware' => 'privilege:download_file', 'uses' => 'DocumentController@download' ]);
Route::get('document/options', [ 'middleware' => 'privilege:view_project', 'uses' => 'DocumentController@getOptions' ]);
Route::get('document/{id}', [ 'middleware' => 'privilege:view_project', 'uses' => 'DocumentController@index' ]);
Route::post('document/{id}/directory', [ 'middleware' => 'privilege:manage_project', 'uses' => 'DocumentController@createFolder' ]);
Route::put('document/{id}', 'DocumentController@update');
Route::delete('document/{id}', 'DocumentController@destroy');

Route::resource('kanban', 'BoardController');
Route::get('kanban/{id}/access', 'BoardController@recordAccess');
Route::post('kanban/{id}/rank', 'BoardController@setRank');
Expand Down
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@
"jenssegers/mongodb": "^3.0",
"cartalyst/sentinel": "^2.0",
"maatwebsite/excel": "^2.1",
"adldap2/adldap2": "^8.1"
"adldap2/adldap2": "^8.1",
"chumper/zipper": "^1.0"
},
"require-dev": {
"fzaninotto/faker": "~1.4",
Expand Down
62 changes: 61 additions & 1 deletion composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions config/app.php
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,8 @@
Cartalyst\Sentinel\Laravel\SentinelServiceProvider::class,

Maatwebsite\Excel\ExcelServiceProvider::class,

Chumper\Zipper\ZipperServiceProvider::class,
],

/*
Expand Down Expand Up @@ -211,6 +213,8 @@
'Activation' => Cartalyst\Sentinel\Laravel\Facades\Activation::class,
'Reminder' => Cartalyst\Sentinel\Laravel\Facades\Reminder::class,
'Sentinel' => Cartalyst\Sentinel\Laravel\Facades\Sentinel::class,

'Zipper' => Chumper\Zipper\Zipper::class,
],

];

0 comments on commit f9e3125

Please sign in to comment.