Merge branch 'develop'

This commit is contained in:
snipe 2017-11-21 22:43:00 -08:00
commit e84a6059f4
14 changed files with 178 additions and 117 deletions

View file

@ -0,0 +1,136 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class Version extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'version:update {--branch=master} {--type=patch}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$use_branch = $this->option('branch');
$use_type = $this->option('type');
$git_branch = trim(shell_exec('git rev-parse --abbrev-ref HEAD'));
$build_version = trim(shell_exec('git rev-list --count '.$use_branch));
$versionFile = 'config/version.php';
$full_hash_version = str_replace("\n", '', shell_exec('git describe master --tags'));
$version = explode('-', $full_hash_version);
$app_version = $current_app_version = $version[0];
$hash_version = $version[2];
$prerelease_version = '';
$this->line('Branch is: '.$use_branch);
$this->line('Type is: '.$use_type);
$this->line('Current version is: '.$full_hash_version);
if (count($version)==3) {
$this->line('This does not look like an alpha/beta release.');
} else {
print_r($version);
if (array_key_exists('3',$version)) {
$this->line('The current version looks like a beta release.');
$prerelease_version = $version[1];
$hash_version = $version[3];
}
}
$app_version_raw = explode('.', $app_version);
$maj = str_replace('v', '', $app_version_raw[0]);
$min = $app_version_raw[1];
$patch = '';
// This is a major release that might not have a third .0
if (array_key_exists(2, $app_version_raw)) {
$patch = $app_version_raw[2];
}
if ($use_type=='major') {
$app_version = "v".($maj + 1).".$min.$patch";
} elseif ($use_type=='minor') {
$app_version = "v"."$maj.".($min + 1).".$patch";
} elseif ($use_type=='pre') {
$pre_raw = str_replace('beta','', $prerelease_version);
$pre_raw = str_replace('alpha','', $pre_raw);
$pre_raw = str_ireplace('rc','', $pre_raw);
$pre_raw = $pre_raw++;
$this->line('Setting the pre-release to '. $prerelease_version.'-'.$pre_raw);
$app_version = "v"."$maj.".($min + 1).".$patch";
} elseif ($use_type=='patch') {
$app_version = "v" . "$maj.$min." . ($patch + 1);
// If nothing is passed, leave the version as it is, just increment the build
} else {
$app_version = "v" . "$maj.$min." . $patch;
}
// Determine if this tag already exists, or if this prior to a release
$this->line('Running: git rev-parse master '.$current_app_version);
// $pre_release = trim(shell_exec('git rev-parse '.$use_branch.' '.$current_app_version.' 2>&1 1> /dev/null'));
if ($use_branch=='develop') {
$app_version = $app_version.'-pre';
}
$full_app_version = $app_version.' - build '.$build_version.'-'.$hash_version;
$array = var_export(
array(
'app_version' => $app_version,
'full_app_version' => $full_app_version,
'build_version' => $build_version,
'prerelease_version' => $prerelease_version,
'hash_version' => $hash_version,
'full_hash' => $full_hash_version,
'branch' => $git_branch),
true
);
// Construct our file content
$content = <<<CON
<?php
return $array;
CON;
// And finally write the file and output the current version
\File::put($versionFile, $content);
$this->info('Setting NEW version: '. $full_app_version.' ('.$git_branch.')');
}
}

View file

@ -1,91 +0,0 @@
<?php
namespace App\Console\Commands;
use Symfony\Component\Console\Input\InputArgument;
use Illuminate\Console\Command;
class Versioning extends Command
{
/**
* The console command name.
*
* @var string
*/
protected $name = 'versioning:update';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Generate and update app\'s version via git.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return void
*/
public function fire()
{
$versionFile = 'config/version.php';
$hash_version = str_replace("\n", '', shell_exec('git describe --tags'));
$version = explode('-', $hash_version);
$array = var_export(
array(
'app_version' => $version[0],
'build_version' => $version[1],
'hash_version' => $version[2],
'full_hash' => $hash_version),
true
);
// Construct our file content
$content = <<<CON
<?php
return $array;
CON;
// And finally write the file and output the current version
\File::put($versionFile, $content);
$this->line('Setting version: '. config('version.app_version').' build '.config('version.build_version').' ('.config('version.hash_version').')');
}
/**
* Get the console command arguments.
*
* @return array
*/
protected function getArguments()
{
return array(
);
}
/**
* Get the console command options.
*
* @return array
*/
protected function getOptions()
{
return array(
);
}
}

