Merge pull request #119 from refinery29/qr-codes-ftw

Added support for QR codes in Asset view
This commit is contained in:
snipe
2014-01-28 11:52:22 -08:00
9 changed files with 159 additions and 6 deletions
+43 -2
View File
@@ -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.
*
+3 -1
View File
@@ -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())
@@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
class AddQrCodeToSettingsTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('settings', function($table)
{
$table->integer('qr_code')->nullable()->default(NULL);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('settings', function($table)
{
$table->dropColumn('qr_code');
});
}
}
+1
View File
@@ -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
@@ -154,6 +154,13 @@ View Asset {{ $asset->asset_tag }} ::
<!-- side address column -->
<div class="col-md-3 col-xs-12 address pull-right">
@if ($qr_code->display)
<h6>QR Code</h6>
<p>
<img src="{{ $qr_code->url }}" height="{{ $qr_code->height }}" width="{{ $qr_code->width }}" />
</p>
@endif
@if ((isset($asset->assigned_to ) && ($asset->assigned_to > 0)))
<h6><br>Checked Out To:</h6>
<ul>
+16
View File
@@ -46,6 +46,22 @@
</div>
</div>
<div class="form-group {{ $errors->has('qr_code') ? 'error' : '' }}">
<label class="control-label" for="qr_code">Display QR Codes</label>
<div class="controls">
@if ($is_gd_installed)
<input class="col-md-1" type="checkbox" name="qr_code" id="qr_code" value="1" {{ $setting->qr_code === '1' ? 'checked' : '' }} />
@else
<span class="help-inline">
PHP Image Processing and GD plugin is NOT installed.
<br>
You must install php-gd to display QR codes, see <a href="http://www.php.net/manual/en/image.installation.php">install instructions</a>.
</span>
@endif
{{ $errors->first('qr_code', '<span class="help-inline">:message</span>') }}
</div>
</div>
@endforeach
@@ -43,6 +43,14 @@ Settings ::
<td>Per Page</td>
<td>{{ $setting->per_page }} </td>
</tr>
<tr>
<td>Display QR Codes</td>
@if ($setting->qr_code === '1')
<td>Yes</td>
@else
<td>No</td>
@endif
</tr>
@endforeach
</tbody>
</table>
+2 -1
View File
@@ -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": "*"
Generated
+45 -2
View File
@@ -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": [