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

Add site setting to define text below asset QR codes
This commit is contained in:
snipe
2014-05-05 21:31:45 -04:00
7 changed files with 78 additions and 6 deletions
+22 -4
View File
@@ -17,10 +17,14 @@ use Str;
use Validator;
use View;
use Response;
use Config;
use Log;
use BaconQrCode\Renderer\Image as QrImage;
class AssetsController extends AdminController {
protected $qrCodeDimensions = array( 'height' => 160, 'width' => 160);
protected $qrCodeDimensions = array( 'height' => 170, 'width' => 170);
/**
* Show a list of all the assets.
@@ -563,14 +567,28 @@ class AssetsController extends AdminController {
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']);
$qr_text = !empty($settings->qr_text) ?
$settings->qr_text : $settings->site_name;
$text = new QrImage\Decorator\Text;
$text->setText($asset->asset_tag, 'top')
->setText($qr_text, 'bottom');
$renderer = new QrImage\Png;
$renderer->setRoundDimensions(true)
->setWidth($this->qrCodeDimensions['width'])
->setHeight($this->qrCodeDimensions['height'])
->setMargin(0)
->addDecorator($text);
$writer = new \BaconQrCode\Writer($renderer);
$content = $writer->writeString(route('view/hardware', $asset->id));
$content_disposition = sprintf('attachment;filename=qr_code_%s.png', preg_replace('/\W/', '', $asset->asset_tag));
$response = Response::make($content, 200);
$response->header('Content-Type', 'image/png');
$response->header('Content-Disposition', $content_disposition);
return $response;
}
}
@@ -66,6 +66,7 @@ class SettingsController extends AdminController {
$rules = array(
"site_name" => 'required|min:3',
"per_page" => 'required|min:1|numeric',
"qr_text" => 'min:1|max:31'
);
// Create a new validator instance from our validation rules
@@ -84,6 +85,7 @@ class SettingsController extends AdminController {
$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'));
$setting->qr_text = e(Input::get('qr_text'));
// Was the asset updated?
if($setting->save())
@@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddQrTextToSettingsTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('settings', function(Blueprint $table)
{
$table->string('qr_text', 32)->nullable()->default(NULL);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('settings', function(Blueprint $table)
{
$table->dropColumn('qr_text');
});
}
}
+1 -1
View File
@@ -26,7 +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'));
Route::get('{assetId}/qr_code', array('as' => 'qr_code/hardware', 'uses' => 'Controllers\Admin\AssetsController@getQrCode'));
# Asset Model Management
+1 -1
View File
@@ -157,7 +157,7 @@ View Asset {{ $asset->asset_tag }} ::
@if ($qr_code->display)
<h6>QR Code</h6>
<p>
<img src="{{ $qr_code->url }}" height="{{ $qr_code->height }}" width="{{ $qr_code->width }}" />
<img src="{{ $qr_code->url }}" />
</p>
@endif
+14
View File
@@ -62,6 +62,20 @@
</div>
</div>
<div class="form-group {{ $errors->has('qr_text') ? 'error' : '' }}">
<label class="control-label" for="qr_text">QR Code Text</label>
<div class="controls">
@if ($setting->qr_code === '1')
<input class="col-md-9" type="text" name="qr_text" id="qr_text" value="{{ Input::old('qr_text', $setting->qr_text) }}" />
@else
<span class="help-inline">
Enable QR Codes first to set this
</span>
@endif
{{ $errors->first('qr_text', '<span class="help-inline">:message</span>') }}
</div>
</div>
@endforeach
@@ -51,6 +51,10 @@ Settings ::
<td>No</td>
@endif
</tr>
<tr>
<td>QR Code Text</td>
<td>{{ $setting->qr_text }}</td>
</tr>
@endforeach
</tbody>
</table>