From 30f0f6f5270e679e3839ffec1b47cfc3f111dd7e Mon Sep 17 00:00:00 2001 From: snipe Date: Tue, 25 Oct 2016 02:41:34 -0700 Subject: [PATCH] Export users to CSV Bypasses the weird limit bug in the javascript --- app/Http/Controllers/UsersController.php | 84 ++++++++++++++++++++++++ app/Http/routes.php | 1 + resources/views/users/index.blade.php | 5 +- 3 files changed, 89 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/UsersController.php b/app/Http/Controllers/UsersController.php index 6dcc42c8df..d900172d13 100755 --- a/app/Http/Controllers/UsersController.php +++ b/app/Http/Controllers/UsersController.php @@ -14,6 +14,7 @@ use App\Models\Setting; use App\Models\Statuslabel; use App\Http\Requests\SaveUserRequest; use App\Http\Requests\UpdateUserRequest; +use Symfony\Component\HttpFoundation\StreamedResponse; use App\Models\User; use App\Models\Ldap; use Auth; @@ -1262,4 +1263,87 @@ class UsersController extends Controller $assets = Asset::where('assigned_to', '=', $userId)->with('model')->get(); return response()->json($assets); } + + /** + * Exports users to CSV + * + * @author [A. Gianotto] [] + * @since [v3.5] + * @return \Illuminate\Http\Response + */ + public function getExportUserCsv() + { + + \Debugbar::disable(); + + + $response = new StreamedResponse(function() { + // Open output stream + $handle = fopen('php://output', 'w'); + + User::with('assets', 'accessories', 'consumables', 'licenses', 'manager', 'groups', 'userloc', 'company','throttle')->orderBy('created_at', 'DESC')->chunk(500, function($users) use($handle) { + $headers=[ + // strtolower to prevent Excel from trying to open it as a SYLK file + strtolower(trans('general.id')), + trans('general.company'), + trans('admin/companies/table.title'), + trans('admin/users/table.employee_num'), + trans('admin/users/table.name'), + trans('admin/users/table.email'), + trans('admin/users/table.manager'), + trans('admin/users/table.location'), + trans('general.assets'), + trans('general.licenses'), + trans('general.accessories'), + trans('general.consumables'), + trans('admin/users/table.groups'), + trans('general.notes'), + trans('admin/users/table.activated'), + trans('general.created_at') + ]; + + fputcsv($handle, $headers); + + foreach ($users as $user) { + $user_groups = ''; + + foreach ($user->groups as $user_group) { + $user_groups .= $user_group->name.', '; + } + + // Add a new row with data + $values = [ + $user->id, + ($user->company) ? $user->company->name : '', + $user->title, + $user->employee_num, + $user->fullName(), + $user->email, + ($user->manager) ? $user->manager->fullName() : '', + ($user->location) ? $user->location->name : '', + $user->assets->count(), + $user->licenses->count(), + $user->accessories->count(), + $user->consumables->count(), + $user_groups, + $user->notes, + ($user->activated=='1') ? trans('general.yes') : trans('general.no'), + $user->created_at, + + ]; + + fputcsv($handle, $values); + } + }); + + // Close the output stream + fclose($handle); + }, 200, [ + 'Content-Type' => 'text/csv', + 'Content-Disposition' => 'attachment; filename="users-'.date('Y-m-d-his').'.csv"', + ]); + + return $response; + + } } diff --git a/app/Http/routes.php b/app/Http/routes.php index f23c098723..d70723db8b 100755 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -765,6 +765,7 @@ Route::group([ 'prefix' => 'admin','middleware' => ['web','auth']], function () Route::post('create', [ 'uses' => 'UsersController@postCreate', 'middleware' => ['authorize:users.edit'] ]); Route::get('import', [ 'as' => 'import/user', 'uses' => 'UsersController@getImport', 'middleware' => ['authorize:users.edit'] ]); Route::post('import', [ 'uses' => 'UsersController@postImport', 'middleware' => ['authorize:users.edit'] ]); + Route::get('export', [ 'uses' => 'UsersController@getExportUserCsv', 'middleware' => ['authorize:users.view'] ]); Route::get('{userId}/edit', [ 'as' => 'update/user', 'uses' => 'UsersController@getEdit', 'middleware' => ['authorize:users.edit'] ]); Route::post('{userId}/edit', [ 'uses' => 'UsersController@postEdit', 'middleware' => ['authorize:users.edit'] ]); Route::get('{userId}/clone', [ 'as' => 'clone/user', 'uses' => 'UsersController@getClone', 'middleware' => ['authorize:users.edit'] ]); diff --git a/resources/views/users/index.blade.php b/resources/views/users/index.blade.php index 887f08d74e..5ff870d405 100755 --- a/resources/views/users/index.blade.php +++ b/resources/views/users/index.blade.php @@ -28,6 +28,9 @@ @else {{ trans('admin/users/table.show_deleted') }} @endif + @can('users.view') + Export + @endcan @stop @@ -80,7 +83,7 @@ {{ trans('admin/users/table.employee_num') }} {{ trans('admin/users/table.name') }} - + {{ trans('admin/users/table.username') }}