View file

@ -19,7 +19,7 @@ class Kernel extends ConsoleKernel
Commands\SendInventoryAlerts::class, Commands\SendInventoryAlerts::class,
Commands\SendExpectedCheckinAlerts::class, Commands\SendExpectedCheckinAlerts::class,
Commands\ObjectImportCommand::class, Commands\ObjectImportCommand::class,
Commands\Versioning::class, Commands\Version::class,
Commands\SystemBackup::class, Commands\SystemBackup::class,
Commands\DisableLDAP::class, Commands\DisableLDAP::class,
Commands\Purge::class, Commands\Purge::class,

View file

@ -21,7 +21,7 @@ class CategoriesController extends Controller
public function index(Request $request) public function index(Request $request)
{ {
$this->authorize('view', Category::class); $this->authorize('view', Category::class);
$allowed_columns = ['id', 'name','category_type','use_default_eula','eula_text', 'require_acceptance','checkin_email', 'assets_count', 'accessories_count', 'consumables_count', 'components_count', 'image']; $allowed_columns = ['id', 'name','category_type', 'category_type','use_default_eula','eula_text', 'require_acceptance','checkin_email', 'assets_count', 'accessories_count', 'consumables_count', 'components_count', 'image'];
$categories = Category::select(['id', 'created_at', 'updated_at', 'name','category_type','use_default_eula','eula_text', 'require_acceptance','checkin_email','image']) $categories = Category::select(['id', 'created_at', 'updated_at', 'name','category_type','use_default_eula','eula_text', 'require_acceptance','checkin_email','image'])
->withCount('assets', 'accessories', 'consumables', 'components'); ->withCount('assets', 'accessories', 'consumables', 'components');

View file

@ -50,11 +50,9 @@ class ReportsController extends Controller
$offset = request('offset', 0); $offset = request('offset', 0);
$limit = request('limit', 50); $limit = request('limit', 50);
$total = $actionlogs->count(); $total = $actionlogs->count();
$actionlogs = $actionlogs->orderBy($sort, $order); $actionlogs = $actionlogs->orderBy($sort, $order)->skip($offset)->take($limit)->get();
$actionlogs = $actionlogs->skip($offset)->take($limit)->get();
return (new ActionlogsTransformer)->transformActionlogs($actionlogs, $total);
return response()->json((new ActionlogsTransformer)->transformActionlogs($actionlogs, $total), 200, ['Content-Type' => 'application/json;charset=utf8'], JSON_UNESCAPED_UNICODE);
} }
} }

View file

@ -1238,8 +1238,9 @@ class AssetsController extends Controller
public function audit($id) public function audit($id)
{ {
$settings = Setting::getSettings();
$this->authorize('audit', Asset::class); $this->authorize('audit', Asset::class);
$dt = Carbon::now()->addMonths(12)->toDateString(); $dt = Carbon::now()->addMonths($settings->audit_interval)->toDateString();
$asset = Asset::findOrFail($id); $asset = Asset::findOrFail($id);
return view('hardware/audit')->with('asset', $asset)->with('next_audit_date', $dt)->with('locations_list'); return view('hardware/audit')->with('asset', $asset)->with('next_audit_date', $dt)->with('locations_list');
} }

View file

