diff --git a/app/controllers/admin/AssetsController.php b/app/controllers/admin/AssetsController.php index 4a105a8c26..a21d55743b 100644 --- a/app/controllers/admin/AssetsController.php +++ b/app/controllers/admin/AssetsController.php @@ -20,6 +20,8 @@ use Response; class AssetsController extends AdminController { + protected $qrCodeDimensions = array( 'height' => 160, 'width' => 160); + /** * Show a list of all the assets. * @@ -527,10 +529,20 @@ class AssetsController extends AdminController { $asset = Asset::find($assetId); if (isset($asset->id)) { - return View::make('backend/hardware/view', compact('asset')); + + $settings = Setting::getSettings(); + + $qr_code = (object) array( + 'display' => $settings->qr_code === '1', + 'height' => $this->qrCodeDimensions['height'], + 'width' => $this->qrCodeDimensions['width'], + 'url' => route('qr_code/hardware', $asset->id) + ); + + return View::make('backend/hardware/view', compact('asset', 'qr_code')); } else { // Prepare the error message - $error = Lang::get('admin/hardware/message.does_not_exist', compact('id' )); + $error = Lang::get('admin/hardware/message.does_not_exist', compact('id')); // Redirect to the user management page return Redirect::route('assets')->with('error', $error); @@ -538,6 +550,35 @@ class AssetsController extends AdminController { } + /** + * Get the QR code representing the asset + * + * @param int $assetId + * @return View + **/ + public function getQrCode($assetId = null) + { + $settings = Setting::getSettings(); + + if ($settings->qr_code === '1') { + $asset = Asset::find($assetId); + if (isset($asset->id)) { + $renderer = new \BaconQrCode\Renderer\Image\Png; + $renderer->setWidth($this->qrCodeDimensions['height']) + ->setHeight($this->qrCodeDimensions['height']); + $writer = new \BaconQrCode\Writer($renderer); + $content = $writer->writeString(route('view/hardware', $asset->id)); + + $response = Response::make($content, 200); + $response->header('Content-Type', 'image/png'); + return $response; + } + } + + $response = Response::make('', 404); + return $response; + } + /** * Asset update. * diff --git a/app/controllers/admin/SettingsController.php b/app/controllers/admin/SettingsController.php index 2f67ecd6fc..00640e4630 100644 --- a/app/controllers/admin/SettingsController.php +++ b/app/controllers/admin/SettingsController.php @@ -38,7 +38,8 @@ class SettingsController extends AdminController { public function getEdit() { $settings = Setting::orderBy('created_at', 'DESC')->paginate(10); - return View::make('backend/settings/edit', compact('settings')); + $is_gd_installed = !!extension_loaded('gd'); + return View::make('backend/settings/edit', compact('settings', 'is_gd_installed')); } @@ -82,6 +83,7 @@ class SettingsController extends AdminController { $setting->id = '1'; $setting->site_name = e(Input::get('site_name')); $setting->per_page = e(Input::get('per_page')); + $setting->qr_code = e(Input::get('qr_code', '0')); // Was the asset updated? if($setting->save()) diff --git a/app/database/migrations/2014_01_28_031200_add_qr_code_to_settings_table.php b/app/database/migrations/2014_01_28_031200_add_qr_code_to_settings_table.php new file mode 100644 index 0000000000..f4541fb54a --- /dev/null +++ b/app/database/migrations/2014_01_28_031200_add_qr_code_to_settings_table.php @@ -0,0 +1,34 @@ +integer('qr_code')->nullable()->default(NULL); + + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('settings', function($table) + { + $table->dropColumn('qr_code'); + }); + } + +} \ No newline at end of file diff --git a/app/routes.php b/app/routes.php index 01cb200a01..41eb761ad5 100755 --- a/app/routes.php +++ b/app/routes.php @@ -26,6 +26,7 @@ Route::group(array('prefix' => 'hardware'), function() Route::get('{assetId}/checkin', array('as' => 'checkin/hardware', 'uses' => 'Controllers\Admin\AssetsController@getCheckin')); Route::post('{assetId}/checkin', 'Controllers\Admin\AssetsController@postCheckin'); Route::get('{assetId}/view', array('as' => 'view/hardware', 'uses' => 'Controllers\Admin\AssetsController@getView')); + Route::get('{assetId}_qr_code.png', array('as' => 'qr_code/hardware', 'uses' => 'Controllers\Admin\AssetsController@getQrCode')); # Asset Model Management diff --git a/app/views/backend/hardware/view.blade.php b/app/views/backend/hardware/view.blade.php index 872ba027af..6365ec6286 100644 --- a/app/views/backend/hardware/view.blade.php +++ b/app/views/backend/hardware/view.blade.php @@ -154,6 +154,13 @@ View Asset {{ $asset->asset_tag }} ::
+ @if ($qr_code->display) +
QR Code
+

+ +

+ @endif + @if ((isset($asset->assigned_to ) && ($asset->assigned_to > 0)))

Checked Out To:
+
+ +
+ @if ($is_gd_installed) + qr_code === '1' ? 'checked' : '' }} /> + @else + + PHP Image Processing and GD plugin is NOT installed. +
+ You must install php-gd to display QR codes, see install instructions. +
+ @endif + {{ $errors->first('qr_code', ':message') }} +
+
+ @endforeach diff --git a/app/views/backend/settings/index.blade.php b/app/views/backend/settings/index.blade.php index c95f9d02b9..2d285e7349 100755 --- a/app/views/backend/settings/index.blade.php +++ b/app/views/backend/settings/index.blade.php @@ -43,6 +43,14 @@ Settings :: Per Page {{ $setting->per_page }} + + Display QR Codes +@if ($setting->qr_code === '1') + Yes +@else + No +@endif + @endforeach diff --git a/composer.json b/composer.json index 652c89fddf..8591536603 100755 --- a/composer.json +++ b/composer.json @@ -6,7 +6,8 @@ "laravel/framework": "4.0.*", "cartalyst/sentry": "2.0.*", "barryvdh/laravel-debugbar": "dev-master", - "chumper/datatable": "dev-master" + "chumper/datatable": "dev-master", + "bacon/bacon-qr-code": "dev-master" }, "require-dev": { "phpunit/phpunit": "*" diff --git a/composer.lock b/composer.lock index 02ef8b1fd3..6ebc6ce872 100644 --- a/composer.lock +++ b/composer.lock @@ -3,8 +3,50 @@ "This file locks the dependencies of your project to a known state", "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file" ], - "hash": "2ff29b285767430e11356a6316d24a84", + "hash": "59df281fac2656a9009c1e5a84946add", "packages": [ + { + "name": "bacon/bacon-qr-code", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/Bacon/BaconQrCode.git", + "reference": "0537ed27917f5ae26e5837ac4bfd837171d0b848" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/0537ed27917f5ae26e5837ac4bfd837171d0b848", + "reference": "0537ed27917f5ae26e5837ac4bfd837171d0b848", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-gd": "to generate QR code images" + }, + "type": "library", + "autoload": { + "psr-0": { + "BaconQrCode": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "http://www.dasprids.de", + "role": "Developer" + } + ], + "description": "BaconQrCode is a QR code generator for PHP.", + "homepage": "https://github.com/Bacon/BaconQrCode", + "time": "2013-08-27 10:20:42" + }, { "name": "barryvdh/laravel-debugbar", "version": "dev-master", @@ -2660,7 +2702,8 @@ "minimum-stability": "dev", "stability-flags": { "barryvdh/laravel-debugbar": 20, - "chumper/datatable": 20 + "chumper/datatable": 20, + "bacon/bacon-qr-code": 20 }, "platform": [