@ -86,24 +86,21 @@ class AssetsTransformer
$decrypted = \App\Helpers\Helper::gracefulDecrypt($field,$asset->{$field->convertUnicodeDbSlug()}); $decrypted = \App\Helpers\Helper::gracefulDecrypt($field,$asset->{$field->convertUnicodeDbSlug()});
$value = (Gate::allows('superadmin')) ? $decrypted : strtoupper(trans('admin/custom_fields/general.encrypted')); $value = (Gate::allows('superadmin')) ? $decrypted : strtoupper(trans('admin/custom_fields/general.encrypted'));
// $fields_array = [$field->convertUnicodeDbSlug() => $value];
$fields_array[$field->name] = [ $fields_array[$field->name] = [
'field' => $field->convertUnicodeDbSlug(), 'field' => $field->convertUnicodeDbSlug(),
'value' => $value 'value' => $value,
'field_format' => $field->format,
]; ];
} else { } else {
$fields_array[$field->name] = [ $fields_array[$field->name] = [
'field' => $field->convertUnicodeDbSlug(), 'field' => $field->convertUnicodeDbSlug(),
'value' => $asset->{$field->convertUnicodeDbSlug()} 'value' => $asset->{$field->convertUnicodeDbSlug()},
'field_format' => $field->format,
]; ];
//$fields_array = [$field->convertUnicodeDbSlug() => $asset->{$field->convertUnicodeDbSlug()}];
} }
//array += $fields_array;
$array['custom_fields'] = $fields_array; $array['custom_fields'] = $fields_array;
} }
} else { } else {

View file

@ -26,7 +26,7 @@ class CategoriesTransformer
'id' => (int) $category->id, 'id' => (int) $category->id,
'name' => e($category->name), 'name' => e($category->name),
'image' => ($category->image) ? app('categories_upload_url').e($category->image) : null, 'image' => ($category->image) ? app('categories_upload_url').e($category->image) : null,
'type' => e($category->category_type), 'category_type' => e($category->category_type),
'eula' => ($category->getEula()) ? true : false, 'eula' => ($category->getEula()) ? true : false,
'checkin_email' => ($category->checkin_email =='1') ? true : false, 'checkin_email' => ($category->checkin_email =='1') ? true : false,
'require_acceptance' => ($category->require_acceptance =='1') ? true : false, 'require_acceptance' => ($category->require_acceptance =='1') ? true : false,

View file

@ -40,7 +40,7 @@ class CategoryPresenter extends Presenter
"visible" => true, "visible" => true,
"formatter" => 'imageFormatter', "formatter" => 'imageFormatter',
],[ ],[
"field" => "type", "field" => "category_type",
"searchable" => true, "searchable" => true,
"sortable" => true, "sortable" => true,
"title" => trans('general.type'), "title" => trans('general.type'),

View file

@ -1,7 +1,10 @@
<?php <?php
return array ( return array (
'app_version' => 'v4.1.5', 'app_version' => 'v4.1.6-pre',
'build_version' => '187', 'full_app_version' => 'v4.1.6-pre - build 2765-g1d6320a',
'hash_version' => 'gc0293a7', 'build_version' => '2765',
'full_hash' => 'v4.1.5-beta2-187-gc0293a7', 'prerelease_version' => '',
'hash_version' => 'g1d6320a',
'full_hash' => 'v4.1.5-2-g1d6320a',
'branch' => 'develop',
); );

View file

@ -255,6 +255,8 @@ $(document).ready(function () {
return datalist.text; return datalist.text;
} }
// This handles the radio button selectors for the checkout-to-foo options
// on asset checkout and also on asset edit
$(function() { $(function() {
$('input[name=checkout_to_type]').on("change",function () { $('input[name=checkout_to_type]').on("change",function () {
var assignto_type = $('input[name=checkout_to_type]:checked').val(); var assignto_type = $('input[name=checkout_to_type]:checked').val();

View file

@ -219,11 +219,15 @@
id="table" id="table"
data-height="440" data-height="440"
data-url="{{ route('api.categories.index') }}"> data-url="{{ route('api.categories.index', ['sort' => 'assets_count', 'order' => 'asc']) }}">
<thead> <thead>
<tr> <tr>
<th class="col-sm-2" data-field="name" data-formatter="categoriesLinkFormatter">{{ trans('general.name') }}</th> <th class="col-sm-3" data-field="name" data-formatter="categoriesLinkFormatter" data-sortable="true">{{ trans('general.name') }}</th>
<th class="col-sm-2" data-field="assets_count"><i class="fa fa-barcode"></i></th> <th class="col-sm-3" data-field="category_type" data-sortable="true">{{ trans('general.type') }}</th>
<th class="col-sm-1" data-field="assets_count" data-sortable="true"><i class="fa fa-barcode"></i></th>
<th class="col-sm-1" data-field="accessories_count" data-sortable="true"><i class="fa fa-keyboard-o"></i></th>
<th class="col-sm-1" data-field="consumables_count" data-sortable="true"><i class="fa fa-tint"></i></th>
<th class="col-sm-1" data-field="components_count" data-sortable="true"><i class="fa fa-hdd-o"></i></th>
</tr> </tr>
</thead> </thead>
</table> </table>

View file

@ -727,12 +727,12 @@
<footer class="main-footer hidden-print"> <footer class="main-footer hidden-print">
<div class="pull-right hidden-xs"> <div class="pull-right hidden-xs">
<b>Version</b> {{ config('version.app_version') }} build {{ config('version.build_version') }} ({{ config('version.hash_version') }}) <b>Version</b> {{ config('version.app_version') }} - build {{ config('version.build_version') }} ({{ config('version.branch') }})
<a target="_blank" class="btn btn-default btn-xs" href="https://snipe-it.readme.io/docs/overview" rel="noopener">User's Manual</a> <a target="_blank" class="btn btn-default btn-xs" href="https://snipe-it.readme.io/docs/overview" rel="noopener">User's Manual</a>
<a target="_blank" class="btn btn-default btn-xs" href="https://snipeitapp.com/support/" rel="noopener">Report a Bug</a> <a target="_blank" class="btn btn-default btn-xs" href="https://snipeitapp.com/support/" rel="noopener">Report a Bug</a>
</div> </div>
<a target="_blank" href="https://snipeitapp.com" rel="noopener">Snipe-IT</a> is an open source <a target="_blank" href="https://snipeitapp.com" rel="noopener">Snipe-IT</a> is an open source
project, made with <i class="fa fa-heart" style="color: #a94442; font-size: 10px"></i> by <a href="https://twitter.com/snipeyhead" rel="noopener">@snipeyhead</a> under the <a href="https://www.gnu.org/licenses/agpl-3.0.en.html" rel="noopener">AGPL3 license</a>. project, made with <i class="fa fa-heart" style="color: #a94442; font-size: 10px"></i> by <a href="https://twitter.com/snipeitapp" rel="noopener">@snipeitapp</a> under the <a href="https://www.gnu.org/licenses/agpl-3.0.en.html" rel="noopener">AGPL3 license</a>.
</footer> </footer>

View file

@ -354,7 +354,18 @@
// (for example, the locked icon for encrypted fields) // (for example, the locked icon for encrypted fields)
var field_column_plain = field_column.replace(/<(?:.|\n)*?> ?/gm, ''); var field_column_plain = field_column.replace(/<(?:.|\n)*?> ?/gm, '');
if ((row.custom_fields) && (row.custom_fields[field_column_plain])) { if ((row.custom_fields) && (row.custom_fields[field_column_plain])) {
// If the field type needs special formatting, do that here
if ((row.custom_fields[field_column_plain].field_format) && (row.custom_fields[field_column_plain].value)) {
if (row.custom_fields[field_column_plain].field_format=='URL') {
return '<a href="' + row.custom_fields[field_column_plain].value + '" target="_blank" rel="noopener">' + row.custom_fields[field_column_plain].value + '</a>';
} else if (row.custom_fields[field_column_plain].field_format=='EMAIL') {
return '<a href="mailto:' + row.custom_fields[field_column_plain].value + '">' + row.custom_fields[field_column_plain].value + '</a>';
}
}
console.log('NOT a URL!');
return row.custom_fields[field_column_plain].value; return row.custom_fields[field_column_plain].value;
} }
} }